OpenGL ES 宏观处理流程-适合研究一段之后再看
太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)
本文遵循“署名-非商业用途-保持一致”创作公用协议
1、构建顶点缓存:包括几何顶点坐标、纹理坐标、法线坐标
a、传给OpenGL ES API的是一组顶点属性,这组属性中包括以上三种数据;
b、3dmax导出的obj文件中的法线坐标,并不像其它文章所说的,是面法线,需要转换成顶点法线,直接使用即可;(也或许是blender导出的是面法线吧,至少这块纠结过很久了)
c、顶点属性中的三类数据,其中纹理坐标可能是uvw也可能是uv,所以使用时也有不同;
d、三类数据的组织结构顺序也要和后续使用中对应;
2、以下代码是顶点属性的使用
a、先将vbo顶点缓存绑定到当前处理缓存中,顶点缓存是在GPU中开辟的,绑定也就是把这个GPU中的缓存位置告诉一下当前在处理的渲染管线而已;
b、告诉渲染管线,这些数据中都包括哪些类型数据,因为只有几何点坐标是必选的,所以得告诉它具体的开始字节数和一个顶点跨的字节数;
c、一个几何体的所有顶点,在上面绑定完后,下面就可以接着使用这些顶点的索引来构建三角形了,告诉渲染管线组成几何体的所有三角形使用的顶点缓存中的索引;
3、万事俱备,只欠东风,这时侯可以告诉GPU,抓紧把上面的几何体给俺画出来,放到桢缓存中;
4、以上的步骤是可以重复的,最终不同的几何体是画到同一个桢缓存中,还是多个,俺就不知道了,因为有最后一句代码引出的下面的描述:
5、通过上下文的功能调用,把所有桢缓存中的内容画到界面上,这部分属于EGL部分,不属于GLES部分,具体实现也不同,俺暂时还不了解。还没完,这些需要理解和领悟,重要的麻烦事儿,还在于obj的解析,多个obj的解析,一个obj中多个几何体的解析,解析出来如何存储,后续研究完,再整理出来。
有时,脑袋里面想的东西,并不一定真的知道或了解,当说出来时,可能要清晰些,但真正要写出来,才表示逻辑已经挼顺,这确实是个好的解决问题的方式。
// 绑定顶点缓存,并指定顶点坐标、法线坐标和纹理坐标三者组成的顶点的字节数,以及每个顶点在该缓存起点开始的指针偏移量 glBindBuffer(GL_ARRAY_BUFFER, [_vboArray[0] vertexBuffer]); // 指示读取各段数据的位置 glVertexAttribPointer(_positionSlot, 3, GL_FLOAT, GL_FALSE, stride, 0); glVertexAttribPointer(_textureCoordSlot, 3, GL_FLOAT, GL_FALSE, stride, texCoordOffset); glVertexAttribPointer(_normalSlot, 3, GL_FLOAT, GL_FALSE, stride, normalOffset); // Draw the triangles. // glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, [_vboArray[0] triangleIndexBuffer]); // 指示GPU使用以上的三维信息绘制出二维图形到帧缓存中 glDrawElements(GL_TRIANGLES, [_vboArray[0] triangleIndexCount], GL_UNSIGNED_SHORT, 0);
// 将帧缓存中内容绘制到视图中 [_context presentRenderbuffer:GL_RENDERBUFFER];
参考资料:
罗朝辉的 OpenGL ES 2.0 iOS教程 :http://blog.csdn.net/column/details/opengl-es2-ios.html