gpt4 book ai didi

c++ - 相机/ View 矩阵

转载 作者:行者123 更新时间:2023-11-30 01:53:56 24 4
gpt4 key购买 nike

通读这篇文章 (http://3dgep.com/?p=1700) 后,似乎暗示我的 View 矩阵有误。以下是我如何计算 View 矩阵;

Mat4 Camera::Orientation() const
{
Quaternion rotation;
rotation = glm::angleAxis(mVerticalAngle, Vec3(1.0f, 0.0f, 0.0f));
rotation = rotation * glm::angleAxis(mHorizontalAngle, Vec3(0.0f, 1.0f, 0.0f));

return glm::toMat4(rotation);
}


Mat4 Camera::GetViewMatrix() const
{
return Orientation() * glm::translate(Mat4(1.0f), -mTranslation);
}

据推测,我要反转这个结果矩阵,但到目前为止我还没有这样做,而且到目前为止它的工作非常出色,而且我也没有在管道中进行任何反转。我在这里缺少什么吗?

最佳答案

您已经进行了反转。 View 矩阵是定位相机的模型变换的逆矩阵。这是:

ModelCamera = Translation(position) * Rotation

所以反过来是:

ViewMatrix = (Translation(position) * Rotation)^-1
= Rotation^-1 * Translation(position)^-1

通过取反偏移来反转翻译:

           = Rotation^-1 * Translation(-position)

这让我们需要反转旋转。我们可以假设旋转是反转的。因此,相机模型的原始旋转是

Rotation^-1 = RotationX(verticalAngle) * RotationY(horizontalAngle)
Rotation = (RotationX(verticalAngle) * RotationY(horizontalAngle))^-1
= RotationY(horizontalAngle)^-1 * RotationX(verticalAngle)^-1
= RotationY(-horizontalAngle) * RotationX(-verticalAngle)

因此,您指定的角度实际上是会旋转相机的倒角。如果增加 horizo​​ntalAngle,相机应该向右转(假设是右手坐标系)。这只是一个定义问题。

关于c++ - 相机/ View 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22619936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com