首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有交错法线的VertexBufferObject

具有交错法线的VertexBufferObject
EN

Stack Overflow用户
提问于 2013-04-17 05:14:51
回答 1查看 147关注 0票数 0

我有一个可用的Vertex-Buffer-Object,但我需要添加法线。normales存储在与顶点位置相同的数组中。它们是交错的

代码语言:javascript
复制
Vx Vy Vz Nx Ny Nz

这是我到目前为止的代码:

GLfloat valuesNUM_POINTS*3 + NUM_POINTS*3;GLfloat initScene() {

代码语言:javascript
复制
for(int i = 0; i < (NUM_POINTS) ; i = i+6){
    values[i+0] = bunny[i];
    values[i+1] = bunny[i+1];
    values[i+2] = bunny[i+2];
    values[i+3] = normals[i];
    values[i+4] = normals[i+1];
    values[i+5] = normals[i+2];
}

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


glGenBuffers(1, &bunnyVBO);
glBindBuffer(GL_ARRAY_BUFFER, bunnyVBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(bunny), bunny, GL_STATIC_DRAW);

glVertexAttribPointer(0,3, GL_FLOAT, GL_FALSE, 0,0);
glEnableVertexAttribArray(0);

glGenBuffers(1, &bunnyIBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bunnyIBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(triangles), triangles, GL_STATIC_DRAW);



// unbind active buffers //
  glBindVertexArray(0);
  glBindBuffer(GL_ARRAY_BUFFER, 0);
  glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}

void renderScene() {
  if (bunnyVBO != 0) {
    // x: bind VAO //
      glEnableClientState(GL_VERTEX_ARRAY);
      glBindVertexArray(bunnyVAO);
      glDrawElements(GL_TRIANGLES, NUM_TRIANGLES, GL_UNSIGNED_INT, NULL);
      glDisableClientState(GL_VERTEX_ARRAY);
    // unbind active buffers //
    glBindVertexArray(0);
  }
}

我可以在屏幕上看到一些东西,但它不正确,因为法线没有正确使用…到目前为止,我如何正确地使用与代码连接的值数组。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-17 06:29:15

需要调用glVertexAttribPointer两次,一次用于顶点,一次用于法线。这就是如何告诉OpenGL数据是如何在顶点缓冲区中布局的。

代码语言:javascript
复制
// Vertices consist of 3 floats, occurring every 24 bytes (6 floats), 
// starting at byte 0.
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 24, 0);

// Normals consist of 3 floats, occurring every 24 bytes starting at byte 12.
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 24, 12);

这是假设着色器中的法线属性的索引为1。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16047232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档