如何缩放使用 glm::lookat() 获得的矩阵?

Posted

技术标签:

【中文标题】如何缩放使用 glm::lookat() 获得的矩阵?【英文标题】:How to scale a matrix obtained with glm::lookat()? 【发布时间】:2015-02-11 16:06:52 【问题描述】:

我正在尝试创建一个正交视图(与最终透视图分开)。我知道视图的比例、位置、向上向量以及它正在查看的点。所以似乎最简单的方法是简单地使用glm::lookAt() 来创建视图矩阵,除非无法指定比例。

有没有办法通过glm::lookAt() 引入缩放?我认为不可能缩放由lookAt制作的矩阵,因为需要首先进行缩放以获得“预期”结果(对象看起来更大或更小,例如放大或缩小相机)。不过我可能错了。

如果在使用lookAt时无法实现,是否有一系列等效的glm函数?

【问题讨论】:

你试过正常的缩放矩阵吗? 【参考方案1】:

就矩阵变换而言,您可以从一个比例开始,然后应用glm::lookAt() 矩阵。我对 glm 不熟悉,但我以前用过 GLUT。您应该能够进行这样的矩阵乘法(我假设您已经将所有内容转换为场景空间,定义了所有变量等)


    TransformedVector = glm::lookAt(cameraPosition,
                                    cameraTarget,  
                                    upVector) * 
                        glm::scale(scalingFactor, 
                                  scalingFactor, 
                                  scalingFactor) * 
                        OriginalVector;

如果这种行为异常,请尝试交换 glm::lookAt()glm::scale() 顺序。

【讨论】:

以上是关于如何缩放使用 glm::lookat() 获得的矩阵?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 LookAt 转换获得正确的向上向量?

glm lookAt 和矩阵变换产生奇怪的行为

当 z <= 0 时 glm::lookAt 垂直相机翻转

绕轴旋转相机?

相机 旋转

相机 旋转