问题标签 [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 投票
2 回答
292 浏览

opengl - 这是一个体积渲染结果,如何与其他 3D 对象交互

我已经在 CUDA 中使用光线投射实现了体积渲染。现在我需要在场景中添加其他 3D 对象(如我的情况下的 3D 地形),然后使其与体积渲染结果交互。例如,当我移动与地形重叠的体积渲染结果时,我希望对体积渲染结果进行调制,例如裁剪体积渲染结果中的重叠部分。

但是体积渲染的结果来自于光线累积的颜色,所以是没有深度的2D图片。那么如何实现交互让我很困惑。有人可以给我一个提示吗?

0 投票
1 回答
3119 浏览

cuda - 在 CUDA 内核函数中,为什么 tex3D 不能返回任何值?

在这里,我有两个不同版本的代码。

第一个是来自 CUDA SDK 的完整 CUDA 程序。在内核中,tex3D 运行良好。

第二个版本更复杂,有很多 OpenGL 函数和 OpenGL 纹理。它的 .cu 文件与第一个相同。但是,我在同一个内核函数中使用 cudaMalloc 变量从 tex3D 获取值,我发现 tex3D 函数没有返回任何内容。实际上,两个程序使用相同的方式来创建 3D 纹理,如下代码所示:

下面的代码是调用 tex3D 的内核函数。实际上,它和 CUDA SDK volumeRender 的内核一样,都是光线投射的实现。

我认为这些代码很好,因为它们中的大多数来自 CUDA SDK volumeRender,并且在我的第一个版本代码中运行良好。

但我不知道为什么在第二个版本中 tex3D 突然无效。也许其他一些OpenGL纹理有一些负面影响?

0 投票
1 回答
8070 浏览

matlab - Matlab 的 slice() 函数无法按预期工作

我想使用以下代码行在13 个z位置绘制离散的 2D 图像。[4:4:52]

但是,我得到了从 1 到 13 的 13 个连续图,而不是 13 个离散位置,如下所示:

在此处输入图像描述

有人可以告诉我我的错误是什么吗?我希望图像堆叠在[4:4:52]z 轴上的位置。谢谢。

0 投票
2 回答
1513 浏览

opengl - 关于分配openGL 3D纹理大小为1G的问题

我正在做一些关于体积渲染的工作。我想分配一个 1024x1024x1024 uchar 的 3D 亮度纹理。不幸的是,它总是失败。

通过在glTexImage3D(...)之后添加glGetError( ) ,我得到错误代码1285,这意味着“内存不足”。

但是,我的卡是 NV quadro 4800,其内存大小为 1536MB,大于上面的纹理大小(1GB)。该卡的驱动程序版本为 296.88。glew的版本是最新的1.8版本。

我关于分配纹理的代码如下所示:

PS。通过使用 *glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE, dim)*,它返回2048,这意味着我的硬件应该能够分配 1024 立方 uchar 纹理。

聚苯乙烯。顺便说一句,我也使用 CUDA 做了一些工作。当我在 CUDA 中分配 2048 立方 uchar 纹理时没有问题。

这个openGL 3D纹理有什么问题?

0 投票
1 回答
889 浏览

opengl - 使用对象顺序空白空间跳过实现体积渲染

我从 Scenegraph 2009 课程笔记的Advanced IlluminationTechniques for GPU-Based Volume Raycasting中学习了一些体积渲染技术。我对对象顺序空白空间跳过感兴趣,它将边界框光栅化为许多小块,如下图所示:医疗量数据

我想知道如何实现这个?通过八叉树?或任何其他技术?我已经实现了一个简单的光线投射体积渲染程序,没有对象顺序空白空间跳过。代码片段或伪代码会有很大帮助。

0 投票
1 回答
289 浏览

opengl - 体绘制:保持交互性

我尝试使用 OpenGL、GLSL 和 C++ 实现 Raycasting 体积渲染。众所周知,它是计算密集型的,并且很难获得良好的交互性,例如移动视点和放大和缩小。我们可以使用自适应方案来修改参数以在交互过程中实现反应性。

我们可以修改的一个参数是图像采样距离:图像平面上相邻光线之间在 x 和 y 方向上的距离。

当我进行光线投射体积渲染时,首先我绘制一个立方体,然后渲染它的背面(出口点)和正面(入口点),然后我可以进行光线投射通道。

我的问题是:如何减少图像采样距离?

0 投票
1 回答
419 浏览

opengl - 通过打包纹理对大数据进行体渲染

我想对大于 GPU 内存的大型数据集实现基于 GPU 的光线投射体积渲染。我尝试这样做:

(1)首先我将体积分成大小相等的砖块。

(2)然后我根据传递函数决定每块砖是否透明。

