Объяснение атрибутов формата пикселей OpenGL (NSOpenGLPixelFormatAttibutes)? - PullRequest
1 голос
/ 06 мая 2010

Я не новичок в OpenGL, но не эксперт.Многие учебные пособия учат рисовать, 3D, 2D, проекции, ортогональные и т. Д., Но как насчет настройки вида?(NSOpenGLView в Какао, Mac).

Например, у меня есть это:

- (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?или оба?(под способным я имею в виду не всегда в полноэкранном режиме)

Что касается Double Buffer, что это именно?(Ниже: определение Apple)

Если присутствует, этот атрибут указывает, что рассматриваются только пиксельные форматы с двойной буферизацией.В противном случае считаются только пиксельные форматы с одной буферизацией

Относительно цвета: если NSOpenGLPFAColorSize равен 24, а NSOpenGLPFAColorSize равен 8, то это означает, что компоненты alpha и RGB обрабатываются по-разному?что произойдет, если я установлю прежнее значение 32, а позднее 0?

и т. д. и т. д. В общем, как мне научиться настраивать вид с нуля?

Заранее спасибо.

Игнасио.

1 Ответ

2 голосов
/ 06 мая 2010

Что касается цвета, я не совсем уверен, что разница.

Относительно двойной буферизации: допустим, у вас медленная частота кадров, 3 кадра в секунду. Если для рисования всего на экране требуется треть секунды, вы увидите их так, как они рисуют. Если он нарисован с использованием, например, алгоритма рисования, вы сначала увидите фоновые полигоны, а затем все ближе. Кроме того, последняя вещь, которую нужно нарисовать, будет включена только на мгновение, прежде чем она будет очищена для рисования следующего кадра.

Двойная буферизация переводит все в изображение вне экрана, а затем выводит все визуализированное изображение на экран. Таким образом, вы не увидите никаких действий, пока не отрендерите все это, но вы также не увидите неполный кадр.

Для более, http://en.wikipedia.org/wiki/Multiple_buffering#Double_buffering_in_computer_graphics

...