【问题标题】:Ended up with left handed coordinate system OpenGL but I need right handed以左手坐标系OpenGL结束,但我需要右手
【发布时间】:2017-01-05 21:19:37
【问题描述】:

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

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

PersProjection

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;
}

查看投影计算

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;
}

【问题讨论】:

标签: c++ opengl 3d coordinate-systems perspectivecamera


【解决方案1】:

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

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

如果您在glFrustum 的文档中查找相应的矩阵元素,则该矩阵元素为:

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

在你的符号中,即:

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

【讨论】:

  • 在发布之前,我在玩减号,当然我发布了错误的代码,感谢您指出问题所在。我根据this formula更新了我的代码,(整篇文章是here)。仍然没有运气。有什么建议我应该检查我的代码的哪一部分?
  • 您更改问题的方式使已发布的答案无效,这并不是本网站的真正想法。无论如何,您链接的矩阵不是通常与 OpenGL 一起使用的投影矩阵。这就是为什么您的坐标系是左撇子的原因。只需使用我链接的那个,它就可以工作。
  • 你是对的。对于那个很抱歉。您能否发布有关您的公式的答案,以便我接受?
猜你喜欢
  • 1970-01-01
  • 2020-11-11
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多