OpenGL纹理贴图的相关知识

来源:互联网 发布:mac连接电视没反应 编辑:程序博客网 时间:2024/04/30 00:06

纹理映射,是将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。

纹理贴图的步骤
  1.创建纹理对象,并为它指定一个纹理。
  2.确定纹理如何应用到每个像素上。
  3.启用纹理贴图功能。
  4.绘制场景,提供纹理坐标和几何图形坐标。
  纹理坐标必须在RGBA模式下才能使用。在颜色索引模式下使用纹理贴图的结果是难以预料的。 

  重要概念:分配纹理坐标
  当我们绘制进行了纹理贴图的场景时,必须为每个顶点提供物体坐标和纹理坐标。经过变换后,物体坐标决定了应该在屏幕上的哪个地点渲染每个特定的顶点。纹理坐标决定了纹理图像中的哪个纹理单元将分配给这个顶点。

映射纹理到几何图元

要把纹理映射到几何图元中,我们需要告诉OpenGL如何映射这些纹理。纹理元素不是根据内存中的位置来放置的(与像素不同)。纹理用更抽象的纹理坐标来确定纹理元素放置的位置。纹理坐标包含s、t、r和q坐标轴类似于顶点坐标的x、y、z和w,以此来支持1维到3维的纹理。q用来缩放纹理坐标,即纹理坐标归一化后的坐标值为s/q、t/q、r/q,默认为1.0。纹理坐标值为浮点数,范围为[0.0,1.0]。下图解释纹理坐标如何放置纹理元素的:

image

我们可以通过glTexCoord函数来设置纹理坐标,这类似于设置顶点坐标。下面是3个常用的glTexCoord变型:

void glTexCoord1f(GLfloat s);

void glTexCoord2f(GLfloat s, GLfloat t);

void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r);

注意纹理坐标像表面法线,和颜色值一样要在设置顶点之前进行设置。用上面的这些函数为每个顶点设置纹理坐标。然后OpenGL会根据需要对纹理进行缩放后映射到几何图元中(其中应用到纹理过滤,后面再解释)。下图是把2维的纹理映射到一个四方形GL_QUADE图元中,注意纹理的四个角与四方形的四个角是一一对应的。

image

当然我们还可以把一个四方形的纹理图映射到一个三角形的几何图元中:

image

纹理矩阵

纹理坐标也可以通过纹理矩阵来进行变换。纹理矩阵的工作方式与投影矩阵,模型视图矩阵类似。通过glMatrixMode(GL_TEXTURE):来开启纹理矩阵模式,在此函数调用后面的矩阵变换将被应用于纹理坐标。纹理坐标可以进行移动、缩放、旋转。纹理矩阵的栈最多只能容纳两个纹理矩阵。通过glPushMatrix 和glPopMatrix来进行栈操作



0 0
原创粉丝点击