На мой взгляд, наиболее важные элементы, которые должны сделать сцену OpenGL похожей на сцену PSX, - это убедиться, что фильтрация отключена (у PS1 был только ближайший сосед), отключить буферизацию Z (там не было) и выполнить рендеринг. Ваша сцена с алгоритмами художников.
Освещение было только на одну вершину, на самом деле не было никакого осветительного оборудования, только раскраска вершин gouraud затенена. Освещение было программно управляемым, поэтому вы могли делать все что угодно в пределах времени процессора, из которого не было много свободного места для умных продвинутых вещей, таких как «освещение». :) В какой-то момент нам удалось получить зеркальное отражение, но, так как это было для каждой вершины, это сделало сцену блестящей, поэтому мы ее отбросили. Нам никогда не удавалось заставить зеркально работать с сетчатыми сетками в качестве нормалей, а затем их использование заняло слишком много времени.
У PS1 также было небольшое плавание текстур, я не уверен, как бы вы реализовали это с OpenGL, но если вы после подлинного опыта, возможно, просто пытаетесь разбить UV, когда они находятся у края экрана даст разумное приближение.
Я также рекомендую вам взглянуть на преобразования вершин: у PS1 не было поплавков, поэтому рендеринг выполнялся с конвейерами с фиксированной запятой, это является причиной дрожания при воспроизведении анимации. В 16-битной фиксированной точке может быть только столько позиций, в которых может находиться вершина, это даже не так много позиций. несколько видео на YouTube для PS1, чтобы понять, как это повлияло на игру. Здесь http://www.youtube.com/watch?v=RSV4IBa1pMIВы можете видеть здесь, что это означает, что прямые линии дрожат, когда камера находится близко к горизонтали. Я думаю, что хорошим способом эмулировать это было бы преобразование вашего мира в программном обеспечении (как это делала PS1) и всегда выводить целые числовые координаты экрана в размер эмулируемого экрана (что было одной из основных причин, по которым полисы дрожали вокруг, они не может быть визуализировано в подпиксели).
РЕДАКТИРОВАТЬ
Плавание текстуры было связано с тем, что PS1 вообще не имел 3D-интерполяции. Как упомянуто пользователем712092, аффинный рендерер мог интерполировать только в пространстве экрана, поэтому мы ошиблись с нашими диагоналями. Это может быть реализовано включением noperspective
ваших квалификаторов интерполяции или имитацией ручного преобразования сцены и отбрасыванием окончательного значения Z в вашей вершине после того, как вы разделите экранные координаты x и y на это значение z