1
我可以使用以下代碼在iPhone上成功地在iPhone上的OpenGL ES 2.0中繪製線條。我正在禁用紋理和混合,但我的GLKBaseEffects useConstantColor
似乎沒有顏色線 - 它總是黑色!我無法設置顏色!我怎樣才能做到這一點?iOS OpenGL ES 2.0繪製3D線條和設置顏色
// Turn off texturing
self.effect.texture2d0.enabled = NO;
self.effect.texture2d1.enabled = NO;
// Turn off blending
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
// Draw a line
self.effect.useConstantColor = GL_TRUE;
// Make the line a red color
self.effect.constantColor = GLKVector4Make(
1.0f, // Red
0.0f, // Green
0.0f, // Blue
1.0f);// Alpha
// Prepare the effect for rendering
[self.effect prepareToDraw];
GLfloat line[] = { -1.0, -1.0, -6.0, 1.0, 1.0, 5.0, 1.0, -1.0, 2.0 };
// Create an handle for a buffer object array
GLuint bufferObjectNameArray;
// Have OpenGL generate a buffer name and store it in the buffer object array
glGenBuffers(1, &bufferObjectNameArray);
// Bind the buffer object array to the GL_ARRAY_BUFFER target buffer
glBindBuffer(GL_ARRAY_BUFFER, bufferObjectNameArray);
// Send the line data over to the target buffer in GPU RAM
glBufferData(
GL_ARRAY_BUFFER, // the target buffer
sizeof(line), // the number of bytes to put into the buffer
line, // a pointer to the data being copied
GL_STATIC_DRAW); // the usage pattern of the data
// Enable vertex data to be fed down the graphics pipeline to be drawn
glEnableVertexAttribArray(GLKVertexAttribPosition);
// Specify how the GPU looks up the data
glVertexAttribPointer(
GLKVertexAttribPosition, // the currently bound buffer holds the data
3, // number of coordinates per vertex
GL_FLOAT, // the data type of each component
GL_FALSE, // can the data be scaled
// * INCORRECT * 3, // how many bytes per vertex (3 floats per vertex)
0, // stride (0 bytes between coordinates.) ~Olie
// * INCORRECT * NULL); // offset to the first coordinate, in this case 0
line); // pointer to the buffer to draw. ~Olie
// Set the line width
glLineWidth(5.0);
// Render the line
glDrawArrays(GL_LINE_LOOP, 0, 3);
// Turn on blending
glDisable(GL_BLEND);
// Turn on texturing
self.effect.texture2d0.enabled = YES;
self.effect.texture2d1.enabled = YES;
在研究回答了我自己的(不同的)問題,我遇到了這個職位。一個更正:在上面的示例中,glVertexAttribPointer中的2nd-last參數是* stride *,並且應該爲0,而不是3.我在註釋中編輯過,但沒有更改實際代碼,以防您想要評論,編輯或其他,你自己。最後一個參數是一個指向座標數組的指針。 (我稍微猶豫的一個原因是因爲我不知道當你使用綁定緩衝區時事情是否有不同的作用。) – Olie 2013-05-28 00:09:38