OpenGLES 之纹理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenGLES 之纹理相关的知识,希望对你有一定的参考价值。

参考技术A         纹理是一个用来保存图像的颜色元素值的OpenGL ES 缓存。它可以控制一个渲染的三角形中每个像素的颜色。纹理可以使用任何图像,包括树木、云彩、机器、人物。当把纹理应用到几何图形中后,会使渲染的场景更显自然,会使三角形的复杂组合像是真实的物体而不是只有颜色的面。在纹理的缓存中保存的颜色值可能要耗费很多的内存,所以,应该尽量使用最小的图像来产生可以接受的渲染结果。

          当用一个图片初始化一个纹理缓存后,在这个图像中的每个像素变成了纹理中的一个纹素。与像素类似。纹素保存颜色数据。要说区别。就是像素有具体的尺寸大小,而纹素没有,纹素存在于一个没有尺寸的数学坐标系中。

         纹理坐标系中有一个命为 S 和 T 的2D轴(上面画错了,x当成是S,y当成是T)。在一个纹理中无论有多少纹素,纹理的尺寸永远在S轴上是从 0 - 1.0 ,在T 轴上 是从 0 - 1.0.比如:一张图片宽是100像素,高是100像素。那S轴的1.0就表示截取图片的宽是100像素,如果S轴是0.5,则只会截取到图片的宽是50像素,图片只会显示一半。

         每个顶点坐标的X、Y、Z坐标被转换成视口坐标后,GPU会设置转换生成的三角形内的每个像素的颜色。转换几何形状数据为帧缓存中的颜色像素的渲染步骤叫做 点阵化(rasterizing) ,每个颜色像素叫做 片元(franment) 。

          程序需要指定怎么对齐纹理和顶点,以便让GPU知道每个片元的颜色由哪些纹素来决定。这个对齐又叫做映射(mapping)。

         其实每个顶点除了给定的X、Y、Z坐标,每个顶点还给出了U和V的坐标值。U坐标会映射纹理中的S轴,V坐标会映射到T轴。

         GPU会根据每个片元的U、V位置从绑定的纹理中选择纹素。这个过程叫做取样。取样会把纹理的S和T坐标系中与每个渲染的三角形的顶点的U、V坐标匹配起来。例如:一个U、V坐标为0.5,0.5的片元会被当前绑定的纹理中最接近中间位置的纹素着色。

1.定义一个结构体

2.设置上下文,创建绑定顶点缓存区域,分配内存

3.创建绑定顶点索引缓存区域,分配内存

4.设置属性

5.添加纹理

6.绘制

7.最后进行销毁

8.运行结果

在这个demo第二个例子中我们还用到了一个新的函数,这里说一下。

https://github.com/weixin1/OpenGLES-Learn

以上是关于OpenGLES 之纹理的主要内容,如果未能解决你的问题,请参考以下文章

Android OpenGLES2.0——纹理贴图之显示图片

OpenGL ES之实现“大头小头”和“头部晃动”的效果

Opengl ES 1.x NDK实例开发之六:纹理贴图

OpenGL/OpenGLES 中的帧缓冲纹理行为

OpenGL ES 2.0 - 纹理总是黑色

Android音视频 OpenGL ES2.0 绘制图片纹理