Opengl es 打开GLES 1.1-当我只想要红色时,GLColorPointer会创建一道彩虹

Opengl es 打开GLES 1.1-当我只想要红色时,GLColorPointer会创建一道彩虹,opengl-es,colors,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);

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

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);
for(int i=0;i

我希望这会使我的物体全部变成红色,但它是不同颜色的彩虹。有人知道为什么吗?我会假设我的“颜色”数组缓冲区有问题,但我一辈子都看不出它是什么。实际的顶点似乎渲染得很好。

for循环非常混乱。每次你的i值都会增加4。更重要的是,在第3-5行中使用偏移量1、2和3进行索引。我想你对颜色数组大小的定义是4?尝试按如下方式初始化颜色数组:

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

然后调用glColorPointer,如下所示:

glColorPointer(4,GL_浮点,0,颜色)


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

我在试验时意外地将步幅设置为1,但在发布之前忘记更改,抱歉-我会更改它。我以这种方式填充颜色数组,这样我得到一个R,G,B的缓冲区,a值代表每个顶点的红色。我这样做是为了调试为什么我的颜色一团糟。最后,我想把这个“红色”缓冲区换成我的真彩色数组。颜色数组大小==15644。这样行吗?我将步幅改回0,但仍能获得多色效果。用1.0,0.0,0.0,1.0填充我的数组肯定会使我的每个顶点都变红吗?如果你编辑了你在问题中发布的代码,那么for循环在我看来仍然很不可靠!为什么每次递增4,然后用偏移量索引数组?你是否尝试过按照我的建议声明你的数组?我确实尝试过按照你的建议进行设置,但应用程序突然崩溃,大概是因为“颜色”数组无法提供更多的顶点。当我用所有1.0f值填充数组时,它变成了全白色,因此我需要一种不同的颜色。我不知道如何用1.0f、0.0f、0.0f、1.0f连续填充阵列?我现在正在考虑使用OpenGLES2.0,事情似乎进展得更好(最初我被DoyourOwnlighting吓了一跳)。不过谢谢你的帮助。