2010-04-19 31 views
1

我正在渲染一個場景,其中有兩個球體。我圍繞其中一個旋轉攝像頭。會發生什麼是違反直覺的。當相機繞過球體時,其他球體會在你期望它落後時進入球體。所以看起來好像這些球體並不是圍繞着彼此旋轉,而是應該繞過的那個始終是前面的。請幫忙。爲什麼當我用旋轉照相機渲染一個場景時,你期望出現在其他人後面的對象不這麼做? OPENGL Objective-c

下面是渲染場景的代碼:

glLoadIdentity(); 

[self positionCamera]; 

glutSolidSphere(2, 12,12); 

glPushMatrix(); 
glTranslatef(5, 0, 0); 
glutSolidSphere(0.5, 12,12); 
glPopMatrix(); 

glFlush(); 

此塊是被調用使用類的一部分。

[NSTimer scheduledTimerWithTimeInterval:DEFAULT_ANIMATION_INTERVAL 
           target:self 
           selector:@selector(drawRect) 
           userInfo:nil 
           repeats:YES]; 

而且

-(void)positionCamera{} 

包含數學做相機革命和gluLookAt()

回答

1

基本上你現在正在做的是一個後端到前端的渲染,其中最後一個原始的繪製將總是出現在別人身上。

你想要做的是啓用深度測試,其中每個片段的深度將在屏幕上繪製之前進行比較。 glEnable(DEPTH_TEST)應該有所幫助。

+0

我有一個GL初始化類,我只是這樣做。我測量了深度緩衝區。 int depth; glGetIntegerv(GL_DEPTH_BITS,&depth); NSLog(@「%i比特深度」,深度) 它返回0. 這是問題嗎? – nebulus 2010-04-19 03:08:35

+0

您肯定需要深度緩衝區來進行深度測試。我不確定它爲什麼不存在,但檢查你的初始化代碼。你總是可以嘗試明確地創建一個深度格式紋理,只是爲了確保它被硬件支持(雖然我不熟悉Objective-C,所以沒有代碼示例)。 取決於您的物體距離相機多遠,16或24位深度緩衝區應該足夠多。 如果這些都不起作用,你總是可以使用trig來找出哪些應該在前面並且最後渲染那個。但深度測試絕對是更好的選擇。 – ssube 2010-04-19 03:16:41

+0

太棒了!我爲我的應用程序窗口設置了一個24位緩衝區。 IB可以讓您輕鬆使用Inspector。有用。多謝你們! – nebulus 2010-04-19 03:21:38

相關問題