【问题标题】:Transform camera position in OpenGL在OpenGL中变换相机位置
【发布时间】:2011-06-06 20:27:05
【问题描述】:

我用 OpenGL 绘制了一个球体,它将被 glRotate()、glScale()、glTranslate() 转换。 如果不自己计算所有变换,如何获得对象的绝对位置?

我需要将相机眼睛位置设置到这一点的坐标。

【问题讨论】:

    标签: c++ opengl 3d transform render


    【解决方案1】:

    使用这些转换时,您正在操纵modelviewmatrix

    获取当前可用的 (http://linux.die.net/man/3/glgetfloatv)

    void glGetFloatv(
    GLenum pname,
    GLfloat * params
    );
    

    例如:

    float modelview[16];
    
    // save the current modelview matrix
    glPushMatrix();
    
    // get the current modelview matrix
    glGetFloatv(GL_MODELVIEW_MATRIX , modelview);
    

    应该得到当前矩阵,将起始向量/顶点/坐标与该矩阵相乘将得到绝对世界坐标。

    编辑:在制作应用程序时,您通常希望控制每个对象的绝对坐标,操作它们,并使用 opengl 转换将它们绘制到定义的位置。

    【讨论】:

      【解决方案2】:

      对象通常在一个坐标系中建模,然后缩放、平移和旋转到您正在构建的世界中。世界坐标是由存储在 ModelView 矩阵中的建模变换变换对象坐标产生的。然而,OpenGL 没有世界坐标的概念。世界坐标纯粹是一个应用程序构造。

      对象坐标由 ModelView 矩阵转换以生成眼睛坐标。

      来自 opengl.org: 9.120 如何找到仅由 ModelView 矩阵变换的顶点坐标?

      获取顶点的眼睛坐标空间值通常很有用(即模型视图矩阵转换的对象空间顶点)。您可以通过检索当前的 ModelView 矩阵并执行简单的向量/矩阵乘法来获得它。

      要获得矩阵,请使用类似的东西

      float fvViewMatrix[ 16 ];

      glGetFloatv( GL_MODELVIEW_MATRIX, fvViewMatrix );

      您可以在此处阅读有关 opengl 转换的更多信息:http://www.opengl.org/resources/faq/technical/transformations.htm

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-18
        • 2019-04-08
        • 1970-01-01
        • 1970-01-01
        • 2010-12-12
        • 2012-11-27
        • 1970-01-01
        • 2011-05-13
        相关资源
        最近更新 更多