我现在正在做一个三维电子地图的项目。项目中需要用到通过键盘按键来周游整个地图的功能。上下键代表视点前进和后退,左右键代表视点旋转。
在程序中我使用透视投影。我得理解是通过修改投影矩阵来达到该目的。初始的投影方向是z轴负方向
然后在键盘响应函数对应的地方,修改透视投影矩阵。
例如:
前进按钮
glMatrixMode(GL_PROJECTION);
glTranslatef(0.0,0.0,1.0); //让视点前进
glMatrixMode(GL_MODEVIEW);旋转按钮
glMatrixMode(GL_PROJECTION);
glRotatef(5.0,0.0,1.0,0.0); //让视点前进
glMatrixMode(GL_MODEVIEW);如果没有旋转感觉前进后退效果还行,但是进行了旋转后,前进和后退没有达到预期的效果,也就是没有按照预期的旋转后的视点方向前进和后退,郁闷,大家视点周游地图是怎么做的,难道我得理解不对?大侠救救我!
在程序中我使用透视投影。我得理解是通过修改投影矩阵来达到该目的。初始的投影方向是z轴负方向
然后在键盘响应函数对应的地方,修改透视投影矩阵。
例如:
前进按钮
glMatrixMode(GL_PROJECTION);
glTranslatef(0.0,0.0,1.0); //让视点前进
glMatrixMode(GL_MODEVIEW);旋转按钮
glMatrixMode(GL_PROJECTION);
glRotatef(5.0,0.0,1.0,0.0); //让视点前进
glMatrixMode(GL_MODEVIEW);如果没有旋转感觉前进后退效果还行,但是进行了旋转后,前进和后退没有达到预期的效果,也就是没有按照预期的旋转后的视点方向前进和后退,郁闷,大家视点周游地图是怎么做的,难道我得理解不对?大侠救救我!
glColor3f(1.0f,1.0f,1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Clear The Screen AndThe Depth Buffer
glLoadIdentity();
// Reset The View
GLfloat xtrans = -xpos;
GLfloat ztrans = -zpos;
GLfloat ytrans = -walkbias-0.25f+fltquatheight;
GLfloat sceneroty = -yrot;
ytrans = -ypos;//new
glRotatef(lookupdown,1.0f,0,0);
glRotatef(sceneroty,0,1.0f,0);
glTranslatef(xtrans, ytrans, ztrans);一般用来绘制二维信息时才用到glMatrixMode函数
我也是OpenGL初学者。
我的Email:[email protected]
要知道当前视点,前进的方向!你看了就明白了!