我在設置OpenGL上下文和使用Snow Leopard在MacOSX上正確使用它時遇到了一些問題和疑問。網上有很多不同的教程和代碼,它們的範圍從10.4到10.6不等。我打算不使用GLUT來處理我的外圍交互並處理我的GL上下文。如何使用gluOrtho2D(像素空間)在Mac OSX(Snow Leopard)上啓動OpenGL上下文
爲了解決手頭的問題,我希望能夠做的就是能夠在調整窗口大小時畫出我的場景。由於某種原因,我的重塑功能無法正常工作。我也不知道我是否應該在界面生成器中使用NSOpenGLView或CustomView。從我收集的內容看來,如果您需要超過您可以在NSOpenGLView對象中選擇的默認渲染屬性,那麼您應該使用CustomView。在我的情況下,我已經將子類NSOpenGLView並將我的類連接到IBuilder中的此對象。
無論如何,下面是我的代碼。如下所述,我真的希望能夠在正交空間(像素空間)和透視圖(世界空間)之間來回移動。嘗試使用gluOrtho2D()(隱式函數聲明)時,我收到警告。我不知道如何讓這個工作正常,所以任何幫助表示讚賞。對不起,我的代碼的輸出 - 由於某種原因,它不希望正確格式化:
#import "MyOpenGLView.h"
@implementation MyOpenGLView
-(void)reshape {
NSRect rectView = [self bounds];
if(m_rectView.size.width != rectView.size.width || m_rectView.size.height != rectView.size.height) {
glViewport(0, 0, rectView.size.width, rectView.size.height);
m_rectView = rectView;
}
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
}
-(void) drawRect:(NSRect)bounds {
glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1.0, 0.85, 0.35);
glBegin(GL_TRIANGLES);
{
glVertex3f(0.0, 0.6, 0.0);
glVertex3f(-0.2, -0.3, 0.0);
glVertex3f(0.2, -0.3, 0.0);
}
glEnd();
glFlush();
}
@end
好吧,我在我的帖子中說過,我已經子類NSOpenGLView和綁定到我的課使用IB的視圖。我沒有包括我註釋掉的glOrtho代碼,但是我出於某種原因使最後2個參數0和0而不是-1.0和1.0。現在它似乎工作正常。我在重塑函數中使用它的原因是我試圖在我更新的glViewport中進行重繪,這當然是屏幕的寬度和高度。當我調整屏幕大小時,它似乎沒有正確更新以適應視口內部。 – usmsci 2011-06-06 21:33:44
您應該在顯示處理程序中設置glViewport。調整大小處理程序應該設置一些實例變量(self.width,self.height)並觸發重新顯示。設置在==遠處會導致通過0進行一些除法,因此投影矩陣的某些元素變爲NaN。或者乾脆放在附近一定不能等於遠。 – datenwolf 2011-06-06 22:06:15