OpenGL 中的 3D 纹理采样

3D texture sampling in OpenGL

我目前正在尝试使用类似 glTexImage3D 的方法学习 3D 纹理上的光线投射。我从一开始就关注 this tutorial。我的最终目标是制作一个可以像这样工作的程序:

我的理解是,这是使用光线投射方法渲染的,模型是作为 3d 纹理导入的。光线投射和纹理采样任务在片段着色器中执行。我希望我可以复制这个程序作为练习。你能回答我的问题吗?

  1. 应该使用什么文件格式导入 3D 纹理?
  2. 我应该使用哪些 glsl 函数来检测光线和纹理之间的距离?
  3. 3D纹理采样和体绘制有什么区别?
  4. 有没有可供我学习的在线教程?
  5. 如何制作自己的 3D 纹理? (可以用搅拌机做一个吗?)

1. What file format should be used to import the 3D texture?

没关系,OpenGL 不处理文件格式。

2. Which glsl functions should I use in detecting the distance between my ray and the texture?

没有"ready do use"光线投射功能。你必须自己实现一个 raycaster。 IE。在起点和终点之间沿一条线(射线)对纹理进行采样,并将样本积分到最终颜色值。

3. What are the differences of 3D texture sampling and volume rendering?

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

4. Are there any available online tutorials for me to follow?

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

5. How can I produce my own 3D texture? (Is it possible to make one using blender?)

您当然可以使用 Blender,例如通过烘焙雾密度等体积数据。但整个主题过于宽泛,无法在此处充分涵盖。