Я следил за серией учебников по Game Engine, которую курировал YouTuber 'thebennybox', и столкнулся с проблемой. Предполагается, что кубовая сетка должна отображаться на экране, и в этом конкретном эпизоде цель состоит в том, чтобы исправить растяжение объекта из-за нечетких пропорций. Однако, когда я попытался реализовать тот же код, куб разгоняется целиком. Я просматривал материал несколько раз, так что проблемы в других частях кода, или я еще не заметил свою ошибку в репликации кода [из этого видео: https://youtu.be/cgaixZEaDCg].
Код перед реализацией матрицы:
public void render()
{
shader.bind();
shader.setUniform("transform", transform.getTransformation());
mesh.draw();
}
и после:
public void render()
{
shader.bind();
shader.setUniform("transform", transform.getProjectedTransformation());
mesh.draw();
}
Эта новая процедура преобразования "getPerspectiveTransformation ()" выглядит так
это:
public Matrix4f getProjectedTransformation()
{
Matrix4f transformationMatrix = getTransformation();
Matrix4f projectionMatrix = new Matrix4f().initProjection(fov, width, height, zNear, zFar);
return projectionMatrix.mul(transformationMatrix);
}
И впоследствии вызывает 'MatProjection' для Matrix4f, а также обычную процедуру 'getTransformation', которая, как я знаю, работает в одиночку:
public Matrix4f initProjection(float fov, float width, float height, float zNear, float zFar)
{
float ar = width/height;
float tanHalfFOV = (float)Math.tan(Math.toRadians(fov / 2));
float zRange = zNear - zFar;
m[0][0] = 1.0f / (tanHalfFOV * ar); m[0][1] = 0; m[0][2] = 0; m[0][3] = 0;
m[1][0] = 0; m[1][1] = 1.0f / tanHalfFOV; m[1][2] = 0; m[1][3] = 0;
m[2][0] = 0; m[2][1] = 0; m[2][2] = (-zNear - zFar)/zRange; m[2][3] = 2 * zFar * zNear / zRange;
m[2][0] = 0; m[2][1] = 0; m[2][2] = 1; m[2][3] = 0;
return this;
}
Я не верю, что проблема заключается в порядке, в котором две Матрицы умножаются и возвращаются (третий блок кода), и я не смог определить, в какой части кода проблема Происходит от.
Если у вас есть совет по отладке или вы считаете, что проблема в элементарных фрагментах кода, которые я не включил, я предоставлю любые другие блоки.
РЕДАКТИРОВАТЬ: я использую OpenGL для рендеринга и JFrame для оконного менеджера.