1

我不是 OpenGL 的新手,但不是专家。许多教程教如何绘制、3D、2D、投影、正交等,但是如何设置视图呢?(可可,Mac 中的 NSOpenGLView)。

例如我有这个:

- (id) initWithFrame: (NSRect) frame
{
    GLuint attribs[] = { //PF: PixelAttibutes
            NSOpenGLPFANoRecovery,
            NSOpenGLPFAWindow,
            NSOpenGLPFAAccelerated,
            NSOpenGLPFADoubleBuffer,
            NSOpenGLPFAColorSize, 24,
            NSOpenGLPFAAlphaSize, 8,
            NSOpenGLPFADepthSize, 24,
            NSOpenGLPFAStencilSize, 8,
            NSOpenGLPFAAccumSize, 0,
            0
        };
    NSOpenGLPixelFormat* fmt = [[NSOpenGLPixelFormat alloc] initWithAttributes: (NSOpenGLPixelFormatAttribute*) attribs];
return self = [super initWithFrame:frame pixelFormat: [fmt autorelease]];
}

而且我不太了解它们的用法,特别是在组合它们时。

例如:

如果我希望我的视图能够全屏显示,我应该只写 NSOpenGLPFAFullScreen 吗?或两者?(有能力我的意思是不总是全屏)

关于双缓冲,这到底是什么?(下:苹果的定义)

如果存在,此属性指示仅考虑双缓冲像素格式。否则,仅考虑单缓冲像素格式

关于颜色:如果 NSOpenGLPFAColorSize 是 24 并且 NSOpenGLPFAColorSize 是 8 那么这意味着 alpha 和 RGB 组件的处理方式不同吗?如果我将前者设置为 32,将后者设置为 0,会发生什么?

等等,一般来说,我如何学习从头开始设置我的视图?

提前致谢。

伊格纳西奥。

4

1 回答 1

2

关于颜色,我不完全确定区别。

关于双缓冲:假设您的帧速率较慢,为 3fps。如果在屏幕上绘制所有内容需要 1/3 秒,那么您将在它们绘制时看到它们。例如,如果它是使用画家算法绘制的,您将首先看到背景多边形,然后您会看到更近的东西。此外,最后要绘制的东西只会在它被清除以绘制下一帧之前打开一瞬间。

双缓冲将所有内容渲染到屏幕外图像,然后将整个渲染图像放在屏幕上。因此,在渲染整个事物之前,您不会看到任何动作,但也不会看到不完整的帧。

更多信息,http ://en.wikipedia.org/wiki/Multiple_buffering#Double_buffering_in_computer_graphics

于 2010-05-06T15:24:02.453 回答