2013-06-19 3 views
-1

как связать два вершинных буферов в разные слоты (Slot0 и 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, так как он гораздо более активен, чем привязка буфера к атрибуту * «slot» *. –

ответ

-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», VBOs являются ядром с 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

Как вы знаете, «слот» - это конкретное имя Direct3D. У меня было такое же удивление относительно стороны GL, но я не могу понять, что я должен назвать ее в стиле GL. Если вы показали некоторый DX API, возможно, они поняли об этом. – donggas90

Смежные вопросы