【问题标题】:OpenGL VBO, VAO, Cubes, and ColorsOpenGL VBO、VAO、立方体和颜色
【发布时间】:2013-01-17 19:49:15
【问题描述】:

我目前正在尝试了解 VBO,但遇到了一些问题。

我正在使用具有位置、颜色和法线的交错数组。但是,当我去绘图时,显示只是白色。

这是我的数组的结构:

GLfloat position[3];
GLfloat normal[3];
GLfloat color[4];

代码如下:

初始化:

glGenBuffers(1, &arrays[0]);
glBindBuffer(GL_ARRAY_BUFFER, arrays[0]);

glBufferData(GL_ARRAY_BUFFER, 125*10*36*sizeof(GLfloat), vertices, GL_STATIC_DRAW);

glBindBuffer(GL_ARRAY_BUFFER, 0);

glGenVertexArrays(1, &vaoID[1]);
glBindVertexArray(vaoID[1]);

glBindBuffer(GL_ARRAY_BUFFER, vaoID[1]);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 40, ((void*)0));
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 40, ((void*)12));
glVertexAttribPointer(2, 4, GL_UNSIGNED_BYTE, GL_TRUE, 40, ((void*)24));
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glEnableVertexAttribArray(2);

glBindVertexArray(0);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(2);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

绘图:

glPushMatrix();
glBindVertexArray(vaoID[1]);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 125*36);
glPopMatrix();

我正在制作一个 5x5 的立方体,它的颜色光谱从黑色到白色。然而,在抽奖时,这就是我得到的全部:

【问题讨论】:

  • 你没有显示着色器。此外,glPush/PopMatrix 已被弃用。
  • 你能详细说明着色器吗?我目前正在做: glEnable(GL_DEPTH_TEST); glDepthMask(GL_TRUE); glEnable(GL_CULL_FACE); glShadeModel(GL_SMOOTH);它正在立即模式下为立方体着色。
  • 好吧,你没有发布你的着色器代码。你在用吗?
  • 如您所见,这些是一般的顶点属性。我相信对颜色有某种默认绑定,但我相信它取决于驱动程序。编写简单的顶点和片段着色器会更容易。 arcsynthesis.org/gltut
  • 好了,现在将顶点颜色属性从顶点着色器推送到片段着色器。

标签: opengl colors cube vbo


【解决方案1】:

我发现您在上面发布的内容存在问题。您已将颜色定义为结构中的浮点数,但您告诉glVertexAttribPointer() 您的颜色是无符号字节。应该是这样的:

glVertexAttribPointer(2, 4, GL_FLOAT, GL_TRUE, 40, ((void*)24));

这假设您实际上是将浮点数放入这些内存位置。你是如何设置它们的?

【讨论】:

  • 我将它从 GL_UNSIGNED_BYTE 更改为 GL_FLOAT,但我仍然只得到一个白色立方体。有什么想法吗?
  • @user1118321 如果没有着色器,他怎么可能获得颜色属性的属性索引?我不认为这是在 OpenGL 中的任何地方定义的
  • @fscan 你可能是对的 - 我在考虑即时模式下的旧版 OpenGL。我已经从我的回复中删除了该行。不过,我相信其余的回复是有效的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
  • 2017-11-20
相关资源
最近更新 更多