zoukankan      html  css  js  c++  java
  • OpenGL 纹理贴图

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

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

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

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

    write by fgd

  • 相关阅读:
    获取本机外网ip和内网ip
    服务器发布MVC常见问题解决方案
    Ext.Net学习笔记01:在ASP.NET WebForm中使用Ext.Net
    Form验证(转)
    各浏览器各版本User-agent汇总 欢迎补充
    MSSQL中把表中的数据导出成Insert
    发布mvc3的项目时system.web.mvc 版本 为3.0.0.1高于服务器版本3.0.0.0 升级到3.0.0.1
    MySQL Packets larger than max_allowed_packet are not allowed
    SQL查看数据库所用用户表数量和使用的空间
    公用提示对话框
  • 原文地址:https://www.cnblogs.com/wendao/p/ogl_texture_learning.html
Copyright © 2011-2022 走看看