乐趣区

关于人工智能:Chai-3D之体积对象

举荐:将 NSDT 场景编辑器 退出你的 3D 开发工具链

介绍  

体积渲染对于须要可视化三维数据集的迷信和工程利用至关重要。示例包含由医学成像设施获取的数据或计算流体动力学模仿产生的数据的可视化。交互式体积渲染应用程序的用户依附古代图形加速器的性能来实现高效的数据摸索和性能发现。

由一堆 2D 图像组成的 3D 体积对象。请参阅示例 30 体素色彩图

体素数据

体素示意三维空间中规定网格上的值。体素是“体积”和“像素”的组合,其中像素是“图片”和“元素”的组合。与位图中的像素一样,体素自身通常不会将其地位(坐标)与其值一起显式编码。相同,体素的地位是依据其绝对于其余体素的地位(即它在形成单个体积图像的数据结构中的地位)推断的。与像素和体素相同,点和面通常由其顶点的坐标显式示意。这种差别的间接后果是,多边形可能无效地示意具备大量空空间或平均填充空间的简略 3D 构造,而体素善于示意非平均填充的惯例采样空间。

体素常常用于医学和迷信数据的可视化和剖析。某些体积显示器应用体素来形容其分辨率。例如,显示器可能可能显示 512x512x512 体素。体素对象  体积对象在 CHAI3D 中应用名为 cVoxelObject 的类实现,其中体积数据作为 3D 纹理(cTexture3D)存储到内存中。在上面的代码中,咱们演示了如何设置此类对象并对各个体素进行编程。

using namespace chai3d;
//--------------------------------------------------------------------------
// CREATE VOLUME MODEL
//--------------------------------------------------------------------------
// create a volumetric model
cVoxelObject* object = new cVoxelObject();
// add object to world
world->addChild(object);

// set the dimensions by assigning the position of the min and max corners
object->m_minCorner.set(-0.5,-0.5,-0.5);
object->m_maxCorner.set(0.5, 0.5, 0.5);
// set the texture coordinate at each corner.
object->m_minTextureCoord.set(0.0, 0.0, 0.0);
object->m_maxTextureCoord.set(1.0, 1.0, 1.0);
// set general material color
object->m_material->setOrangeCoral();
// set stiffness property
object->setStiffness(0.2 * maxStiffness);
// show/hide boundary box
object->setShowBoundaryBox(false);
//--------------------------------------------------------------------------
// CREATE VOXEL DATA
//--------------------------------------------------------------------------
// create multi image data structure
cMultiImagePtr image = cMultiImage::create();
// allocate 3D image data
image->allocate(512, 512, 512, GL_RGBA);
// create texture
texture = cTexture3d::create();
// assign volumetric image to texture
texture->setImage(image);
// assign texture to voxel object
object->setTexture(texture);
// set default rendering mode
object->setRenderingModeIsosurfaceMaterial();
// set quality of graphic rendering
object->setQuality(0.5);
// draw some 3D volumetric object
buildVoxelShape(0.5, 0.2);

编辑体素。请参阅示例 28 体素根本。

要编辑体素数据的内容,能够应用以下办法:

using namespace chai3d;
// assign a value to a voxel
image->setVoxelColor(x, y, z, color);

批改数据(一个或多个体素)后,请确保始终标记纹理以从 CPU 更新到 GPU 内存。

using namespace chai3d;
// update voxel data from CPU to GPU memory
texture->markForUpdate();

文件反对

也能够通过将一堆 2D 图像加载到内存中来构建体积模型。

using namespace chai3d;
// create multi image
cMultiImagePtr image = cMultiImage::create();
// load voxel data from images
int numImages = image->loadFromFiles("myModel0"), "png", 256);

传递函数  

如果您的体积图像处于灰度级别(CT、MRI 数据),则能够应用传递函数对数据进行着色。传递函数的作用是通过将值和其余数据度量映射到光学属性来强调数据中的特色。最简略和最宽泛应用的传递函数是一维的,它们将数据值的范畴映射到色彩和不透明度。通常,这些传递函数是应用一维纹理查找表实现的。

using namespace chai3d;
// create colormap image
cImagePtr colorMap = cImage::create();
// load colormap file
colorMap->loadFromFile("myColorMap.png");
// assign colormap to object
object->m_colorMap->setImage(colorMap);

3D 建模学习工作室翻译整顿,转载请表明出处!

退出移动版