小白学opengl之显示回调函数与reshape回调函数
来源:互联网 发布:安卓变声软件 编辑:程序博客网 时间:2024/05/22 12:28
过去一直不理解diplay和reshape回调函数的调用看完下面这个例子会明白,每次reshape其实都会调用display。reshape主要负责重置坐标系统和投影矩阵
#include <iostream>#include <stdlib.h>#include <stdio.h>#include <GL/glut.h>#include <GL/glu.h>using namespace std;void init(){printf("use init\n");glClearColor(0, 0, 0, 0);glShadeModel(GL_FLAT);}void display(){printf("use display\n");glClear(GL_COLOR_BUFFER_BIT);glColor3f(1, 1, 1);glLoadIdentity();gluLookAt(0, 0, 5, 0, 0, 0, 0, 1, 0);//glScalef(1, 2, 1);glutWireCube(1);glFlush();}void reshape(int w, int h){//glViewport(0, 0, (GLsizei)w, (GLsizei)h);printf("width:%d,heigth:%d\n",w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();glFrustum(-1, 1, -1, 1, 1.5, 20);glMatrixMode(GL_MODELVIEW);}int main(int argc, char* argv[]){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(500, 500);glutInitWindowPosition(100, 100);glutCreateWindow("GLdemo");init();glutDisplayFunc(display);glutReshapeFunc(reshape);//glutMouseFunc(mouse);//glutKeyboardFunc(keyboard);//glutMotionFunc(move);//glCreateMenu();glutMainLoop();return 0;}use init
width:500,heigth:500
use display
use display
width:502,heigth:500
use display
width:503,heigth:500
use display
width:505,heigth:500
use display
看终端结果可知,createwindow后 无论 main函数中reshape和display代码顺序如何,都是先调用reshape回调函数后再调用display
#include <iostream>#include <stdlib.h>#include <stdio.h>#include <GL/glut.h>#include <GL/glu.h>using namespace std;void init(){printf("use init\n");glClearColor(0, 0, 0, 0);glShadeModel(GL_FLAT);}void display(){printf("use display\n");glClear(GL_COLOR_BUFFER_BIT);glColor3f(1, 1, 1);glLoadIdentity();gluLookAt(0, 0, 5, 0, 0, 0, 0, 1, 0);//glScalef(1, 2, 1);glutWireCube(1);glFlush();}void reshape(int w, int h){//glViewport(0, 0, (GLsizei)w, (GLsizei)h);printf("width:%d,heigth:%d\n",w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();glFrustum(-1, 1, -1, 1, 1.5, 20);glMatrixMode(GL_MODELVIEW);}int main(int argc, char* argv[]){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(500, 500);glutInitWindowPosition(100, 100);glutCreateWindow("GLdemo");init();glutReshapeFunc(reshape);glutDisplayFunc(display);//glutMouseFunc(mouse);//glutKeyboardFunc(keyboard);//glutMotionFunc(move);//glCreateMenu();glutMainLoop();return 0;}use init
width:500,heigth:500
use display
display回调函数就不会调用两次
#include <iostream>#include <stdlib.h>#include <stdio.h>#include <GL/glut.h>#include <GL/glu.h>using namespace std;void init(){printf("use init\n");glClearColor(0, 0, 0, 0);glShadeModel(GL_FLAT);}void display(){printf("use display\n");glClear(GL_COLOR_BUFFER_BIT);glColor3f(1, 1, 1);glLoadIdentity();gluLookAt(0, 0, 5, 0, 0, 0, 0, 1, 0);//glScalef(1, 2, 1);glutWireCube(1);glFlush();}void reshape(int w, int h){//glViewport(0, 0, (GLsizei)w, (GLsizei)h);printf("width:%d,heigth:%d\n",w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();glFrustum(-1, 1, -1, 1, 1.5, 20);glMatrixMode(GL_MODELVIEW);}int main(int argc, char* argv[]){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(500, 500);glutInitWindowPosition(100, 100);glutCreateWindow("GLdemo");glutReshapeFunc(reshape);glutDisplayFunc(display);init();//glutMouseFunc(mouse);//glutKeyboardFunc(keyboard);//glutMotionFunc(move);//glCreateMenu();glutMainLoop();return 0;}
可以看出init()最先调用,虽然init不是glut里的库函数
#include <iostream>#include <stdlib.h>#include <stdio.h>#include <GL/glut.h>#include <GL/glu.h>using namespace std;void init(){printf("use init\n");glClearColor(0, 0, 0, 0);glShadeModel(GL_FLAT);}void display(){printf("use display\n");glClear(GL_COLOR_BUFFER_BIT);glColor3f(1, 1, 1);glLoadIdentity();gluLookAt(0, 0, 5, 0, 0, 0, 0, 1, 0);//glScalef(1, 2, 1);glutWireCube(1);glFlush();}void reshape(int w, int h){//glViewport(0, 0, (GLsizei)w, (GLsizei)h);printf("width:%d,heigth:%d\n",w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();glFrustum(-1, 1, -1, 1, 1.5, 20);glMatrixMode(GL_MODELVIEW);}int main(int argc, char* argv[]){printf("glutInit\n");glutInit(&argc,argv);printf("glutInitDisplayMode\n");glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);printf("glutInitWindowSize\n");glutInitWindowSize(500, 500);printf("glutInitWindowPosition\n");glutInitWindowPosition(100, 100);printf("glutCreateWindow\n");glutCreateWindow("GLdemo");printf("glutReshapeFunc\n");glutReshapeFunc(reshape);printf("glutDisplayFunc\n");glutDisplayFunc(display);printf("init\n");init();//glutMouseFunc(mouse);//glutKeyboardFunc(keyboard);//glutMotionFunc(move);//glCreateMenu();printf("glutMainLoop\n");glutMainLoop();return 0;}glutInit
glutInitDisplayMode
glutInitWindowSize
glutInitWindowPosition
glutCreateWindow
glutReshapeFunc
glutDisplayFunc
init
use init
glutMainLoop
width:500,heigth:500
use display
0 0
- 小白学opengl之显示回调函数与reshape回调函数
- openGL回调函数
- OpenGL的回调函数
- OpenGL的回调函数
- 应聘与回调函数
- 回调函数与指针
- 接口与回调函数
- 回调函数与钩子。
- 循环与回调函数
- 回调函数之精神
- 回调函数之精神
- android 之 回调函数
- java之回调函数
- 总结之回调函数
- Erlang之回调函数
- lwip之回调函数
- python之回调函数
- java之回调函数
- UIScrollView的属性总结
- XX和OO(南阳oj1159)
- Android之dumpsys
- MySQL建表的几个注意事项
- replica nfl jerseys
- 小白学opengl之显示回调函数与reshape回调函数
- amfphp资料
- 贪心算法的思想
- smartform实现分页
- vim中的命令
- Hibernate2查询视图时,数据库返回多条纪录,封装后的对象却都是一样的问题
- 我的博客今天开通啦
- 实例化,执行,初始化,销毁bean对象
- 北邮VHDL数电实验—电子沙漏