我现在正在做一个三维电子地图的项目。项目中需要用到通过键盘按键来周游整个地图的功能。上下键代表视点前进和后退,左右键代表视点旋转。
在程序中我使用透视投影。我得理解是通过修改投影矩阵来达到该目的。初始的投影方向是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);如果没有旋转感觉前进后退效果还行,但是进行了旋转后,前进和后退没有达到预期的效果,也就是没有按照预期的旋转后的视点方向前进和后退,郁闷,大家视点周游地图是怎么做的,难道我得理解不对?大侠救救我!

解决方案 »

  1.   

    有意思,我一般是这么用的。
    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初学者。
      

  2.   

    不能通过改变投影矩阵来实现,要改变Model_View 矩阵。
      

  3.   

    D3D是转换MATRIXD3D使用glLookAt或者glRotatef
      

  4.   

    你把你的联系方式告诉我,QQ或者E-mail我发给你个小例子,里边有封装了相关操作的类!
    我的Email:[email protected]
    要知道当前视点,前进的方向!你看了就明白了!
      

  5.   

    我得email:[email protected]谢谢!!