Я пытаюсь работать в LWJGL, чтобы отобразить простой квадратик с использованием собственных матриц. Я смотрел вокруг на некоторое время и нашел несколько реализаций в перспективе матрицы, эти два, в частности:Конвейер рендеринга OpenGL: Перспективная матрица
[cot(fov/2)/a 0 0 0]
[0 cot(fov/2) 0 0]
[0 0 -f/(f-n) -1]
[0 0 -f*n/(f-n) 0]
и:
[cot(fov/2)/a 0 0 0]
[0 cot(fov/2) 0 0]
[0 0 -(f+n)/(f-n) -1]
[0 0 -(2*f*n)/(f-n) 0]
Оба они обеспечивают тот же эффект, как и ожидалось (GOT их от here и here, соответственно). Проблема заключается в моем понимании того, как умножить это на матрицу модели, затем на вершину, а затем делить каждое значение x, y и z на его значение w дает координату экрана. Более конкретно, если я умножу любую из них на матрицу модели, то по вершине (10, 10, 0, 1) она дает w = 0. Это само по себе является большим ударом в лицо. Я заключу, что либо матрицы ошибаются, либо я чего-то не хватает. В моей реальной тестовой программе вершины даже не заканчиваются на экране, даже если положение камеры (0,0,0) и без вращения сделает это так. Я даже пробовал много разных значений z, положительных и отрицательных, чтобы убедиться, что это просто плоскость отсечения. Я что-то упустил?
EDIT: После большой проверки я сузил проблему, с которой я столкнулся. Самая большая проблема заключается в том, что ось z не отображается повторно в диапазон, который я указываю (от n до f). Любой объект просто немного увеличивает или уменьшает масштаб, когда я переводю его вдоль оси z, а затем выскакивает из существования, когда он перемещается за пределы диапазона [-1, 1]. Я думаю, что это еще больше смущает меня. Я установил свой дальний самолет до 100, а мой приблизился к 0,1, и он ведет себя не что иное, как.
Я уже умножать в том порядке, в моей вершинных шейдеров.Спасибо за предложение. – CoderTheTyler