使用 SDL 和 OpenGL 调整大小 window
Resizing window using SDL and OpenGL
在写这道题之前,我看过题目:Handling window resizing using OpenGL and SDL. However that question does not solve my problem, since I am using SDL2 and not SDL1.2. But I do use OpenGL2. My complete source code is available at: http://dpaste.com/17BVBP6
我正在编写一个程序,在 window 中显示一个白色方块。但是我在处理 window 调整大小时遇到问题 events.Here 是我的调整大小函数:
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);
}
这是我的 window 未调整大小时:
这是我的 window 调整大小后的样子:
这里的问题是什么引起的??
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;
同时删除您的透视投影设置 - 它与您的绘图不一致,并且您在调整大小之前没有透视设置。
在写这道题之前,我看过题目:Handling window resizing using OpenGL and SDL. However that question does not solve my problem, since I am using SDL2 and not SDL1.2. But I do use OpenGL2. My complete source code is available at: http://dpaste.com/17BVBP6
我正在编写一个程序,在 window 中显示一个白色方块。但是我在处理 window 调整大小时遇到问题 events.Here 是我的调整大小函数:
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);
}
这是我的 window 未调整大小时:
这是我的 window 调整大小后的样子:
这里的问题是什么引起的??
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;
同时删除您的透视投影设置 - 它与您的绘图不一致,并且您在调整大小之前没有透视设置。