【问题标题】:Update NSOpenGLView size更新 NSOpenGLView 大小
【发布时间】:2012-07-20 10:00:49
【问题描述】:

我想在更改纹理大小时更新我的​​ NSOpenGLView 窗口。没关系。发生这种情况时我会注册事件,但我无法调整 OpenGLView 的大小。正在更改的值是wh

-(void)initOpenGL {
NSSize size = {w, h};
[self setFrameSize:size];
NSOpenGLContext *glcontext;
glcontext = [self openGLContext];
[glcontext makeCurrentContext];
glMatrixMode(GL_PROJECTION);
glClearColor(0.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);               
glOrtho(0.0, h, 0.0, w, -1.0, 10.0); 
}

当应用程序启动时,它可以正常工作,但是当我在更改任何这些大小后执行[self initOpenGL] 时,OpenGL 视图变黑,不再工作。

【问题讨论】:

    标签: objective-c xcode macos cocoa opengl


    【解决方案1】:

    您可能需要致电[glcontext update]glViewport(0,0,oglWidth,oglHeight) 来调整视图大小的变化。

    【讨论】:

    • 我试过了。 Maby 我不知道如何使用它,但是在尺寸变化时运行的功能女巫我添加了[glcontext update],但什么也没有。
    • 不能正常工作。我猜是因为 glOrtho 是在程序启动时描述的,以后在调整大小时不会编辑。但正如我所见,我无法更新 glOrtho。如果它现在几乎可以调整大小,我的意思是它应该设置宽度,但高度保持在启动时的状态,并且它只查看部分纹理女巫在启动时被固定。我的意思是,glOrtho 是问题
    • 其实我现在可以回忆起initOpenGL。我只需要在 openGL 初始化时添加`glLoadIdentity();`。谢谢你的帮助。也许你知道如何设置我的 NSOpenGLView 位置,它总是垂直对齐到中心?
    【解决方案2】:

    如果您使用的是 NSOpenGLView,那么有一个名为 reshape 的方法会在视图被重塑时被调用。在那里,您应该调用glViewport 并相应地更新大小。

    【讨论】:

      【解决方案3】:

      如果有人遇到这个问题,只需在 OpenGL 初始化的开头添加glLoadIdentity();

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-04
        相关资源
        最近更新 更多