现在的位置: 首页 > 综合 > 正文

OpenGL 三维纹理

2013年10月11日 ⁄ 综合 ⁄ 共 625字 ⁄ 字号 评论关闭

一直对OpenGL三维纹理的纹理坐标(s,t,r,q)不是很理解得清楚。今天查了一下资料,算是有点眉目。


首先,其中的q是一个缩放因子,相当于顶点坐标中的w。实际应用在纹理读取中的坐标应该是s/q,t/q,r/q。默认情况下,q是1.0。通常情况下貌似没什么用,但是在一些产生纹理坐标的高级算法比如阴影贴图中,比较有用。


另外一个问题就是s、t、r三个坐标的方向问题,他们分别究竟代表哪个方向上的坐标呢?在做光线投射体绘制的时候,先将CT图像序列逐个读入,然后用函数glTexImage3D指定三维纹理的时候,对于width、height、depth分别所指的三个方向十分模糊。看图一。

                                                          

图一 通过三维纹理坐标访问体数据

可以看出,s、t、r分别相当于普通坐标系中的x、y、z三个方向。分别对应glTexImage3D中的参数width、height、depth。

void glTexImage3D( GLenum   target,

GLint   level,

GLint   internalFormat,

GLsizei   width,

GLsizei   height,

GLsizei   depth,

GLint   border,

GLenum   format,

GLenum   type,

const GLvoid *   data);


这样在指定三维纹理数据的时候,对于体数据在GPU memory中的排列以及今后的存取就有比较明确的认识了。

抱歉!评论已关闭.