Objective c 更新NSOpenGLView大小
我想在纹理大小更改时更新NSOpenGLView窗口。没关系。发生这种情况时,我会注册事件,但无法调整OpenGLView的大小。正在更改的值开关为Objective c 更新NSOpenGLView大小,objective-c,xcode,macos,cocoa,opengl,Objective C,Xcode,Macos,Cocoa,Opengl,我想在纹理大小更改时更新NSOpenGLView窗口。没关系。发生这种情况时,我会注册事件,但无法调整OpenGLView的大小。正在更改的值开关为w和h -(void)initOpenGL { NSSize size = {w, h}; [self setFrameSize:size]; NSOpenGLContext *glcontext; glcontext = [self openGLContext]; [glcontext makeCurrentContext]; glMatrixMo
w
和h
-(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视图变黑,不再工作。您可能需要调用[glcontext update]
和glViewport(0,0,oglWidth,oglHeight)
调整视图大小的变化。您可能需要调用[glcontext update]
和glViewport(0,0,oglWidth,oglHeight)
调整视图大小的变化。如果您使用的是NSOpenGLView,则有一个名为重塑的方法,在重塑视图时会调用该方法。在这里,您应该调用glViewport
,并相应地更新大小。如果您使用的是NSOpenGLView,则有一个名为重塑的方法,在重塑视图时会调用该方法。在那里,您应该调用glViewport
并相应地更新大小。如果有人遇到此问题,只需添加glLoadIdentity()代码>在OpenGL初始化开始时。如果有人遇到此问题,只需添加glLoadIdentity()代码>在OpenGL初始化开始时。我试过了。也许我不知道如何使用它,但在函数中,当大小发生变化时,我添加了[glcontext update]
,witch会运行,但没有任何功能。它不能正常工作。我猜这是因为glOrtho是在程序启动时描述的,在以后调整大小时不会被编辑。但正如我所见,我无法更新格洛托。如果它现在的大小几乎可以调整,我的意思是它设置了它应该设置的宽度,但高度保持在启动时的状态,并且它只查看启动时显示的一部分纹理。我的意思是,glOrtho是个问题,实际上我现在可以回忆起initOpenGL
。我只需要添加'glLoadIdentity();`在openGL初始化时。谢谢你的帮助。也许你知道如何设置我的NSOpenGLView位置,使其始终与中心垂直对齐?我试过了。也许我不知道如何使用它,但在函数中,当大小发生变化时,我添加了[glcontext update]
,witch会运行,但没有任何功能。它不能正常工作。我猜这是因为glOrtho是在程序启动时描述的,在以后调整大小时不会被编辑。但正如我所见,我无法更新格洛托。如果它现在的大小几乎可以调整,我的意思是它设置了它应该设置的宽度,但高度保持在启动时的状态,并且它只查看启动时显示的一部分纹理。我的意思是,glOrtho是个问题,实际上我现在可以回忆起initOpenGL
。我只需要添加'glLoadIdentity();`在openGL初始化时。谢谢你的帮助。也许你知道如何设置我的NSOpenGLView位置,使其始终与中心垂直对齐?