2013-03-03 40 views
1

我有幾個立方體形狀的對象,我將其添加到單個上下文中,該對象位於我的GLKView中。每個多維數據集都是NSObject的子類,並分別具有各自的基本效果。我設立了這樣的每一個立方體投影矩陣和基數效應:將多個簡單的OpenGL多維數據集添加到一個上下文中,併爲單個多維數據集設置透視圖

self.effect = [[GLKBaseEffect alloc]init]; 

     self.effect.transform.projectionMatrix = GLKMatrix4MakePerspective(45.0f,0.95f, 0.0f, 10.0f); 
     self.effect.transform.projectionMatrix = GLKMatrix4Translate(self.effect.transform.projectionMatrix, 0, 0.0, 2.0); 

現在,它好像都做連接的投影。我想從前面看他們全部。但是,如果我將它們放置一點,則可以看到立方體的底部或頂部。

關於上述代碼行的另一件事:我必須沿z軸稍微移動我的模型視圖矩陣以正確地構造它們。我無法將投影矩陣稍微移回一點嗎?我嘗試了幾個值,但無濟於事。

容器設置如下所示:

- (void)setupGL { 

    [EAGLContext setCurrentContext:self.context]; 

    self.layer.contentsScale = 2.0; 


    // Create default framebuffer object. 
    glGenFramebuffers(1, &defaultFrameBuffer); 
    glBindFramebuffer(GL_FRAMEBUFFER, defaultFrameBuffer); 

    GLfloat coordToPixScale = 1.0; 

    glGenRenderbuffers(1, &depthBuffer); 
    glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer); 
    glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, self.bounds.size.width * coordToPixScale, self.bounds.size.height * coordToPixScale); 
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBuffer); 

    glEnable(GL_DEPTH_TEST); 


} 

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect { 

    @synchronized(self){ 

     self.opaque = NO; 

     glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

     [cubes makeObjectsPerformSelector:@selector(draw)]; 


    } 


} 

- (void)glkView:drawInRect:方法我做的立方體陣列中的所有添加到陣列中的立方體履行-draw方法:

-(void)draw{ 


    [self.effect prepareToDraw]; 

    glBindTexture(GL_TEXTURE_2D, texture[2]); 
    glDrawArrays(GL_TRIANGLES, 0, 24); 


} 

有人能解決這個問題?

回答

1

I have a couple of cube shaped objects that I add to a single context,

第一個概念錯誤:您不要將對象添加到OpenGL上下文中。這不是OpenGL的工作原理。 OpenGL繪製點,線或三角形,就是這樣。一切更高的水平取決於你。

你想要多個立方體,每個立方體都有自己的視角?你一個接一個地繪製它們,每個都有自己的視角設置。

Can't I just move the projection matrix back a bit

投影矩陣是一種鏡頭。您不會將鏡頭從相機的身體上拉下來,並將其移動到相機的三腳架上。出於某種原因,模型視圖矩陣被稱爲model-視圖。視圖部分與3D圖形中的相機類似。

+0

謝謝你的回答datenwolf。然而,你的批評並沒有回答我的問題。我是一名計算機科學專業的學生,​​我想學習OpenGL,因爲它不在我的常規課程中。 OpenGL在開始的時候非常強大,所以我希望你能原諒我的錯誤觀念。我並不是真的認爲我添加了這些對象,它們被吸引到當前的環境中嗎?從OOP的角度來看,它似乎是同義詞。那麼,你能否詳細說明模型觀點?我推測投影矩陣是相機,模型視圖只是一個由線和點組成的「對象」。 – 2013-03-03 18:45:15

+0

每個繪製的立方體都有其自己的視角,正如您在我提供的第一段代碼中所看到的。那是不正確的? – 2013-03-03 19:01:36

+0

@MartinE:很難說沒有完整的代碼或更多的上下文。 – datenwolf 2013-03-03 19:22:56

相關問題