2017-06-03 175 views
-2

我目前正在尝试使用类似glTexImage3D的东西来学习3D纹理上的光线投射。我从一开始就关注着this tutorial。我的最终目标是产生一个程序,能像这样工作:OpenGL中的3D纹理采样

This one

我的理解是,这是使用光线投影法绘制,模型导入为3D纹理。光线投射和纹理采样任务在片段着色器中执行。我希望我能复制这个计划作为一种实践。你能否回答我的问题?

  1. 应该使用什么文件格式导入3D纹理?
  2. 我应该使用哪种glsl函数来检测我的光线和纹理之间的距离?
  3. 3D纹理采样和体积渲染有什么区别?
  4. 有没有可供我使用的在线教程?
  5. 如何生成我自己的3D纹理? (是否可以使用搅拌器制作一个?)

回答

1

1.什么文件格式应该用于导入3D纹理?

无所谓,OpenGL不处理文件格式。

2.我应该使用哪些glsl函数来检测我的光线和纹理之间的距离?

没有“准备好使用”光线投射功能。你必须自己实施一个raycaster。即在开始点和结束点之间沿线(光线)对纹理进行采样,并将样本集成到最终的颜色值。

3. 3D纹理采样和体积渲染有什么区别?

对3D纹理进行采样与采样2D,1D,立方体贴图或其他任何纹理拓扑没有多大区别。对于给定的矢量A,某个矢量B被修正,即与A指向的位置(最近的样本)最接近的样本值或内插值。

4.是否有任何可用的在线教程供我使用?

http://www.real-time-volume-graphics.org/?page_id=28

5.我怎么能生产出自己的3D纹理? (是否可以使用搅拌器制作一个?)

您当然可以使用Blender,通过烘烤雾密度等体积数据。但是整个主题太宽泛了,没有足够的覆盖。

+0

谢谢!对于问题1,数据的格式是什么?是否有可能将一个obj文件转换为这种格式? – FunnyFunkyBuggy

+0

@FunnyFunkyBuggy:它基本上是一个3D图像。把它想象成一堆由切片组成的二维图像。将“网格”或几何体“转换”为体积数据当然可能是通过将几何体实际渲染为体积图像。但是这带有它自己的问题,比如你如何定义什么是“内部”。您的典型网格由无限薄的三角形组成,如果网格不是水密的,或者不可定向,则无法“填充”音量。但是如果你问*那个问题,你似乎有一个XY问题。 – datenwolf