2013-06-19 31 views
-1

如何绑定两个顶点缓冲区分成不同的插槽(槽0和SLOT1),如何将两个不同的顶点缓冲区绑定到两个插槽

我想在OpenGL(QT)是这样的:

QGLBuffer VB0, VB1; 

VB0.bind(0); 
VB1.bind(1); 

我有这个到目前为止:

verticesBuffer = new QGLBuffer(QGLBuffer::VertexBuffer); 
verticesBuffer->create(); 
verticesBuffer->bind(); 
verticesBuffer->setUsagePattern(QGLBuffer::DynamicDraw); 
verticesBuffer->allocate(vertices.constData(), _ANGLE_CNT * _RANGE_CNT * 6 * sizeof(QVector3D)); 
verticesBuffer->release(); 

colorsBuffer = new QGLBuffer(QGLBuffer::VertexBuffer); 
colorsBuffer->create(); 
colorsBuffer->bind(); 
colorsBuffer->setUsagePattern(QGLBuffer::DynamicDraw); 
colorsBuffer->allocate(_ANGLE_CNT * _RANGE_CNT * 6 * sizeof(float)); 
colorsBuffer->release(); 

你能写一个示例来解释我应该做什么来将这两个缓冲区绑定到插槽?

+1

咦?什么是*“插槽”*?你究竟在做什么?你想从不同的缓冲区获取不同的顶点属性吗?或者您是否想将不同的缓冲区绑定到不同的转换反馈流?还有什么? –

+0

我想从不同的缓冲区获取不同的顶点属性。 我问我的directx观点的问题。 – Sam

+0

@ user159626那么你应该检查而不是OpenGL的实际上是如何工作的,因为它比缓冲区绑定到一个属性*“插槽” *更多地参与。 –

回答

-2

更新: 将此添加到初始化部分:

verticesSize = sizeof(vertices); 
colorsSize = sizeof(colors); 

glGenBuffers(2, vbods);      

glBindBuffer(GL_ARRAY_BUFFER, vbods[VERTEX]); 

glBufferData(GL_ARRAY_BUFFER, 
      sizeof(vertices)+sizeof(colors), 
      vertices, GL_STATIC_DRAW); 

glBufferSubData(GL_ARRAY_BUFFER, sizeof(vertices), sizeof(colors), colors); 

glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_COLOR_ARRAY); 

,这对渲染部分:

glBindBuffer(GL_ARRAY_BUFFER, vbods[VERTEX]); 
glVertexPointer(2, QVector3D, 0, 0); 
glColorPointer(3, GL_FLOAT, 0, (GLvoid *) (ANGLE_COUNT * RANGE_COUNT * 6));  
+0

这只是工作的一半,甚至不是实际指定缓冲区数据作为属性来源的部分。通过一切手段不要使用这些...... ARB的功能,VBO是大约15年以来的核心。真的,获得一个实际的OpenGL学习资源(或看链接*又*,因为他们会告诉你更多,这是最有可能*不*你从评论中的链接,无论这些链接是在哪儿买的是获得从他们当然*不*“有用”)。 –

+0

http://www.songho.ca/opengl/gl_vbo.html – Sam

+0

最后(VBO管理)是'QGLBuffer'已经为你做了什么,更有意思的部分是关于属性位置和顶点格式规范。 –

0

当别人不明白我的问题正是,他们随时它不象给予反对票。我在另一个论坛上提出了同样的问题,我得到了确切的答案。我的帐户被这种愚蠢的投票方式所阻止。所以,在这里我回答我自己的问题:

glGenVertexArrays(1, &VAO_ID); 
glBindVertexArray(VAO_ID); 

glBindBuffer(GL_ARRAY_BUFFER,buffer_0_id); 
glVertexAttribPointer(POSITION_0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0); 
... 


glBindBuffer(GL_ARRAY_BUFFER,buffer_1_id); 
glVertexAttribPointer(POSITION_1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0); 
... 

layout(location = POSITION_0) in vec3 Position0; 
layout(location = POSITION_1) in vec3 Position1; 
+0

如您所知,'slot'是Direct3D特定的名称。我对GL方面有同样的疑问,但无法弄清楚GL应该怎么称呼它。如果你展示了一些DX API,也许他们了解它。 – donggas90

相关问题