2013-05-10 119 views
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; 
+0

在研究回答了我自己的(不同的)問題,我遇到了這個職位。一個更正:在上面的示例中,glVertexAttribPointer中的2nd-last參數是* stride *,並且應該爲0,而不是3.我在註釋中編輯過,但沒有更改實際代碼,以防您想要評論,編輯或其他,你自己。最後一個參數是一個指向座標數組的指針。 (我稍微猶豫的一個原因是因爲我不知道當你使用綁定緩衝區時事情是否有不同的作用。) – Olie 2013-05-28 00:09:38

回答

1

嘗試添加此:

// Turn off lighting 
self.effect.light0.enabled = GL_FALSE;