我正在制作一个简单的应用程序,我应该用GLUT绘制一个多维数据集
由于我用普通的C学习OpenGL,我很难理解我应该调用什么函数来初始化上下文,因为我不需要再调用诸如glutInit等函数了。
所以我将NSOpenGLView子类化,为窗口禁用了一次性内存并编写了这段代码:
@implementation MyView
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
NSOpenGLContext* context=[self openGLContext];
[context makeCurrentContext];
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, 0, -100, 0, 0, 0, 0, 1, 0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, 1, 1, 1000);
glShadeModel(GL_SMOOTH);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_DEPTH_TEST);
}
return self;
}
- (void)drawRect:(NSRect)dirtyRect
{
glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor4f(1, 0, 0, 0);
glutSolidCube(10);
glFlush();
}
但似乎我错过了一些东西,因为我看到的是黑色视图而不是立方体。
答案 0 :(得分:2)
您需要将initWithFrame中的代码移动到prepareGL。 E.g。
- (void)prepareOpenGL {
NSOpenGLContext *context = [self openGLContext];
[context makeCurrentContext];
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, 0, -100, 0, 0, 0, 0, 1, 0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, 1, 1, 1000);
glShadeModel(GL_SMOOTH);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_DEPTH_TEST);
}