【问题标题】:OpenGL, model matrix as no rotation/translation/scaleOpenGL,模型矩阵没有旋转/平移/缩放
【发布时间】:2013-09-09 10:31:25
【问题描述】:

我正在玩 opnegl(旧的,对不起现代的 opengl 家伙),我正在尝试理解矩阵并将glRotatef、glTranslatef 等替换为glLoadMatrixf。

我不明白如何设置一个不旋转、不平移、不缩放的矩阵。我以为我可以使用单位矩阵,但它不起作用。

我想要一个这样写的矩阵:

glPushMatrix();
{
    drawMyCube();
}
glPopMatrix();

相当于写:

glPushMatrix();
{
    glLoadMatrixf( myCubeTransform.getTranspose() );
    drawMyCube();
}
glPopMatrix();

如果我有类似的东西:

/* 1: */ // glLoadMatrixf( myCubeTransform.getTranspose() );
/* 2: */ // glLoadIdentity();

首先我想使用 myCubeTranform Matrix4 类(我使用的是行主顺序矩阵类,所以我必须 getTranspose() 来匹配 opengl 列主顺序)但它不起作用,所以我使用glLoadIdentity 确保不会弄乱我的 Matrix4 类(矩阵代码中的一些错误?)并且.. 它也不起作用。

所以我的问题是:如何设置一个没有平移、没有旋转、没有缩放的变换矩阵?

“不起作用”是指我的立方体不在原点(我想要的位置)。实际上,我根本看不到它(可能是在视锥体之外绘制的?)

【问题讨论】:

    标签: opengl matrix transform


    【解决方案1】:

    glLoadMatrix 将替换矩阵堆栈顶部的内容。这意味着,它将消除您以前可能做过的视图设置。您必须做出选择:要么自己实现视图部分,要么在模型转换上预乘它。或者(出于学习目的)使用 glMultMatrix 而不是您现在拥有 glLoadMatrix 的位置。

    【讨论】:

    • 所以只有当我拥有所有转换堆栈(或者如果它是第一个堆栈)时,我才能使用 glLoadMatrix .. 否则我必须使用 glMultMatrix .. 好的。而从学习现代 gl 的角度来看,什么是最好的?
    • 只是为了解决这个问题:OpenGL矩阵堆栈!=转换层次结构堆栈。尽管它们通常以某种方式使用,但其中一个反映了另一个。无论如何,如果您想使用现代 OpenGL,您可以使用 GLM、Eigen 或 linmath.h 之类的库来将转换组合构建为矩阵。每次转换 heirachy 分支时,您都会制作一个副本。您作为制服传递的最终矩阵。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多