| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> 学习笔记14 -> 正文阅读 |
|
[游戏开发]学习笔记14 |
一.体绘制 尤其要注意:所谓面数据,并不是说二维平面数据,而是说这个数据中只有表面细节,没有包含体细节,实际上体数据和面数据的本质区别,在于是否包含了体细节,而不是在维度方面。 (举例而言,你面前有一间房子,房子中有家具、家电,站在房子外面只能看到外部形状,无法观察到房子的布局或者房子中的物体;假设房子和房子中的物体都是半透明的,这样你就可以同时查看到所有的细节。这就是体绘制所要达到的效果。) 1.体绘制以物体对光的吸收原理为理论基础。【光线吸收、反射模型】 在实现方式上基于透明度合成计算模型:在同一射线方向上对体数据进行采样,获取多个体素的颜色值,然后根据其透明度进行颜色的合成。(颜色、透明度、梯度) 2.体数据相关专业术语有:体素(Voxel )、体纹理(Volume Texture =3D Texture)。 【体素】 ?由最邻近的两层图像的各4个角点所构成的立方体区域,相当于二维平面的像素的概念,图中每个小方块代表一个体素。 ?不存在绝对空间位置的概念,只有在体空间中的相对位置。 【体纹理】 按照一定规则将三维数据存放在 XY 像素平面所得到的纹理,称之为 volume texture 。 ?体数据最主要的文件存储格式,按照一定规则将三维数据存放在XY像素平面所得到的纹理,称之为volume texture。 ?体数据通常是由CT 仪器进行扫描得到的,然后保存在图片的像素点上。目前国际上比较常用的体纹理格式有,基于DirectX的.dds格式和.raw格式。注意这里用于体纹理的.raw格式存放的是三维数据,而用于摄像器材的.raw格式只是普通的二维图片。 ※体纹理并不是空间的模型数据,他只是描述了三维的数据(类似于编程时候用一维数组存储二维数组、三维数组的思想)。 ※空间体模型(通常是规则的立方体或圆柱体)和体纹理相互结合才能进行体渲染。比如二维的纹理贴图效果。也就是说,我们想要看到体纹理数据,在体绘制中需要一个三维模型作为体纹理的载体,体纹理通过纹理坐标(三维)和模型进行对应,然后由视点向模型上的点引射线,该射线穿越模型空间等价于射线穿越了体纹理。通常使用普通的立方体或者圆柱体作为体绘制的空间模型。 3.?主要算法: ①物体空间方法(对象顺序绘制) 【从体数据的每个体素出发】计算体数据内部每个体素重建后对屏幕像素的贡献值,最终获得绘制效果。如,抛雪球算法(Splatting)从每个体素对屏幕抛一个雪球,形成一个雪斑块,能量从中心向外扩散并减弱(高斯函数) ②图像空间方法(图像顺序绘制) 【从屏幕的每个像素出发】计算输出图像上每个像素所投射出的光线的累积,获得绘制效果。如,光线投射算法 (Ray-casting)从视点出发,穿过每个屏幕像素形成的透视投影? Others: 错切-变形算法(Shear-warp) 频域体绘制算法(Frequency Domain) 4.?VTK使用Ray-Cast进行体绘制 原理:从屏幕上每一个像素点出发,沿着视线方向发射出一条光线,当这条光线穿过体数据时,沿着光线方向等距离采样,利用插值计算出采样点的颜色值和不透明度;接着按照从前到后或从后到前的顺序对光线上的采样点进行合成,计算出这条光线对应的屏幕上像素点的颜色值。 光线投射是目前应用最为广泛的体绘制方法。然而当观察方向发生变化时,采样点的前后关系也必然变化,因此需要重新进行采样,计算量极为庞大。针对算法所存在的问题,人们提出了不少优化方法,如光线提前终止、利用空间数据结构来跳过无用的体素,如八叉树、金字塔、k-d树等。
5.?【关于ImageData的一些tips】vtk集成的reader在读取三维数据的时候,其实就是在填充vtkImagedata的过程。本质上,三维重建是对vtkImagedata的重建,无论什么格式的图像(除了几何图形)读取进来以后都会变成vtkImagedata类 6.颜色映射:https://blog.csdn.net/shenziheng1/article/details/54915682 色调(H),饱和度(S),明度(V) 透明度映射:https://blog.csdn.net/shenziheng1/article/details/54914495 多元数据的组分可能是非独立的,例如,RGB图像中每个像素的颜色值是由R.G.B三个颜色组分共同定义的。vtkVolumeMapper支持两种类型的非独立多元数据。 第一种是二元数据。第一元数据用于定义颜色传输函数,第二元数据用于定义不透明度传输函数; 第二种是四元数据。前三元数据作为一个R.G.B颜色定义颜色传输函数,第四元数据用于定义不同明度传输函数。 需要注意的是,两种方式都是利用最后一元数据来计算梯度,并决定梯度不透明度传输函数。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/28 3:39:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |