【发布时间】:2016-04-30 00:38:09
【问题描述】:
我知道这是一个非常基本的问题,但我有顶点数组和纹理坐标以及相应的缓冲区:
glBindBuffer(GL_ARRAY_BUFFER,vertexbuffer);
glBufferData(GL_ARRAY_BUFFER,sizeof(float)*Loader.verticesFixed.size(),&Loader.verticesFixed[0],GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER,texturebuffer);
glBufferData(GL_ARRAY_BUFFER,sizeof(float)*Loader.texturesFixed.size(),&Loader.texturesFixed[0],GL_STATIC_DRAW);
我想知道如何发送数据进行渲染。
我知道我可以合并顶点和纹理数组,这样我就有一个数组,它有 x1,y1,z1,u1,v1,x2,y2,z2,u2,v2... 然后为这个数组创建缓冲区,绑定它并使用具有特定步幅和偏移量的 glVertexAttribPointer 以及属性 0 和 1 用于顶点和纹理坐标以及 glDrawArrays。但是我想知道是否可以在不合并数组的情况下从多个缓冲区发送数据。
我之所以问这个问题是因为我想将纹理添加到 3d 模型,如果我正确理解所有内容以有效地执行此操作,我需要使用具有不同索引(位置)的 glVertexAttribPointer 以及统一纹理将数据发送到着色器。
【问题讨论】:
-
您是在问如何将两个非交错数据数组上传到交错数据的 OpenGL 缓冲区中?您必须自己进行交错,或者在您自己的缓冲区上使用
glBufferData或通过glMapBuffer'ing GL 缓冲区。 -
"我需要使用具有不同索引(位置)和统一纹理的 glVertexAttribPointer 将数据发送到着色器。" “不同索引”是什么意思?您的意思是对位置使用索引列表,对纹理坐标使用单独的索引列表吗?
标签: opengl