2010-05-06 5 views
0

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

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

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

Что касается двойного буфера, что это? (Ниже: определение от Apple)

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

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

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

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

Игнасио.

ответ

1

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

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

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

Для получения дополнительной информации, http://en.wikipedia.org/wiki/Multiple_buffering#Double_buffering_in_computer_graphics