问题标签 [volume-rendering]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
428 浏览

volume-rendering - 如何通过 yt-project 体积渲染简单的 3D 数据

yt-project 是一个很好的体积数据工具包。
但它使用的数据集有点复杂,比如 Enzo 数据。
因此,如果我只想通过 yt-project 批量渲染简单的 3d 数据,如何加载数据?

简单的 3D 数据仅包含 Coordinate(x, y, z) 和点的密度。如下:

任何帮助表示赞赏!

0 投票
1 回答
1885 浏览

3d - VTK 如何通过 c++ 上的 imageImport 导入 3D 图像数据以进行体积渲染

通过 VTK Python API,我们可以导入/制作 3d 图像数据和体积渲染,如下所示:

在此处输入图像描述

Python代码是:

但是对于 c++ API,我无法通过 ImageImport 获得相同的体积渲染。

下面的代码是我写的C++代码参考上面的Python代码。但结果如下:</p>

在此处输入图像描述

我写的 C++ 代码参考了上面的 Python 代码:

我搜索示例代码,但只找到以下内容,它们无法处理 3d 图像数据。

任何帮助表示赞赏!

0 投票
2 回答
610 浏览

c# - 我怎么能多边形化 bool[,,]

如果有人在乎,我正在使用 WPF ....

故事开始:

我得到了一系列灰度图像(模型的切片)。用户输入灰度值的“范围”来构建 3D 模型。因此,我创建了一个 3Dbool数组,以便更轻松地构建 3D 模型。该数组表示一盒像素,指示是否应构建/生成/填充每个像素。


领带:

使用 a bool[,,],我想检索 aList<Point3D[]>其中每个Point3D[]长度为 3 并表示 3D 空间中的三角形。


附加信息:

生成的模型将进行 3D 打印。在 中bool[,,]true表示存在物质,而false表示不存在物质。我需要避免使用立方体模型,其中每个像素都被一个立方体替换(根据我的目的,这将是无用的)。模型应尽可能平滑且尽可能准确。


我试图做的事情:

1-我实现了行进立方体算法,但似乎根本没有创建它来接受值的“范围”。

2-我一直在努力尝试制作自己的算法,但我部分失败了。(真的很复杂,如果您想了解更多,请告知)


一些我不知道如何实施的预期解决方案:

1- 修改 Marching cubes 算法以使其使用bool[,,]

2-修改行进立方体算法,以使其使用使用“范围”isolevel值的作品来工作

3- 展示如何在 WPF 中实现另一种适合我的目的的算法(也许是光线投射算法)。

4-请求我尝试实现的算法的源代码,然后向我展示如何解决它。(它首先是为了将 a 多边形bool[,,]化)

5-其他一些神奇的解决方案。

提前致谢。


编辑:

通过说

使用 a bool[,,],我想检索 aList<Point3D[]>其中每个Point3D[]长度为 3 并表示 3D 空间中的三角形。

我的意思是我想检索一组三角形。每个三角形应表示为 3Point3D秒。如果您不知道 aPoint3D是什么,它是一个struct包含 3 个双精度数(X、Y 和 Z)的 a,用于表示 3D 空间中的位置。

行进立方体算法的问题在于它有点模糊。我的意思是,你这样做是怎么理解的??

因此,我根本不知道从哪里开始修改它。


另一个编辑:

在对行进立方体算法进行了一些试验后,我注意到多边形化 abool[,,]不会产生我期待的平滑 3D 模型,所以我的第一个预期解决方案和我的第四个预期解决方案都没有发挥作用。经过大量研究,我知道了体绘制的Ray-Casting方法。它看起来很酷,但我不确定它是否符合我的需求。尽管我知道它是如何工作的,但我无法真正理解它是如何实现的。


再编辑: TriTable.LookupTable这里EdgeTable.LookupTable有表格

这是MarchingCubes课程:

这是GridCell课程:

好的,这就是我正在做的事情:

