2010-06-06 173 views
3

由於某些原因,OpenGL行爲非常奇怪。在我NSOpenGLView的子類,我在-prepareOpenGL方法下面的代碼:OpenGL行爲奇怪

- (void)prepareOpenGL { 
GLfloat lightAmbient[] = { 0.5f, 0.5f, 0.5f, 1.0f }; 
GLfloat lightDiffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f }; 
GLfloat lightPosition[] = { 0.0f, 0.0f, 2.0f }; 

quality = 0; 
zCoord = -6; 

[self loadTextures]; 

glEnable(GL_LIGHTING); 
glEnable(GL_TEXTURE_2D); 
glShadeModel(GL_SMOOTH); 
glClearColor(0.2f, 0.2f, 0.2f, 0.0f); 
glClearDepth(1.0f); 
glEnable(GL_DEPTH_TEST); 
glDepthFunc(GL_LEQUAL); 
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); 

glLightfv(GL_LIGHT1, GL_AMBIENT, lightAmbient); 
glLightfv(GL_LIGHT1, GL_DIFFUSE, lightDiffuse); 
glLightfv(GL_LIGHT1, GL_POSITION, lightPosition); 
glEnable(GL_LIGHT1); 

gameState = kGameStateRunning; 
int i = 0; // HERE ******** 
[NSTimer scheduledTimerWithTimeInterval:0.03f target:self 
      selector:@selector(processKeys) userInfo:nil repeats:YES]; 

// Synchronize buffer swaps with vertical refresh rate 
GLint swapInt = 1; 
[[self openGLContext] setValues:&swapInt forParameter:NSOpenGLCPSwapInterval]; 
// Setup and start displayLink 
[self setupDisplayLink]; 
} 

我想分配一個處理按鍵輸入伊娃計時器,這樣我可以使它無效時,遊戲暫停(和再次它繼續),但是當我這樣做時(就像有意將它放在[NSTimer scheduledTimer ...)中,OpenGL不顯示我繪製的立方體。當我拿走它時,沒關係。所以我試着添加一個無害的聲明,int i = 0;(製作成// HERE *******),這使得照明無法正常工作!當我把它拿走時,一切都很好,但是當我把它放回去時,一切都是黑暗的。有人能爲此提出合理的解釋嗎?即使已經有多個聲明,只要創建任何變量即可完成此操作。

謝謝。

回答

2

很奇怪,但我發現了這個問題。在這一行:

GLfloat lightPosition[] = { 0.0f, 0.0f, 2.0f }; 

我只有3個單元,而不是4.我不知道爲什麼,當我沒有int i = 0;它的工作,但是當我添加0.0F到數組一切工作正常。

+0

我想你可以期望使用像OpenGL這樣的低級API時可以使用這種類型的東西。 – mk12 2010-06-20 02:32:32