打开GLES 1.1 - 当我想要红色时,GLColorPointer会产生彩虹色

时间:2011-03-09 18:48:08

标签: opengl-es colors

我正在渲染这样一个对象:

for (int i = 0; i < COLOR_ARRAY_SIZE; i += 4) {
    colors[i] = 1.0f;
    colors[i + 1] = 0.0f;
    colors[i + 2] = 0.0f;
    colors[i + 3] = 1.0f;
}

// Clear color and depth buffer
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// Set GL11 flags:
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);

glEnable(GL_DEPTH_TEST);

// make sure nothing messes with the colour
glDisable(GL_BLEND);
glDisable(GL_DITHER);
glDisable(GL_FOG);
glDisable(GL_LIGHTING);
glDisable(GL_TEXTURE_2D);
glShadeModel(GL_FLAT);

// Load projection matrix:
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(projectionMatrix);

// Load model view matrix and scale appropriately
int kObjectScale = 300f;
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(modelViewMatrix);
glTranslatef(0.5f, 0.5f, 0.5f);
glScalef(kObjectScale, kObjectScale, kObjectScale);

// Draw object
glVertexPointer(3, GL_FLOAT, 0, (const GLvoid*) &vertexPositions[0]);
glNormalPointer(GL_FLOAT, 0, (const GLvoid*) &vertexNormals[0]);
glColorPointer(4, GL_FLOAT, 0, (const GLvoid*) &colors[0]);
glDrawElements(GL_TRIANGLES, 11733, GL_UNSIGNED_SHORT,
        (const GLvoid*) &indices[0]);

glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);

我希望这会使我的物体全部呈现红色,但它却是不同颜色的彩虹。有谁知道为什么?我认为我的“颜色”数组缓冲区有问题,但我不能为我的生活看到它是什么。实际的顶点看起来很好。

1 个答案:

答案 0 :(得分:1)

你的for循环非常困惑。你每次将你的i值增加4。更重要的是,您在第3-5行中使用偏移量1,2和3进行索引。我假设你的COLOR_ARRAY_SIZE定义是4?尝试按如下方式初始化颜色数组:

float colors[] = {1.0f, 0.0f, 0.0f, 1.0f};

然后按如下方式调用glColorPointer:

glColorPointer(4, GL_FLOAT, 0, colors);

请注意,我已将步幅设置为0.如果您的颜色数组仅包含颜色,那么我看不出您应该使用步幅的任何原因(步幅用于跳过数组中的交织信息)