我是从 Stack-Overflow 做的,所以请指出任何错别字。这是有效的,这会产生一个模型的外壳。我想做的是用 2 个整数替换函数isolevel中的变量:和. 不仅是 1 ,而且是一个范围。PolygoniseisolevelMinisolevelMaxint


编辑: 伙计们,请帮忙。50 次代表几乎是我声誉的 1/2。我希望我能改变我的期望。现在我只想知道如何实现我想要的,任何关于如何实现的片段,或者如果有人给出一些我可以用谷歌搜索的关键字,我用来解决我的问题,他会得到代表。我只需要一些光——这里很黑。


编辑很棒: 经过越来越多的研究,我发现体积光线行进算法实际上并没有生成表面。由于我需要打印生成的 3D 模型,所以我现在只有一种方法。我必须让行进立方体算法从最大和最小等值线值生成一个空心模型。

0 投票
1 回答
966 浏览

c++ - OpenGL 中的光线体积交集

我正在制作体积渲染器。我已经成功阅读了这本书,并且我的光线追踪器已经准备好了一些课程。现在的问题是如何做Ray和Volume(它的大小是256 * 256 * 256)相交以找到坐标'intersectFront'和'intersectBack'?

在我的射线课程中,我能够获取射线的原点和方向。

我尝试应用Liang Barsky 算法,但无法想到如何将其应用于盒子(立方体/体积)。

0 投票
0 回答
1028 浏览

numpy - 使用 VTK 从 numpy 数组渲染表面(或平滑体积)

我正在发现 VTK 并想用它来绘制一个 3D numpy 数组。到目前为止,我已经设法将一个 numpy 数组转换为 avtk.Volume并显示它,但是从那里我很难得到漂亮的东西。
我得到一个像这样的块状渲染:
应该玩更多的Minecraft

我想要一个平滑的渲染,所以我猜这个体积是平滑的,或者从这个体积中提取的表面是平滑的。
我已经为此卷测试了一堆 vtk 映射器,例如SmartVolumeMapper,并使用了着色器和插值,但没有得到很好的结果。

这是我的代码(在 Python 中):

