2

在 IB 中,我在窗口中放置了一个 NSOpenGLView 实例。

我在一个自定义的 NSViewController 中有我的所有绘图代码,如下所示:

// MyOpenGLViewController.h

@interface MyOpenGLViewController : NSViewController 
{
    IBOutlet NSOpenGLView *glView;  
}

// MyOpenGLViewController.m

-(void)awakeFromNib
{
    [self drawFrame];
}

-(void)drawFrame
{
    [[glView openGLContext] makeCurrentContext];
    glClearColor(0, 0, 0, 1);
}

一切都被链接起来,“drawFrame”被调用,但我没有在屏幕上看到任何东西。它总是白色的。我应该检查什么?

4

3 回答 3

4

通常,一个子类 NSOpenGLView 并安装一个计时器来更新您的数据模型,如果有任何更改,则绘制更改。控制器不应该进行绘图。Apple 有一些很好的文档来说明如何工作。从Mac OS X 的 OpenGL 编程指南开始。

我似乎记得在 Interface Builder 中使用 NSOpenGLView 对象的一个​​错误。我总是做的是在你想要视图的地方添加一个通用的 NSObject 并将它的类设置为你的 NSOpenGLView 子类。

于 2011-02-14T22:51:23.407 回答
2

不确定可可,但glClearColor()只是设置了一些状态。 glClear(GL_COLOR_BUFFER_BIT)实际上会清除帧缓冲区。

于 2011-02-14T21:40:00.807 回答
1

回答有点晚了,但是当我想知道同样的事情并发现了这个线程时,我想我应该用一些缺失的部分来更新它:P

正如其他人提到的 glClearColor() 只设置一个属性,实际清除必须使用 glClear 完成(注意除了颜色缓冲区之外,它还可以清除 Z-Buffer、累加器和模板)。

最后,您的 OpenGL 命令需要实际刷新。这可以通过 glFlush() 来完成,如果你是单缓冲的,或者 glSwapAPPLE() 如果你是双缓冲的。

于 2012-01-18T18:54:37.713 回答