OpenGL 纹理贴图

  纹理贴图允许把一幅砖墙图像映射到一个多边形的表面上,并把正面墙画成单个多边形。纹理贴图能够保证当这个多边形变形或渲染时,映射到多边形表面的图像也能够表现出正确的行为。
  纹理贴图是一个相当大的主题,并且具有相当程度的复杂性。在使用纹理贴图时,必须做出一些编程选择。初学者很可能会本能地把纹理理解成二维图像,但是纹理也可以是一维的,甚至是三维的。可以把纹理映射到一组多边形构成的表面上,也可以把它贴到曲面上,还可以在一个、二个或三个方向上(取决于纹理的纬度)重复应用同一个纹理来覆盖整个表面。另外,可以把纹理图像自动映射到物体上,用它表示被观察物体的轮廓线或者其他属性。有光泽的物体也可以进行纹理贴图,当它们位于房间或其他环境的中央时,它们的表面就可以反射周围的物体。最后,纹理也可以按不同的方式应用到物体的表面。它可以直接画到物体的表面(就像表面上的贴花一样),调整表面的颜色。或者,把纹理颜色与表面颜色进行混合。
  简单地说,纹理就是矩形的数据数组。例如,颜色数据、亮度数据、颜色和alpha数据。纹理数组中的单个值常常称为纹理单元(texel)。纹理贴图之所以复杂,是因为矩形的纹理可以映射到非矩形的区域,并且必须以合理的方式实现。
  如果多个纹理单元对应于一个片段,这些纹理单元就会在求得均值后再应用到这个片段上。如果纹理单元的边界位于片断的边界上,OpenGL就会对所有相关的纹理单元求加权平均值。由于存在这些计算,纹理贴图从计算的角度而言是比较昂贵的,这也是为什么有这么多的专用图像系统(包括硬件)对纹理贴图提供支持的原因。 

  想提出个问题,纹理看着和位图或图像很像,那他们的有什么不同?
  一般情况下,纹理是从图像文件读取的,这是因为如果直接在程序中指定纹理,可能需要几百行的额外代码。 

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

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

write by fgd

原文地址:https://www.cnblogs.com/wendao/p/ogl_texture_learning.html