我不是OpenGL的新手,但不是专家。许多教程教授如何绘制,3D,2D,投影,正交等,但如何设置视图? (Cocoa中的NSOpenGLView,Macs)。
例如我有这个:
- (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会发生什么?
等等,一般来说,我如何学习从头开始设置视图?
提前致谢。
伊格纳西奥。
答案 0 :(得分:2)
关于颜色,我不完全确定它的区别。
关于双缓冲:假设你的帧速率很慢,3fps。如果需要三分之一秒才能在屏幕上绘制所有内容,您将在绘制时看到它们。例如,如果使用画家的算法绘制它,您将首先看到背景多边形,然后您会看到更接近的东西。此外,最后绘制的东西只会在它被清除以绘制下一帧之前立即开启。
双缓冲将所有内容呈现为屏幕外图像,然后将整个渲染图像放在屏幕上。所以在你渲染整个东西之前你不会看到任何动作,但你也不会看到一个不完整的框架。
更多信息,http://en.wikipedia.org/wiki/Multiple_buffering#Double_buffering_in_computer_graphics