http://www.helmsmansoft.com/index.php/archives/1536
继续哈,从前面的几篇文章里,可以在三维空间里绘制出一个z轴为0的平面图形,这样绘制出来的东西看起来没什么意思,所以本课来介绍下“纹理映射”,这是一个将图像(纹理)应用到原始图像或图形的过程。它的基本概念:对每个定义多边形中的一个顶点,还得提供一个顶点来定义纹理中的一个点。然后将此信息提供给OpenGL ES ,OpenGL ES执行一系列复杂的工作以使纹理和多边形匹配,并在多边形内将纹理渲染出来。
纹理坐标:用于在纹理内部确定位置。范围为0到1.
本课继续使用前面课程所建立的模板,如果您还没有下载此模板,可以在本站查看前几篇文章并下载模板。
言归正传,继续我们的课程风格,用代码说事,在RenderView.h里添加属性
在RenderView.m文件里添加如下代码:
render方法修改如下:
render内的注释为new的是新添加的代码。
下面来具体解释下上面所用到的方法:
上面很多都加了详细的注释,这里说下关于OpenGL ES纹理映射的一些相关内容:
图像大小:在OpenGL ES中所有纹理大小必须为2的幂,也就是说,图像的高度和宽度应该等于以下的值之一
2 4 8 16 32 64 128 256 512 1024
高度和宽度不必相同。PS:iPhone3G,iPhone 4和iPad都支持2048*2048的纹理尺寸
如果需要的图片不是以上的大小,需要使用程序进行处理,使其符合以上尺寸。
glTexImage2D这个方法的几个参数:
第一个参数:目标纹理,必须为GL_TEXTURE_2D
第二个参数:细节程度。0是基本图像水平。 n级为mipma中的第n个缩小的图像。必须大于等于0.
第三个参数:纹理中的颜色组件,必须和之后的颜色参数相同。
第四个参数:纹理图像的宽度
第五个参数:纹理图像的高度
第六个参数:边框的宽度,必须为0
第七个参数:像素数据的格式
第八个参数:像素数据中使用的数据类型
第九个参数:内存中指向图像数据的指针
此命令发出后,imageData实力变量中的图像数据将被加载到OpenGL ES并与当前绑定的纹理关联。
到此运行程序,界面效果如下: