推薦:將 NSDT場(chǎng)景編輯器 加入你的3D開(kāi)發(fā)工具鏈 介紹??體積渲染對(duì)于需要可視化三維數(shù)據(jù)集的科學(xué)和工程應(yīng)用至關(guān)重要。示例包括由醫(yī)學(xué)成像設(shè)備獲取的數(shù)據(jù)或計(jì)算流體動(dòng)力學(xué)模擬產(chǎn)生的數(shù)據(jù)的可視化。交互式體積渲染應(yīng)用程序的用戶依靠現(xiàn)代圖形加速器的性能來(lái)實(shí)現(xiàn)高效的數(shù)據(jù)探索和功能發(fā)現(xiàn)。 由一堆 2D 圖像組成的 3D 體積對(duì)象。請(qǐng)參閱示例 30 體素顏色圖體素?cái)?shù)據(jù)??體素表示三維空間中規(guī)則網(wǎng)格上的值。體素是“體積”和“像素”的組合,其中像素是“圖片”和“元素”的組合。與位圖中的像素一樣,體素本身通常不會(huì)將其位置(坐標(biāo))與其值一起顯式編碼。相反,體素的位置是根據(jù)其相對(duì)于其他體素的位置(即它在構(gòu)成單個(gè)體積圖像的數(shù)據(jù)結(jié)構(gòu)中的位置)推斷的。與像素和體素相反,點(diǎn)和面通常由其頂點(diǎn)的坐標(biāo)顯式表示。這種差異的直接結(jié)果是,多邊形能夠有效地表示具有大量空空間或均勻填充空間的簡(jiǎn)單 3D 結(jié)構(gòu),而體素擅長(zhǎng)表示非均勻填充的常規(guī)采樣空間。 ??體素經(jīng)常用于醫(yī)學(xué)和科學(xué)數(shù)據(jù)的可視化和分析。某些體積顯示器使用體素來(lái)描述其分辨率。例如,顯示器可能能夠顯示 512x512x512 體素。 體素對(duì)象??體積對(duì)象在 CHAI3D 中使用名為 cVoxelObject 的類實(shí)現(xiàn),其中體積數(shù)據(jù)作為 3D 紋理 (cTexture3D) 存儲(chǔ)到內(nèi)存中。在下面的代碼中,我們演示了如何設(shè)置此類對(duì)象并對(duì)各個(gè)體素進(jìn)行編程。 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); 編輯體素。請(qǐng)參閱示例 28 體素基本。要編輯體素?cái)?shù)據(jù)的內(nèi)容,可以使用以下方法: using namespace chai3d; // assign a value to a voxel image->setVoxelColor(x, y, z, color); ??修改數(shù)據(jù)(一個(gè)或多個(gè)體素)后,請(qǐng)確保始終標(biāo)記紋理以從 CPU 更新到 GPU 內(nèi)存。 using namespace chai3d; // update voxel data from CPU to GPU memory texture->markForUpdate(); 文件支持??也可以通過(guò)將一堆 2D 圖像加載到內(nèi)存中來(lái)構(gòu)建體積模型。 using namespace chai3d; // create multi image cMultiImagePtr image = cMultiImage::create(); // load voxel data from images int numImages = image->loadFromFiles("myModel0"), "png", 256); 傳遞函數(shù)??如果您的體積圖像處于灰度級(jí)別(CT、MRI 數(shù)據(jù)),則可以使用傳遞函數(shù)對(duì)數(shù)據(jù)進(jìn)行著色。傳遞函數(shù)的作用是通過(guò)將值和其他數(shù)據(jù)度量映射到光學(xué)屬性來(lái)強(qiáng)調(diào)數(shù)據(jù)中的特征。最簡(jiǎn)單和最廣泛使用的傳遞函數(shù)是一維的,它們將數(shù)據(jù)值的范圍映射到顏色和不透明度。通常,這些傳遞函數(shù)是使用一維紋理查找表實(shí)現(xiàn)的。 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建模學(xué)習(xí)工作室翻譯整理,轉(zhuǎn)載請(qǐng)標(biāo)明出處!
|