gpt4 book ai didi

opengl - 使用 SDL 和 OpenGL 调整窗口大小

转载 作者:行者123 更新时间:2023-12-02 03:20:01 25 4
gpt4 key购买 nike

在写这个问题之前,我已经阅读了这个问题:Handling window resizing using OpenGL and SDL 。然而这个问题并没有解决我的问题,因为我使用的是SDL2而不是SDL1.2。但我确实使用OpenGL2。我的完整源代码位于:http://dpaste.com/17BVBP6

我正在编写一个在窗口中显示白色方 block 的程序。但是,我在处理窗口调整大小事件时遇到了麻烦。这是我的调整大小函数:

void resize(int width,int height)
{
if(height<=0) height=1;

glViewport(0,0,(GLsizei)width,(GLsizei)height);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0f,float(width)/float(height),1.0f,100.0f);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

我的主要事件循环:

while( !quit )
{
while( SDL_PollEvent( &e ) != 0 )
{
switch (e.type) {
case SDL_QUIT:
quit=true;
break;
case SDL_WINDOWEVENT_SIZE_CHANGED:
resize(e.window.data1,e.window.data2);
break;
case SDL_KEYDOWN:
switch (e.key.keysym.sym) {
case SDLK_ESCAPE:
quit=true;
break;
default:
break;
}
default:
break;
}
}

render();

update(gWindow);
}

这是我的窗口未调整大小时的情况: Rendering is done properly when not resized

这是我调整大小后的窗口: Rendering is not properly done when resized

这是什么原因造成的?

最佳答案

SDL_WINDOWEVENT_SIZE_CHANGED 不是事件类型,它是 SDL_WINDOWEVENT 的变体。您的事件检查应该类似于

switch(e.type) {
case SDL_WINDOWEVENT:
if(e.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
resize(e.window.data1,e.window.data2);
}
break;

同时删除透视投影设置 - 它与您的绘制不一致,并且在调整大小之前您没有透视设置。

关于opengl - 使用 SDL 和 OpenGL 调整窗口大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49344767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com