OpenGLES入门(四)
2019-07-07 本文已影响12人
言叶之庭_
在上一章中,我们使用顶点坐标和顶点颜色,实现了一个简单的3D图形。
在本章中,将会使用图片纹理来继续实现这个图形,并使其沿着X、Y、Z三个轴进行旋转。
在引入代码之前,先介绍一个我们在前面一直使用的纹理。
什么是纹理(Textures)?
纹理是一个用来保存图像的颜色元素值的OpenGL ES缓存。
之前我们绘制了一个简单的3D图形,使用了5个顶点,分别给顶点设置了相应的颜色。但是在实际生活中,一个复杂的图形远不止5个顶点,如果此时在去给每个顶点单独设置颜色,这是不合理也不现实的。使用纹理,我们就可用通过从纹理中采样获得的纹理颜色赋值给顶点,展现更多细节,更加真实的图像。
纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节;你可以想象纹理是一张绘有砖块的纸,无缝折叠贴合到你的3D的房子上,这样你的房子看起来就像有砖墙外表了。因为我们可以在一张图片上插入非常多的细节,这样就可以让物体非常精细而不用指定额外的顶点。
在上图中,我们可以获得了纹理的所有细节。为了把纹理信息映射到顶点中,我们需要一个之前已经提到过的非常重要的坐标系:纹理坐标系。
可以看到,纹理坐标系的原点在图像的左下角,与顶点坐标系不同。只需要将每一个顶点对应到纹理坐标(Texture Coordinate),为顶点添加纹理颜色,之后再对其它片段上进行片段插值(Fragment Interpolation)。就可以得到一个真实的图形了。
一般复杂的图形顶点坐标都是通过模型导出来的,我们只需要给其赋予相应的纹理,就能得到真实的图形。
本章的代码与上一章并没有太多不同,主要就是引用了图片的纹理。下面就是引入纹理的部分:
通过本章对纹理和顶点的结合,实现了一个带有贴图的简单3D图形,在接下来的内容中,将继续结合纹理实现更加复杂的图形,这里是代码。