gpt4 book ai didi

c++ - 以左手坐标系 OpenGL 结束,但我需要右手

转载 作者:太空宇宙 更新时间:2023-11-04 13:12:30 24 4
gpt4 key购买 nike

所以我开始制作自己的引擎,并让我的 Z 轴指向远离我的相机的方向。不知道为什么,我关注了this tutorial差不多。

我会发布我的相机的persprojection View 计算,请评论我应该发布哪些其他代码,我会更新我的帖子。

个人投影

void Camera::setPerspective(float width, float height, float nearZ, float farZ, float angleDeg) {
perspectiveTrans.toZero();

float ar = width / height;

angleDeg = Math3D::ToRadian(angleDeg);

perspectiveTrans(0, 0) = 1.0f / (ar * tanf(angleDeg / 2.0f));
perspectiveTrans(1, 1) = 1.0f / tanf(angleDeg / 2.0f);
perspectiveTrans(2, 2) = (-nearZ - farZ) / (nearZ - farZ);
perspectiveTrans(2, 3) = (2.0f * farZ * nearZ) / (nearZ - farZ);
perspectiveTrans(3, 2) = 1.0f;
}

View 投影计算

Matrix4x4f Camera::getViewProjection() {
Matrix4x4f cameraRotationTrans(MatrixType::IDENTITY);

Vector3f N = target;
N.normalize();
Vector3f U = up;
U.normalize();
U = U.cross(target);
Vector3f V = N.cross(U);

cameraRotationTrans.setRow(0, Vector4f(U, 0));
cameraRotationTrans.setRow(1, Vector4f(V, 0));
cameraRotationTrans.setRow(2, Vector4f(N, 1));

Matrix4x4f cameraTranslationTrans(MatrixType::IDENTITY);
cameraTranslationTrans.setCol(3, Vector4f(-position, 1));

return perspectiveTrans * cameraRotationTrans * cameraTranslationTrans;
}

最佳答案

你在这个表达式中缺少一个减号:

perspectiveTrans(2, 3) = (2.0f * nearZ * farZ) / -(nearZ - farZ);

如果您在 glFrustum 的文档中查找相应的矩阵元素,这个矩阵元素是:

- (2 * far * near / (far - near)

在您的记法中,即:

perspectiveTrans(2, 3) = (-2.0f * nearZ * farZ) / -(nearZ - farZ);

关于c++ - 以左手坐标系 OpenGL 结束,但我需要右手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39213092/

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