Закончился левой системой координат OpenGL, но мне нужно правша

Поэтому я начал делать свой собственный двигатель, и моя ось Z была направлена ​​в сторону от моей камеры. Я не знаю, почему это произошло, я последовал этот урок довольно много.

Я опубликую persprojection а также Посмотреть расчеты моей камеры, пожалуйста, прокомментируйте, какой другой код я должен опубликовать, и я обновлю свой пост.

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

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);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]