关于 opengl3.3 -> 4.1 ABO 的感触. 传统 VBO往 ABO+VBO的 代码移植

来源:互联网 发布:水滴破解wifi软件 编辑:程序博客网 时间:2024/04/28 18:54

最近TS3.0为了支持android.真是叫人难受呀. 由于 es 和 标准opengl 的差异.

就在今年一个 "废话" 降生了.opengl 4.1.

这套函数.和opengl es 2.0 意义上说 API是一样的.

所以就因为这个.决定使用 ABO VBO 的形式来重新写 openglRenderModel.

一开始写真是一波三折呀..不想抱怨遇到什么 弱智问题.只想说说 什么情况 如何 把原来没有shader 或者有shader+VBO的代码.如何平稳的移植到 ABO+VBO上面去.

其实并不是十分的复杂.

1.首先 需要创建 Program.这个Program需要和vs和fs绑起来.

2.之后需要创建一个 ABO.之后bind到程序中.

3.之后就是注册 Program的VBO变量了. 首先需要定义一些 Localion变量.这些变量 会与 一个 "名字相关". 这些 "相关的名字".就是 shader中使用的.

4.当然我们使用ABO之后 shader中就不会出现 gl_vertex这种"全局 shader变量". 一切都要自己动手丰衣足食..最起码需要把 vertex注册到 ABO..要不然我们拿什么渲染呢?

5.还需要一些 矩阵. 投影矩阵当然是不能少的啦.

6.还需要一个 纹理的 Location... 这个东东 设置个0 就好啦..以后就会使用 纹理bind的那个纹理 参与 shader 流程.


实际上使用VBO就是这样的一个东东.如果纯用opengl 4.1的 函数来弄..一切都变的非常容易控制. 当然一切都要自己写.矩阵没学好.解析几何不行.的同学就比较麻烦了..就拿投影矩阵来说..我们需要很多.例如 位置的变换. 投影矩阵的变换. 当然 矩阵这个 神奇的东东. 是可以用乘法来解决 复合操作...就看您的心情是把 这个计算放到 shader里还是放到 程序里了.


之前的VBO写法.

genbuffer之后 就可以enable 然后设置 pointer就可以画了.

ABO+VBO也差不多. enable和pointer都换了个样子..

首先. 我们是要先 把 顶点数据 注册一个名字的.

而传统的 则不需要.因为有已经定义好的 gl_vertex.

这就是区别.


关于移植:

知道区别了.移植就很好办了.. 重点就是把 顶点数据 通过 program注册到 ABO. 其他的例如UV也是一个道理.

之后需要自己把什么 投影矩阵算出来一个 float matiex[16] 扔到一个 uniform里面.之后用 vetex乘一下就好啦.

纹理那边.需要一个uniform来表示一个 bind的纹理.之后就可以在fs上面写了.

其他的就没什么好说的了.


没明白的可以找我私聊.哈哈.






原创粉丝点击