我在OpenGL中绘制了一个立方体,但我希望立方体的每个面都填充一种颜色。
这就是我所做的,我不知道为什么只有两张脸上充满了颜色。
void DrawCube(GLfloat centerPosX, GLfloat centerPosY, GLfloat centerPosZ, GLfloat edgeLength)
{
GLfloat halfSideLength = edgeLength * 0.5f;
GLfloat vertices[] =
{
// front face
centerPosX - halfSideLength, centerPosY + halfSideLength, centerPosZ + halfSideLength, // top left
centerPosX + halfSideLength, centerPosY + halfSideLength, centerPosZ + halfSideLength, // top right
centerPosX + halfSideLength, centerPosY - halfSideLength, centerPosZ + halfSideLength, // bottom right
centerPosX - halfSideLength, centerPosY - halfSideLength, centerPosZ + halfSideLength, // bottom left
// back face
centerPosX - halfSideLength, centerPosY + halfSideLength, centerPosZ - halfSideLength, // top left
centerPosX + halfSideLength, centerPosY + halfSideLength, centerPosZ - halfSideLength, // top right
centerPosX + halfSideLength, centerPosY - halfSideLength, centerPosZ - halfSideLength, // bottom right
centerPosX - halfSideLength, centerPosY - halfSideLength, centerPosZ - halfSideLength, // bottom left
// left face
centerPosX - halfSideLength, centerPosY + halfSideLength, centerPosZ + halfSideLength, // top left
centerPosX - halfSideLength, centerPosY + halfSideLength, centerPosZ - halfSideLength, // top right
centerPosX - halfSideLength, centerPosY - halfSideLength, centerPosZ - halfSideLength, // bottom right
centerPosX - halfSideLength, centerPosY - halfSideLength, centerPosZ + halfSideLength, // bottom left
// right face
centerPosX - halfSideLength, centerPosY + halfSideLength, centerPosZ + halfSideLength, // top left
centerPosX - halfSideLength, centerPosY + halfSideLength, centerPosZ - halfSideLength, // top right
centerPosX - halfSideLength, centerPosY - halfSideLength, centerPosZ - halfSideLength, // bottom right
centerPosX - halfSideLength, centerPosY - halfSideLength, centerPosZ + halfSideLength, // bottom left
// top face
centerPosX - halfSideLength, centerPosY + halfSideLength, centerPosZ + halfSideLength, // top left
centerPosX - halfSideLength, centerPosY + halfSideLength, centerPosZ - halfSideLength, // top right
centerPosX + halfSideLength, centerPosY + halfSideLength, centerPosZ - halfSideLength, // bottom right
centerPosX + halfSideLength, centerPosY + halfSideLength, centerPosZ + halfSideLength, // bottom left
// bottom face // right face
centerPosX - halfSideLength, centerPosY - halfSideLength, centerPosZ + halfSideLength, // top left
centerPosX - halfSideLength, centerPosY - halfSideLength, centerPosZ - halfSideLength, // top right
centerPosX + halfSideLength, centerPosY - halfSideLength, centerPosZ - halfSideLength, // bottom right
centerPosX + halfSideLength, centerPosY - halfSideLength, centerPosZ + halfSideLength, // bottom left centerPosX + halfSideLength, centerPosY - halfSideLength, centerPosZ - halfSideLength, // bottom right centerPosX + halfSideLength, centerPosY - halfSideLength, centerPosZ + halfSideLength // bottom left
};
GLfloat colour[] = {
255, 0, 0,
255, 0, 0,
255, 0, 0,
255, 0, 0,
0, 255, 0,
0, 255, 0,
0, 255, 0,
0, 255, 0,
0, 0, 255,
0, 0, 255,
0, 0, 255,
0, 0, 255,
100,100,100,
100,100,100,
100,100,100,
100,100,100,
200,200,200,
200,200,200,
200,200,200,
200,200,200,
40,220,75,
40,220,75,
40,220,75,
40,220,75,
};
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glColorPointer(3, GL_FLOAT, 0, colour);
glDrawArrays(GL_QUADS, 0, 24);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
}
如你所见,我有1张红脸,1张绿脸和4张没有彩色的脸
答案 0 :(得分:1)
虽然亚美尼亚是正确的,但仍然存在其他问题。
你忘了打开深度测试。这就是为什么你可以看到红色的一面,即使从你的角度来看你也不应该。这也是为什么你可以看到后面的绿墙"通过"前墙。
答案 1 :(得分:0)
您要么使用GLfloat (GL_FLOAT)
,要么必须使用 [0.0,1.0] 的范围。
或者您使用GLubyte (GL_UNSIGNED_BYTE)
,则必须使用范围 [0,255] 。