请方家解释一个绕人的问题:
我在opengl中gltranslate()glRotate()后之后作出几个几何体,这时候采用的是什么最标系呢?(我认为是世界坐标系,如何定义的呢?如何指向?)然后在 OnSize中用gluPerspective()进行透视,请问这时候的视点在哪里,这个视图体的坐标与刚才的三维实体坐标什么对应关系,我不知道他的前两个参数如何对应到几何体上?投影到屏幕又是什么坐标呢???gluLookAt()又是如何理解其坐标呢?
不好意思,我实在讲不清了?其实我在程序中画了几个几何体,然后把其参数以及视图体参数改变了一些,结果不是我所预期的,可能就是这些坐标的关系没有搞清楚吧!请方家详细解释,谢谢!
[email protected]

解决方案 »

  1.   

    1. 你所说的视点是 look at 的 target 还是 眼睛所在位置? Target的位置在平截头体的中心线上。而眼睛的位置是平截头体所在锥形的顶点。
    2. 屏幕相当于平截头体的后裁剪面。所有图像将投影到后裁剪面。
    3. 关于 traslate, rotate。你可以想象有一支笔,具有一个和笔相固定的坐标系。当你使用 translate, roate 的时候你的必将会被移动或者旋转。但是这个时候你所绘制的图形是基于那支笔的局部坐标系的。也就是说当你绘制点 (0,0,0),其实就是那个局部坐标系的原点。如果笔尖和局部坐标系的原点重合,那么你绘制的那个点正好是笔尖的位置。
    4. gluLookAt 很好理解,顾名思义,它是用于定义“看到xxxx地方”这样的动作。前三个浮点数表示眼睛的位置;接下去三个参数是参考点也就是眼睛看的目标;
    最后三个是脑袋顶的方向。这样一个观察的姿态就可以完全被定义了。
    ============================================================================
    http://www.betajin.com/alphasun/index.htm
    DocWizard C++程序文档自动生成工具 | Wave OpenGL 水波与动模拟和显示
      

  2.   

    在如下的代码中:OnSize()中:
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(30.0f, (GLdouble)cx/cy, 1.0f, 200);
    glMatrixMode(GL_MODELVIEW);在Draw()中:
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnable(GL_DEPTH_TEST); glPushMatrix();
    glTranslatef(0.0,0.0,-80);
    // glRotatef(45.0,1.0,1.0,1.0);
    glColor3f(1.0,0.0,0.0);
    auxSolidSphere(20.0); glPushMatrix();
    glColor3f(0.0,1.0,0.0);
    glTranslatef(0.0,0.0,-40);
    // glRotatef(45.0,1.0,0.0,0.0);
    auxWireBox(60.0,40.0,20.0); glPopMatrix();
    glPopMatrix();
    glFinish();
    SwapBuffers(wglGetCurrentDC());
    我取消掉glRotate后看到的是正对的几何体,这时我可以理解视点在原点位置观看,但是我改变gluPerspective(30.0f, (GLdouble)cx/cy, 1.0f, 200);中的角度为60.0f时看到的几何体变大,这时的感觉是视点位置有所改变??(这个角度应该是Xz平面视图体的夹角,如何理解)?加上旋转后,我无法理解视点位置了。这时的视点好像又不在原点位置了??
    还有,如果实现平面的俯瞰,如何用gluLookAt()实现????
      

  3.   

    楼上解释的是移动和旋转操作是以局部坐标系为基准的?这时候的观察视点是不是也随着发生改变???如何确定这样的移动和旋转操作后几何对象的实际位置呢???
    其实我想在实际坐标中统一表达各个几何体的空间位置,如何通过glTranslate以及glTotate实现呢??
    或者说上述例子中的几何体以及正方体的中心位置在世界坐标系中的位置是多少呢??
    (0,0,-80),(0,0,-40)?
    旋转的作用在哪里??为什么改变了最终的显示???
      

  4.   

    你这个可能再VB很难做,用MAPX把,我想你那个因该是GIS吧
      

  5.   

    不是什么项目,只是想搞清楚OpenGL以及vc中的关于这方面的坐标到底是什么关系????
      

  6.   

    glRoate 等变换函数作用与当前的矩阵,当前矩阵的通过 glMatrixMode 选择。
    有如下矩阵类型
    投影矩阵
    模型矩阵
      

  7.   

    找本opengl的书看看,你的问题表明你对这方面没有基本的知识,光靠论坛是搞不定的。
    首先,分清楚模型坐标系和投影坐标系,这可以解决glPerspective的问题。
    其次,在模型坐标系中,glRotate这样的变换是从世界坐标系-模型坐标系。画图时在当前的模型坐标系中考虑你要画的结果。