专栏中心

EEPW首页 > 专栏 > Chai 3D之体积对象

Chai 3D之体积对象

发布人:ygtu 时间:2023-03-06 来源:工程师 发布文章
推荐:将 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建模学习工作室翻译整理,转载请标明出处!


专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词: AI 人工智能 机器学习 工业仿真

相关推荐

被动元件新周期:AI时代高端化、服务器化重构MLCC产业格局

个人-窗口卫士项目采访

基于机器学习的语音驱动人脸动画方法

ADI公司:工业4.0——人工智能的端

视频 2019-11-08

三菱携手Tallgrass布局怀俄明州 AI 专属能源枢纽

存储器转型AI战略资源 台厂受惠

网络与存储 2026-05-19

AI/HPC新世代 COUPE光互连扮要角

网络与存储 2026-05-15

光电路交换何以成为 AI 数据中心刚需

东南大学人工智能01

微软X英特尔黑客松大赛

思科凭借通用商用芯片与光模块赢得 AI 领域客户

仿人机器人

国家“算力网”:像用水用电一样用AI

2026-05-18

本科毕业设计:一种基于发育思想的语音识别系统实现

人工智能与机器人

研华科技与Axelera AI深化战略合作 加速推动基于Europa平台的边缘AI创新

AI聊天机器人能像医生一样推理吗?

联发科加速AI在地化应用布局

智能计算 2026-05-19

个人-口罩识别系统项目采访

更多 培训课堂
更多 焦点
更多 视频

技术专区