我的印象是Volume演员不是获得漂亮东西的方法,也许我应该去一个PolyData或什么?我浏览了Marching Cubes 示例(在 C++ 中),它似乎需要一个体积并从中提取一个表面,但我暂时无法让它工作(没有错误,但输出是一个完全白色的错误窗口,它赢得了'不关闭)。
我可以更深入地研究它以尝试让它工作,但首先我想从你们那里得到意见,因为我是 VTK 的初学者,也许我处理这一切都是错误的。

我在 Ubuntu 14 上使用 Python 2.7.12 和 vtk 5.10.1。

0 投票
1 回答
5188 浏览

opengl - OpenGL 中的 3D 纹理采样

我目前正在尝试使用类似glTexImage3D. 我从一开始就关注本教程。我的最终目标是制作一个可以像这样工作的程序:

这个

我的理解是这是使用光线投射方法渲染的,并且模型是作为 3d 纹理导入的。光线投射和纹理采样任务在片段着色器中执行。我希望我可以复制这个程序作为练习。你能回答我的问题吗?

  1. 应该使用什么文件格式来导入 3D 纹理?
  2. 我应该使用哪些 glsl 函数来检测我的光线和纹理之间的距离?
  3. 3D纹理采样和体渲染有什么区别?
  4. 是否有任何可用的在线教程供我学习?
  5. 如何制作自己的 3D 纹理?(可以用搅拌机做一个吗?)
0 投票
1 回答
1021 浏览

opengl - 在 OpenGL 中使用 2D 纹理进行体积渲染

为什么我们必须根据相机的视角来对齐不同方向的纹理?不应该是一样的吗?(如果我启用了深度测试)

第一张幻灯片 第二张幻灯片


编辑1:

我用我自己的程序来测试它。

这是我的渲染功能代码。

矢量“切片”包含 2 个浮点数(z 位置和切片的 id)。每个实例都是唯一的。如果没有这个“if (lz != pz) ...”子句,我只能在 +ve Z 方向看到模型。


编辑2:

这是一种观点。 在此处输入图像描述

但是当我的相机移动到 z=0 附近时,部分纹理就看不到了。我试图关闭深度测试,然后我看到了背面的纹理。为什么前面的纹理消失了? 在此处输入图像描述

  1. 启用深度测试
  2. 禁用背面剔除
  3. 启用 alpha 测试

编辑3:

我将“if (lz != pz) ...”子句更改为以下代码,现在一切正常。但我还是不明白为什么。

在此处输入图像描述 虽然它看起来并不吸引人,但它按预期工作。对于每一帧,我根据相机的位置对切片进行排序。


编辑4:

我的 alpha 测试代码

这两行在 init() 函数中。


0 投票
1 回答
1933 浏览

opengl - 在计算着色器中写入空的 3D 纹理

我正在尝试创建一个空的 3D 纹理,其尺寸和格式在运行时加载。然后我想修改这个纹理的值,然后我用光线追踪器进行体积渲染。我知道我的渲染功能工作正常,因为我可以毫无问题地渲染尺寸和格式所来自的体积。空卷也会呈现,但我无法向其写入任何数据,因此它一直是白色的。

创建卷后,我将其读入显示函数中的计算着色器:

在我的着色器中,我要做的就是根据它在体积中的位置来改变颜色:

我确信这个错误与访问写作被拒绝有关,但我无法准确指出它是什么。

注意:我正在使用 GL_RED 等,因为这是体积数据,这就是我在体积渲染器的其余部分中拥有它的方式,它似乎工作正常。

0 投票
1 回答
360 浏览

bigdata - 用于 TB 级数据的大规模体绘制和可视化库

我想可视化跨越几 GB 到几 TB 的 3D 数据量。一种解决方案是自己动手,但这可能需要一些时间。为避免这种情况,我目前正在探索当前可用的解决方案。我研究得越多,我发现的软件就越多。一些例子包括ParaView/VTK, OSPRay, Embree, Splotch,NVIDIA GVDB/OptiX等。

其中一些软件为可视化和数据操作提供了完整的解决方案(例如,ParaView/VTK)。其他人主要关注高性能渲染(例如,Embree)。其他人提供用于渲染的低级 API(例如,GVDB/OptiX)。有些针对特定硬件进行了优化(例如,Embree针对 Intel 硬件、GVDB/Optix针对 NVIDIA GPU)。其他包括分布式渲染的基础设施(例如,ParaView/VTK) 这允许他们声称他们可以渲染数 TB 大小的数据集,而其他人则将此功能留给用户。可以说,使用一些巧妙的 LOD 和核外算法,也可以在单台机器上执行数 TB 大小的数据集体积渲染,但让我们将这个留待另一个讨论。最后,还有大量来自大学研究项目和学术界的软件,这些软件旨在解决特定问题,并且不再维护。

我想知道这里是否有人对此类软件有经验,并且可以就哪些软件/库值得试验给我一些指示或建议。我的理想要求如下:

  • 以交互式帧速率(假设 > 10 FPS)对高达几 TB 的数据集执行体积渲染/光线行进。
  • 利用不同的并行架构(CPU、GPU、多节点)
  • 实施/支持详细程度算法。
  • 能够在渲染场景中添加小部件。例如,轴箭头、剪切平面等。
  • 采用提供公共 API 以供使用的库的形式。理想情况下在 Python 中,但我想自己围绕 C/C++ API 制作 Python 包装器是非常可行的。
  • 它们得到积极维护并具有适当的文档。

我不一定要寻找包含以上所有内容的软件库,但是,越多越好!:)

先感谢您。

0 投票
1 回答
695 浏览

javascript - 如何使用 vtk.js 渲染 Float32Array 立方体?

我想用 vtk.js 渲染一个 3D 体积。我的问题是 vtk.js 文档中的所有教程/示例都加载和渲染vti文件。就我而言,我的数据只是一个Float32Array包含 3D 图像值的数据。如何使用 vtk.js 进行体积渲染?我需要一个不会在文件系统上创建其他文件的解决方案。