[opengl笔记]2017年8月18日
来源:互联网 发布:cydia数据库错误 编辑:程序博客网 时间:2024/06/17 23:51
欢迎访问我的论坛帖:http://hongwgw.com/image/forum.php?mod=viewthread&tid=3&page=1&extra=#pid3
问题:
很多的例子中VBO中数据格式为XnYnZnUnVnRnGnBn.......,代表XYZ, UV and RGB的值。
问题一:能不能传入XYZ数据在一个VBO中,而在另一个VBO中传入UV值,第三个传入Color值?
问题二:能不能在一个VBO中传入500个顶点数据,而在另一个VBO中传入另外的500个顶点数据?
回答一:
答案都是肯定的。
第一个问题:先用glBindBuffer绑定一个合适的缓存区,然后分别调用glVertexAttribPointer。
第二个问题:调用两个draw()
接着问问题二:
对于第一个问题我们做一个test如下:
有一个函数是glEnableClientState,使用的参数看上去是如何使用数据的,比如GL_COLOR_ARRAY和GL_INDEX_ARRAY。它和glColorPointer and glIndexPointer一起调用,我想glIndexPointer更多的是颜色调色板的索引而非顶点索引。我注意到glVertexAttribPointer 是glXXXPointer的成员函数,并且glEnableClientState()可以运用GL_VERTEX_ARRAY。对于glEnableClientState/glXXXPointer以上我说的对吗?如果是这样,那么glVertexAttribPointer的slot是什么意思,在例子中一般都为0?
接下来glDrawXXX如何使用以上我产生的缓冲区呢?
回答二:
Opengl的特性由扩展演变过来。可以参考https://www.khronos.org/registry/OpenGL/index_gl.php,这上面列出了所有的扩展。仔细看看ARB_vertex_buffer_object,描述的与核心说明书中使用类似。
回答三:
让我们回到最初状态,在Opengl1.0中,问题可以通过调用glColor, glNormal, glTexCoord解决。opengl有个“current”概念,这样你使用当前颜色、法线和纹理,并且调用glColor/glNormal/glTexCoord。glVertex会使用当前的数值、使用指定的位置,组成一个复杂的顶点,然后传递到驱动中,在下一阶段的管线中使用。
在很多材料中,你经常可以看到vertex意味着位置。
在固定管线中,每一个顶点属性有着特别的目标,如:colour, normal, texcoord, position, etc.
OpenGL 1.1引进了vertex数组,它用了相同的模型和术语。使用数组而不是单个单个的输入。接下来是glEnableClientState所做的,提供一个告诉opengl从一个数组中获取特性替代直接指定。
接下来定义一些数组:
最后我们建立指向这些数组的指针:
以上是建立单独特性的一种方法,还有一种交叉的方式(interleaving):
以上是非VBO的形式,那么VBO的形式是这样的,初始化数组如下:
然后建立指针去使用这些vbo:
看到如何工作了吗? gl*Pointer调用之前绑定的VBO,可以直接修改VBO,而不需要断开这个联系,因为显示驱动已经知道了改如何使用这些数据。接下来该轮到glEnableVertexAttribArray and glVertexAttribPointer如何插进来了。You'll remember that I mentioned "legacy" or "fixed-function" vertex attributes above?lEnableVertexAttribArray and glVertexAttribPointer提供普遍的顶点属性。从另一方面来讲,顶点属性不再含有固定的意思。你可以在着色器代码中自由解释这些顶点。通常vertex放在0 slot
最后忽视index arrays (and glIndexPointer) 的存在,现在已经没人用它了。
阅读全文
0 0
- [opengl笔记]2017年8月18日
- [opengl笔记]2017年8月17日
- [opengl笔记]2017年08月19日
- PHP&MySQL学习笔记2017年1月18日
- 2017年1月18日 课堂笔记
- bat学习笔记-2017年11月18日
- [hongwgw笔记]2017年8月16日
- 2017年9月8日学习笔记
- 2017年10月8日训练笔记
- 2017年12月8日 Java 笔记
- 8月18日训练笔记
- 2017年10月11日笔记
- 2017年10月12日笔记
- 2017年10月12日笔记
- 2017年10月17日笔记
- 2017年10月26日笔记
- 2017年8月18日 星期五
- Maven精品教程零散笔记(2017年8月25日18:54:33)
- 有趣的数算法
- Phpstorm在控制台中输出运行结果
- 跨越编程语言界限(五)
- 我的hexo博客地址 http://mengqa.top
- Scrapy框架
- [opengl笔记]2017年8月18日
- java学习——java基础(四)之异常
- Java面试个人整理(手打勿喷,易于个人学习)4
- 写优雅代码之聊一聊继承2
- 使用json unmarshal数据到interface{}, 数字变成float64,,golang
- 『R语言初学』Day3
- myeclipse+maven搭建web项目方法一(超级详细)
- DOM事件处理程序
- 使用Python批量修改文件名