OpenGL ES 宏观处理流程-适合研究一段之后再看

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中多个几何体的解析,解析出来如何存储,后续研究完,再整理出来。


有时,脑袋里面想的东西,并不一定真的知道或了解,当说出来时,可能要清晰些,但真正要写出来,才表示逻辑已经挼顺,这确实是个好的解决问题的方式。

    // 绑定顶点缓存,并指定顶点坐标、法线坐标和纹理坐标三者组成的顶点的字节数,以及每个顶点在该缓存起点开始的指针偏移量
    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




你可能感兴趣的:(OpenGL ES 宏观处理流程-适合研究一段之后再看)