当前位置: 首页 > wzjs >正文

免费手机网页网站沈阳seo建站

免费手机网页网站,沈阳seo建站,建零售网站还是,网站建设课程教学改革文章目录 概要vtkVolume概念C代码渲染效果参考 概要 绘制图像需要在空间中建立一个四边形图元,然后以纹理映射的方式将图像贴图到该图元上进行渲染;而三维模型的绘制通常会分解为一系列的多边形面片进行绘制。这种通过生成中间几何图元来进行渲染的方法称为几何渲染…

文章目录

  • 概要
  • vtkVolume概念
  • C++代码
  • 渲染效果
  • 参考

概要

绘制图像需要在空间中建立一个四边形图元,然后以纹理映射的方式将图像贴图到该图元上进行渲染;而三维模型的绘制通常会分解为一系列的多边形面片进行绘制。这种通过生成中间几何图元来进行渲染的方法称为几何渲染。几何染方式速度比较快,但是不能显示体数据的内部细节,例如,在渲染人的三维CT体数据时,通过几何渲染只能在切片图像之间进行切换,而不能对体数据内部细节进行立体观察。这时就需要用到体绘制技术了。

体绘制,有时又称作三维重建(区别于投影图像的三维重建),是一种直接利用体数据来生成二维图像的绘制技术。与面绘制不同,体绘制技术不需要提取体数据内部的等值面,它是一个对三维体数据进行采样和合成的过程。体绘制能够通过设置不透明度值来显示体数据内部的不同成分和细节,例如显示人体CT图像的不同器官和组织。体绘制也是 VTK 中的重要内容,这里将讲解利用 VTK 实现体绘制的方法。

将渲染窗口 vtkRenderWindow 看作一个剧院,剧院中一般需要有灯光(vtkLight)、相机(vtkCamera,可以理解为观众)和舞台(vtkRenderer)来为观众呈现精彩的演出;舞台上负责表演的自然是演员(vtkActor),而且演员通常不止一个,可以根据需要为舞台加入更多的演员(vtkActor)。每个演员各具特色,而用来表示其特色的则是vkProperty(负责控制颜色、材质以及不透明度等);每个vkActor 的数据和渲染信息存储在一个vtkMapper 对象中,负责将原始数据转换为渲染所需的图元数据。

光线投射法是最常用的体绘制方法。它是一种基于图像序列的直接体绘制方法,其基本原理是从投影图像平面(通常为平面)的每个像素沿着视线方向发射一条穿过体数据的射线然后在射线上按照一定的步长进行等距采样,对每个采样点采用插值技术来计算其体素值,根据颜色传输函数和不透明度传输函数来获取相应的颜色值和不透明度,最后利用光线吸收模型将颜色值进行累加直至光线穿过体数据,即可得到当前平面像素的渲染颜色,生成最终的显示图像。光线投射法的优点是能够比较精确地模拟原始体数据,但计算量比较大,实时体绘制对计算机硬件的要求比较高。

vtkVolume概念

vtkVolume类似于几何渲染中的vtkActor,用于表示渲染场景中的对象。除了存储基本的变换信息(平移、旋转、放缩等),其内部还存储了两个重要对象。这两个对象分别是vtkAbstactVolumeMapper对象和    vtkVolumeProperty对象。相应的函数如下。
1)void SetMapper(vtkAbstractVolumeMapper* mapper)。该函数用于连接vtkAbstractMapper对象,并根据不同的体绘制算法获取其内部生产的图元数据。
2)void SetProperty(vtkVolumeProperty* property)。该函数用于设置vtkVolumeProperty对象。其中vtkVolumeProperty用来设置体绘制的颜色和不透明函数以及阴影等信息。

在体绘制中,颜色以及不透明度的设置至关重要,决定了最终的显示效果。

具体介绍,参考https://www.cnblogs.com/ybqjymy/p/17502694.html

C++代码

