opengl VAO VBO 理解误区修正

误区一:

给 VBO 赋予数据时,即 调用

glBindBuffer(GL_ARRAY_BUFFER,vbo)

glBufferData(GL_ARRAY_BUFFER,sizeof(data),GL_STATIC_DRAW)

这两个函数时,需要事先 通过glBindVertexArray() 绑定到一个 VAO 上。

勘误:

实际上,glBufferData(),把 数组数据 写入 一个 vbo 时,完全没有必要绑定 glBindVertexArray() 一个 VAO.

道理也很简单:我要给一个 vbo 写入数据,其实并不关心 vao是哪个,跟我要写数据这件事完全没有关系!

只有在 把 vbo 的数据,真正传递到 shader 时候,也就是 调用 glVertexAttribPointer() 等针对 shader 的操作时(比如 glUseProgram,glEnableVertexAttribArray )时,才必须明确指定绑定到哪个 VAO 上.

在 glBufferData() 时,只是简答的给一个 vbo 传数据,跟 shader 无关,完全没有必要 bind 任何 VAO.

误区二:

关于 glVertexAttribPointer() 调用时,给 shader 传递数据时的  stride 参数的问题。

比如有这样的数据:

GLfloat vertexData[18] = {

-1,-1,0,//p1 pos

1,0,0,//p1 color red

1,-1,0,//p2 pos

0,1,0,//p2 color green

0,1,0,//p3 pos

0,0,1.//

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值