2012-01-19 66 views
0

我跟着this tutorial和我目前正在嘗試創建一個類來繪製立方體。該類在一個名爲setup的函數中填充緩衝區,並在一個名爲draw的函數中繪製它們。製作一個iPhone立方體課

但沒有錯誤,但屏幕上沒有顯示任何內容。

我的問題基本上是如何去做一個我可以渲染立方體的類。

使用Xcode 4.2,Opengl和Objective-C。

[編輯]

-(void)SetShader:(GLuint)InShader 
{ 
glUseProgram(InShader); 

_positionSlot = glGetAttribLocation(InShader, "Position"); 
_colorSlot = glGetAttribLocation(InShader, "SourceColor"); 
glEnableVertexAttribArray(_positionSlot); 
glEnableVertexAttribArray(_colorSlot); 

_projectionUniform = glGetUniformLocation(InShader, "Projection"); 
_modelViewUniform = glGetUniformLocation(InShader, "Modelview"); 

_texCoordSlot = glGetAttribLocation(InShader, "TexCoordIn"); 
glEnableVertexAttribArray(_texCoordSlot); 
_textureUniform = glGetUniformLocation(InShader, "Texture"); 
} 

-(void)SetupVBO 
{ 
    GLuint vertexBuffer; 
    glGenBuffers(1, &vertexBuffer); 
    glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(CubeVertices), CubeVertices, GL_STATIC_DRAW); 

    GLuint indexBuffer; 
    glGenBuffers(1, &indexBuffer); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer); 
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(CubeIndices), CubeIndices, GL_STATIC_DRAW); 
} 

-(void)draw 
{ 
glVertexAttribPointer(_positionSlot, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0); 
glVertexAttribPointer(_colorSlot, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*) (sizeof(float) * 3)); 

glVertexAttribPointer(_texCoordSlot, 2, GL_FLOAT, GL_FALSE, 
         sizeof(Vertex), (GLvoid*) (sizeof(float) * 7));  

glDrawElements(GL_TRIANGLES, sizeof(CubeIndices)/sizeof(CubeIndices[0]), GL_UNSIGNED_BYTE, 0); 
} 

-(void)render:(CADisplayLink*)displayLink 
{ 
glClearColor(0, 0, 0.2, 1.0); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glEnable(GL_DEPTH_TEST); 

CC3GLMatrix *projection = [CC3GLMatrix matrix]; 
float h = 4.0f * self.frame.size.height/self.frame.size.width; 
[projection populateFromFrustumLeft:-2 andRight:2 andBottom:-h/2 andTop:h/2 andNear:4 andFar:10]; 
glUniformMatrix4fv(_projectionUniform, 1, 0, projection.glMatrix); 

CC3GLMatrix *modelView = [CC3GLMatrix matrix]; 
[modelView populateFromTranslation:CC3VectorMake(0, 0, -7)]; 
[modelView translateBy:CC3VectorMake(0,5,0)]; 
glUniformMatrix4fv(_modelViewUniform, 1, 0, modelView.glMatrix); 

glViewport(0, 0, self.frame.size.width, self.frame.size.height); 

[m_cube draw]; 

[_context presentRenderbuffer:GL_RENDERBUFFER]; 
} 
+0

請張貼您的代碼。 –

+1

問題很模糊。遵循教程沒有任何改變對你有用嗎?如果是這樣,你做了什麼改變,沒有工作?一般來說,OpenGL什麼都不抽,這是因爲OpenGL狀態機設置很奇怪。如果你發佈了一些代碼,說明你如何設置,特別是對'glViewport()','glOrtho()','gluPerspective()'和/或'glFrustum()'的調用,這將會有所幫助。 – user1118321

+0

我已經發布了一些相關的代碼 – Dave

回答

0

這是與我的視和透視設置的佈置中提到的問題。