我有幾個立方體形狀的對象,我將其添加到單個上下文中,該對象位於我的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);
}
有人能解決這個問題?
謝謝你的回答datenwolf。然而,你的批評並沒有回答我的問題。我是一名計算機科學專業的學生,我想學習OpenGL,因爲它不在我的常規課程中。 OpenGL在開始的時候非常強大,所以我希望你能原諒我的錯誤觀念。我並不是真的認爲我添加了這些對象,它們被吸引到當前的環境中嗎?從OOP的角度來看,它似乎是同義詞。那麼,你能否詳細說明模型觀點?我推測投影矩陣是相機,模型視圖只是一個由線和點組成的「對象」。 – 2013-03-03 18:45:15
每個繪製的立方體都有其自己的視角,正如您在我提供的第一段代碼中所看到的。那是不正確的? – 2013-03-03 19:01:36
@MartinE:很難說沒有完整的代碼或更多的上下文。 – datenwolf 2013-03-03 19:22:56