(3)然后我将不透明的砖块存储到“Packed-Texture”中。为了在光线投射渲染期间进行采样,我创建了另一个名为“Index-Texture”的纹理,它将砖块索引存储在 Packed-Texture 中。

当我在着色器中渲染期间进行采样时,首先我计算采样点在哪个砖块中。然后我访问索引纹理以获取采样点的值。但默认值是插值后的值,而不是正确地在 Packed-Texture 中的砖的索引。

所以,我的问题是:在光线投射渲染期间进行采样时,如何从索引纹理中正确获取 Packed-Texture 中的砖索引(采样点所在的位置)?

0 投票
1 回答
276 浏览

opengl - 平面阻塞多分辨率体绘制

为了将大量数据加载到我的光线投射体积渲染系统中,我想实现平面阻塞多分辨率策略- 将体积分成许多大小相等但分辨率或 LOD(细节级别)不同的子块子块的重要性。

我读了一篇论文,上面说我可以这样做:

通过分析内部数据的变化率,我们可以确定每个块的特殊LOD,以显示块的重要性。

图 1:带有 2D 纹理的平面块

在此处输入图像描述

根据平分块策略,块的维度必须是2的幂,即用2^n * 2^n * 2^n大小划分体积,因此对于每个块,有n+1个细节层次( 0-n)。由于内部数据的变化是区块重要性的数学基础,区块的每个细节层次可以用下面的公式来限定

公式1 :

在此处输入图像描述

这是第 i 个块的变化,avgi 表示某个父块的第 i 个子块中 2^(3 * max_l) 标量值的平均值,max_l 表示父块的最高细节层次, l 表示正在分析当前的详细程度。Sj 表示标量值。最后使标量值在约束条件下变化到[0,1]范围内。

我的问题是:正如它所说,在某个父块的第 i 个子块中有 2^(3 * max_l) 个体素,图像 1 中的子块和父块是什么?另外,按照公式,好像有2^(3 * (max_l - l))体素。看不懂~

0 投票
2 回答
2525 浏览

opengl - 将 2d 图像堆栈转换为 3d 图像,体绘制

我想对 CT 数据进行基于纹理的体积渲染。我有一堆 2d CT 图像,我想在 opengl 中用作 3d 纹理(真的是 jogl)。我必须以在查看参数更改时发生变化的多边形代理几何体的方式进行操作。如何将 2d 图像转换为一个 3d 纹理?我还没有找到任何关于 opengl 如何期望 3d 图像被格式化的信息。我看到了这个:https ://stackoverflow.com/questions/13509191/how-to-convert-2d-image-into-3d-image ,但我不一样。

此外,我仍然对这种体积渲染技术感到困惑。是否可以在 3d 纹理中获取 3d 位置并将其映射到四边形的 2d 角?我找到了这个例子:http ://www.felixgers.de/teaching/jogl/texture3D.html但我不知道这是否意味着你必须使用 3d 顶点。有谁知道更多带有明确示例的来源?

0 投票
1 回答
1823 浏览

matlab - 在 3D 体积数据中创建圆柱体

我正在尝试创建一个由几何形状组成的原始体积数据的数据集。重点是使用体积射线投射将它们投影为 2D,但首先我想手动创建体积。

几何结构由一个位于体积中间的圆柱体、沿 Z 轴和 2 个围绕第一个圆柱体的较小圆柱体组成,这些圆柱体源自围绕轴的旋转。

到目前为止,这是我的功能:

其概念是创建第一个圆柱体,然后根据 z 轴值“切割”,以定义其高度。另一个圆柱体是使用关系 A 2 + B 2 = R 2创建的,其中 A 和 B 使用仅围绕 x 和 y 轴的旋转矩阵进行相应旋转,使用 R y (θ)R x (φ),如此所述。

到目前为止,一切似乎都在工作,因为我已经实现了代码(测试它运行良好)来显示投影,并且当圆柱体没有从无限高度“修剪”时,它们似乎有正确的旋转。

我计算出N哪个是向量,[0 0 1]也就是 z 轴,其旋转方式与圆柱体相同。然后我找到两个P我希望圆柱体边缘具有相同距离的T点,并根据该点和法向量计算平面方程。最后,我根据该等式进行修剪。或者至少这就是我认为我正在做的事情,因为在修剪后我通常什么也得不到(每个值都是零)。或者,我在试验时能得到的最好的东西是修剪了圆柱体,但是顶部和底部的平面没有很好地定向。

如果我的代码有任何帮助或更正,我将不胜感激,因为我一直在查看几何方程,但找不到错误所在。

编辑:这是我正在尝试创建的对象的快速屏幕截图。请注意,圆柱体在体积数据中是不透明的,所有内部都被视为均质材料。

气缸套