1

我使用的示例来自:http ://dragonsandbytecode.wordpress.com/2012/06/07/game-dev-diary-5-about-textures-and-2d/

我想显示多个视口,最好我能够通过按 1、2、3、4 等打开和关闭它们。但首先,我如何显示多个视口?在以下函数中:

- (void)reshape {
NSRect rect = [self bounds];

glViewport(0, rect.size.height/2, rect.size.width/2, rect.size.height/2);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(50, rect.size.width/rect.size.height, .1, 30);


glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glEnable(GL_DEPTH_TEST);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable( GL_BLEND );
glEnable(GL_TEXTURE_2D);

}

如果我写了一个以上的 glviewport,它会覆盖另一个。我在某处读到我必须先让opengl再次绘制到屏幕上,但我该怎么做呢?如果我听起来毫无头绪,我深表歉意,但我非常感谢任何可以在这里帮助我的人。在 GLUT 中,我总是使用子窗口,但是看到它会使用许多不同的上下文,我认为更好的方法是使用 glViewport() 代替。

4

1 回答 1

0

如果你再次调用 glviewport,你只是将相同的 OpenGL 上下文的视口设置为一个新的矩形,覆盖以前的设置,这显然不是你想要的。

如果您的各种基于 OpenGL 的视图位于屏幕的不同区域,并且它们之间存在非 OpenGL 内容,那么在 OpenGL 中,您需要为每个视图使用单独的 GL 上下文(您可以通过使用多个基于 NSOpenGLView 的视图)。或者,如果您的 GL 视图是相邻的,您会发现使用单个 OpenGL 上下文(就像您正在做的那样)要简单得多,但是在一个地方绘制所有内容。

至于在同一个窗口中具有 GLUT 的多个上下文,在我看来这是不可能的。相反,我强烈建议使用 Apple 提供的 OpenGL 集成(NSOpenGLView、NSOpenGLContext 等)。见这里:https ://developer.apple.com/opengl/

于 2015-10-02T11:59:21.903 回答