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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: OpenGL ES 宏观处理流程-适合研究一段之后再看 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循“署名-非商业用途-保持一致”创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。

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




相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
6月前
|
前端开发 API vr&ar
Android开发之OpenGL绘制三维图形的流程
即将连载的系列文章将探索Android上的OpenGL开发,这是一种用于创建3D图形和动画的技术。OpenGL是跨平台的图形库,Android已集成其API。文章以2D绘图为例,解释了OpenGL的3个核心元素:GLSurfaceView(对应View)、GLSurfaceView.Renderer(类似Canvas)和GL10(类似Paint)。通过将这些结合,Android能实现3D图形渲染。文章介绍了Renderer接口的三个方法,分别对应2D绘图的构造、测量布局和绘制过程。示例代码展示了如何在布局中添加GLSurfaceView并注册渲染器。
194 1
Android开发之OpenGL绘制三维图形的流程
|
6月前
|
XML 小程序 Java
【Android App】三维投影OpenGL ES的讲解及着色器实现(附源码和演示 超详细)
【Android App】三维投影OpenGL ES的讲解及着色器实现(附源码和演示 超详细)
123 0
|
存储 编解码 算法
Opengl ES之LUT滤镜(上)
Opengl ES之连载系列
453 0
|
数据安全/隐私保护 开发者
OpenGL ES 多目标渲染(MRT)
Opengl ES连载系列
318 0
|
数据安全/隐私保护 索引
Opengl ES之纹理数组
Opengl ES连载系列
257 0
|
数据安全/隐私保护
Opengl ES之水印贴图
Opengl ES之连载系列
147 0
|
Java 数据安全/隐私保护 Android开发
Opengl ES之矩阵变换(下)
Opengl ES连载系列
129 0
|
Java API 数据安全/隐私保护
Opengl ES之矩阵变换(上)
Opengl ES连载系列
148 0
|
缓存 C++
Opengl ES之FBO
Opengl ES连载系列
150 0
|
存储
Opengl ES之踩坑记
Opengl ES之连载系列
136 0