Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 更新NSOpenGLView大小_Objective C_Xcode_Macos_Cocoa_Opengl - Fatal编程技术网

Objective c 更新NSOpenGLView大小

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

我想在纹理大小更改时更新NSOpenGLView窗口。没关系。发生这种情况时,我会注册事件,但无法调整OpenGLView的大小。正在更改的值开关为
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位置,使其始终与中心垂直对齐?