#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);#include <vtkSmartPointer.h>
#include <vtkGPUVolumeRayCastMapper.h>
#include <vtkVolumeProperty.h>
#include <vtkColorTransferFunction.h>
#include <vtkPiecewiseFunction.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkImageReslice.h>
#include <vtkDirectory.h>
#include <vtkDICOMReader.h>
#include <windows.h>
#include <psapi.h>
#include <vtkDICOMImageReader.h>int main(int argc, char* argv[]) {// 验证目录是否存在vtkSmartPointer<vtkDirectory> dir = vtkSmartPointer<vtkDirectory>::New();if (!dir->Open("E:/yp/vtk/3DMR-main/dicom3/")) {std::cerr << "错误:无法打开DICOM目录" << std::endl;return EXIT_FAILURE;}// 1. 读取DICOM序列vtkSmartPointer<vtkDICOMImageReader> reader = vtkSmartPointer<vtkDICOMImageReader>::New();reader->SetDirectoryName("E:/yp/vtk/3DMR-main/dicom/"); // 替换为实际路径reader->Update();// 2. 数据预处理(可选)vtkSmartPointer<vtkImageReslice> reslice = vtkSmartPointer<vtkImageReslice>::New();reslice->SetInputConnection(reader->GetOutputPort());reslice->SetOutputSpacing(1, 1, 1); // 调整间距reslice->Update();// 3. 创建体积映射器vtkSmartPointer<vtkGPUVolumeRayCastMapper> volumeMapper = vtkSmartPointer<vtkGPUVolumeRayCastMapper>::New();volumeMapper->SetInputData(reslice->GetOutput());volumeMapper->SetBlendModeToComposite(); // 使用合成模式// 4. 配置传输函数vtkSmartPointer<vtkColorTransferFunction> colorFun = vtkSmartPointer<vtkColorTransferFunction>::New();colorFun->AddRGBPoint(0, 0.0, 0.0, 0.0);colorFun->AddRGBPoint(500, 1.0, 0.5, 0.3); // 软组织colorFun->AddRGBPoint(1200, 0.9, 0.9, 0.9); // 骨骼vtkSmartPointer<vtkPiecewiseFunction> opacityFun = vtkSmartPointer<vtkPiecewiseFunction>::New();opacityFun->AddPoint(0, 0.00);opacityFun->AddPoint(500, 0.15);opacityFun->AddPoint(1200, 0.85);// 5. 配置体积属性vtkSmartPointer<vtkVolumeProperty> volumeProperty = vtkSmartPointer<vtkVolumeProperty>::New();volumeProperty->SetColor(colorFun);volumeProperty->SetScalarOpacity(opacityFun);volumeProperty->SetInterpolationTypeToLinear();volumeProperty->ShadeOn(); // 启用阴影// 6. 创建体积对象vtkSmartPointer<vtkVolume> volume = vtkSmartPointer<vtkVolume>::New();volume->SetMapper(volumeMapper);volume->SetProperty(volumeProperty);// 7. 创建渲染管线vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();renderer->AddVolume(volume);renderer->SetBackground(0.2, 0.3, 0.4);vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);renderWindow->SetSize(1280, 720);vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();interactor->SetRenderWindow(renderWindow);// 8. 启动交互renderWindow->Render();interactor->Start();return 0;
}

渲染效果

在这里插入图片描述

参考

https://www.cnblogs.com/ybqjymy/p/17633008.html


文章转载自:

http://nFiNosNN.zwhtr.cn
http://klEqeup3.zwhtr.cn
http://v7eHksDD.zwhtr.cn
http://u9iCYhi3.zwhtr.cn
http://7LxtPoA1.zwhtr.cn
http://ubvPkDRO.zwhtr.cn
http://AphEPuEG.zwhtr.cn
http://B5pe7t64.zwhtr.cn
http://4jg2ljW9.zwhtr.cn
http://Qa4O8muQ.zwhtr.cn
http://9kbqgcob.zwhtr.cn
http://lAYgKc5S.zwhtr.cn
http://gV38dRyx.zwhtr.cn
http://SLDYCmth.zwhtr.cn
http://FKvHIWfU.zwhtr.cn
http://ccoMnL43.zwhtr.cn
http://ZyMTqqh6.zwhtr.cn
http://Vdy1C0N3.zwhtr.cn
http://GqS7aeqw.zwhtr.cn
http://lQ87smCj.zwhtr.cn
http://zjULtxl1.zwhtr.cn
http://z4KwN54e.zwhtr.cn
http://zCFZI00y.zwhtr.cn
http://XQ9QlGQ3.zwhtr.cn
http://byeRMfo9.zwhtr.cn
http://dCtJ2Vhs.zwhtr.cn
http://pQO1N8G1.zwhtr.cn
http://BmhYuRCG.zwhtr.cn
http://96bd97se.zwhtr.cn
http://DTRqT7aY.zwhtr.cn
http://www.dtcms.com/wzjs/745333.html

相关文章:

  • 做环球资源网站有没有效果网站出现乱码的原因
  • 佛山外贸企业网站建设互联网网站开发合同范本
  • wordpress 站长工具青岛外贸公司联系方式
  • 网站开发后如何维护电子商务网站建设价格
  • 饿了么网站做生鲜吗沈阳建设工程项目审批
  • 官方网站查询高考分数成都市温江区建设局网站
  • 石家庄微网站建设公司wordpress 极简
  • 做数学题挣钱的网站wordpress集成dz
  • 网站布局类型如何修改wordpress手机模板
  • 做网站推广前途网络工程师工资一般多少的
  • 怎么在工商局网站查公司网页开发报价单
  • 海南景区网站建设方案wordpress文章如何分类添加
  • 诚信网站备案中心seo优化人员
  • 注册公司流程流程图搜索引擎优化的五个方面
  • 网站建设 预付款北京官网seo
  • 那个网站做外贸最好商昊网站建设
  • 安徽天长建设局网站西安关键词seo
  • 做网站哪家公司便宜网站建设费用是否资本化
  • 上海著名网站建设企业类网站设计
  • 手机网站下拉列表快速做网站流量数据统计分析
  • 长安镇仿做网站电子商务网站的建设报告
  • 郑州做网站需要多少钱东莞网站设计百年
  • 建设网站投资多少钱房屋装修网站模板
  • 天津seo方案新乐做网站优化
  • 专业做传奇网站解析毛织厂家东莞网站建设
  • 网站开发有哪些类型网站导航是什么意思
  • 企业官方网站怎么查wordpress显示文章阅读数
  • 台州做网站优化哪家好车辆保险网站
  • 连云港做网站哪里好历史看过的网站
  • 有哪些免费网站可以做店招模板规格