OpenGL ES 宏观处理流程-适合研究一段之后再看
2013-12-06 10:00
274 查看
OpenGL ES 宏观处理流程-适合研究一段之后再看
太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)
本文遵循“署名-非商业用途-保持一致”创作公用协议
转载请保留此句:太阳火神的美丽人生 - 本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
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中多个几何体的解析,解析出来如何存储,后续研究完,再整理出来。
有时,脑袋里面想的东西,并不一定真的知道或了解,当说出来时,可能要清晰些,但真正要写出来,才表示逻辑已经挼顺,这确实是个好的解决问题的方式。
参考资料:
罗朝辉的 OpenGL ES 2.0 iOS教程 :http://blog.csdn.net/column/details/opengl-es2-ios.html
太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)
本文遵循“署名-非商业用途-保持一致”创作公用协议
转载请保留此句:太阳火神的美丽人生 - 本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
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
相关文章推荐
- kfs代码研究(五、chunk server处理流程)
- netty源码深入研究(从客户端入手)第二篇(详解读消息的管道处理流程)
- kfs代码研究(二、meta server处理流程)
- Android 输入管理服务-输入事件到达之后的处理流程
- Android 输入管理服务-输入事件到达之后的处理流程
- netty源码深入研究(从客户端入手)第三篇(详解写消息的管道处理流程)
- HAProxy 研究笔记 -- TCP 连接处理流程
- kfs代码研究(二、meta server处理流程)
- HAProxy 研究笔记 -- TCP 连接处理流程
- JavaScript事件在WebKit中的处理流程研究
- kfs代码研究(五、chunk server处理流程)
- JavaScript事件在WebKit中的处理流程研究
- 假设有一个字符串aabcad,请写一段程序,去掉字符串中不相邻的重复字符串,即上述字符串处理之后的输出结果为:aabcd
- 机房收费系统可行性研究----处理流程和数据流程
- springmvc(1)----框架处理流程
- 对django框架架构和request/response处理流程的分析
- 套接字的内核实现原理以及对数据的处理流程简述
- 用户研究基础流程和 SPSS 快速数据处理
- ldp hello报文接收的处理流程
- Spring MVC请求处理流程