glut opengl 怎样获得当前窗口的大小
答案:2 悬赏:50 手机版
解决时间 2021-11-10 17:09
- 提问者网友:不爱我么
- 2021-11-10 07:10
glut opengl 怎样获得当前窗口的大小
最佳答案
- 五星知识达人网友:不想翻身的咸鱼
- 2021-11-10 08:22
请参考这个教程:http://blog.csdn.net/nauty_li/article/details/2227143。
Hoxily说:我是Hoxily。
------------------------------------------------
GLUT定义了当窗口大小改变时哪一个函数应该被调用。此外,这个函数还会在窗口初次被创建时调用,保证初始化窗口不是正方形的时候渲染也不会变形出错。
这个函数是glutReshapeFunc()。
void glutReshapeFunc(void(*func)(int width,int height));
参数:
func: 指负责设置正确投影的函数的名称。
----------------------------------
因此我们必须做的第一件事是回到main()函数。在上一章的代码里加入对glutReshapeFunc()的调用,让我们把负责窗口尺寸的函数叫做changeSize。现在的代码如下。
void main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow("3D Tech- GLUT Tutorial");
glutDisplayFunc(renderScene);
// Here is our new entry in the main function
glutReshapeFunc(changeSize);
glutMainLoop();
}
下面我们需要做的就是定义函数changeSize()。从glutReshapeFunc()函数的声明可以看到,changSize()函数有两个形参。。这两个参数代表新的窗口高度和宽度。
void changeSize(int w, int h) {
// 防止除数即高度为0
// (你可以设置窗口宽度为0).
if(h == 0)
h = 1;
float ratio = 1.0* w / h;
// 单位化投影矩阵。
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// 设置视口大小为增个窗口大小
glViewport(0, 0, w, h);
// 设置正确的投影矩阵
gluPerspective(45,ratio,1,1000);
//下面是设置模型视图矩阵
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0,0.0,5.0, 0.0,0.0,-1.0,0.0f,1.0f,0.0f);
}
----------------------------------------
Hoxily说:总之,传给glutReshapeFunc()的这个回调函数由你自己书写,函数原型如:FunctionName(int width, int height)。从这里可以看出改变窗口大小后的宽和高就是width和height。
Hoxily说:就是这样。我也没试过,你试试。参考资料:http://blog.csdn.net/nauty_li/article/details/2227143
Hoxily说:我是Hoxily。
------------------------------------------------
GLUT定义了当窗口大小改变时哪一个函数应该被调用。此外,这个函数还会在窗口初次被创建时调用,保证初始化窗口不是正方形的时候渲染也不会变形出错。
这个函数是glutReshapeFunc()。
void glutReshapeFunc(void(*func)(int width,int height));
参数:
func: 指负责设置正确投影的函数的名称。
----------------------------------
因此我们必须做的第一件事是回到main()函数。在上一章的代码里加入对glutReshapeFunc()的调用,让我们把负责窗口尺寸的函数叫做changeSize。现在的代码如下。
void main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow("3D Tech- GLUT Tutorial");
glutDisplayFunc(renderScene);
// Here is our new entry in the main function
glutReshapeFunc(changeSize);
glutMainLoop();
}
下面我们需要做的就是定义函数changeSize()。从glutReshapeFunc()函数的声明可以看到,changSize()函数有两个形参。。这两个参数代表新的窗口高度和宽度。
void changeSize(int w, int h) {
// 防止除数即高度为0
// (你可以设置窗口宽度为0).
if(h == 0)
h = 1;
float ratio = 1.0* w / h;
// 单位化投影矩阵。
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// 设置视口大小为增个窗口大小
glViewport(0, 0, w, h);
// 设置正确的投影矩阵
gluPerspective(45,ratio,1,1000);
//下面是设置模型视图矩阵
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0,0.0,5.0, 0.0,0.0,-1.0,0.0f,1.0f,0.0f);
}
----------------------------------------
Hoxily说:总之,传给glutReshapeFunc()的这个回调函数由你自己书写,函数原型如:FunctionName(int width, int height)。从这里可以看出改变窗口大小后的宽和高就是width和height。
Hoxily说:就是这样。我也没试过,你试试。参考资料:http://blog.csdn.net/nauty_li/article/details/2227143
全部回答
- 1楼网友:胯下狙击手
- 2021-11-10 09:43
在changesize函数里面获取
int currentWindowSizeW;
int currentWindowSizeH;
void ChangeSize(int w, int h)
{
currentWindowSizeW = w;
currentWindowSizeH = h;
}
int main(int argc, char** agcv)
{
//...
glutReshapeFunc(ChangeSize);
//...
}
int currentWindowSizeW;
int currentWindowSizeH;
void ChangeSize(int w, int h)
{
currentWindowSizeW = w;
currentWindowSizeH = h;
}
int main(int argc, char** agcv)
{
//...
glutReshapeFunc(ChangeSize);
//...
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