На мій погляд, найважливішими бітами, щоб зробити сцену OpenGL схожим на сцену PSX, було б переконатися, що фільтрування вимкнено (у PS1 був лише найближчий сусід), і вимкнути буферизацію Z (не було жодної) та візуалізувати ваша сцена з алгоритмом художників.
Освітлення було лише за вершиною, адже насправді не було освітлювальної апаратури, а лише забарвлення вершини, затінене гуру. Освітлення керувалось програмним забезпеченням, щоб ви могли робити все, що завгодно в межах процесорного часу, з яких не було багато запасних для розумних сучасних речей, таких як "освітлення". :) Нам вдалося отримати окуляри в один момент, але, як це було за вершиною, це змусило сцену виглядати блискучою, тому ми її скинули. Нам ніколи не вдалося змусити окулярів працювати зі шкірними сітками як змішування нормалів, а потім їх використання просто зайняло занадто багато часу.
У PS1 також було трохи текстури, і я не впевнений, як би ви це реалізували з OpenGL, але якщо ви переконалися в справжньому досвіді, можливо, просто намагаєтесь зробити розбиття УФ-променів, коли вони біля краю екрана дав би розумне наближення.
Я також рекомендую вам переглянути перетворення вершин: PS1 не мав плавців, тому візуалізація проходила з конвеєрами з фіксованою точкою, це і є причиною тремтливого руху під час відтворення анімації. У вершині було лише стільки позицій, і 16-бітова фіксована точка, це було навіть не так багато позицій. Перегляньте кілька відео YouTube YouTube PS1, щоб отримати уявлення про те, як це вплинуло на гру, http://www.youtube.com/watch?v=RSV4IBa1pMIтут ви бачите, що це означає, що прямі лінії тремтять навколо, коли камера близька до горизонталі. Я думаю, що хорошим способом емуляції цього було б перетворити ваш світ на програмне забезпечення (як PS1) і завжди виводити цілі координати екрана на цілий розмір екрану (що було однією з головних причин того, що поліси тремтіли навколо, вони не вдалося надати пікселів).
EDIT
Переплив текстури був обумовлений тим, що PS1 взагалі не має інтерполяції 3D. Як згадував user712092, афінний рендерінг міг інтерполювати лише в екрані, тому ми закінчилися з нашими діагоналями все неправильно. Це можна реалізувати, увімкнувши noperspective
класифікатори інтерполяції, або емулюючи вручну перетворення сцени та відкидаючи остаточне значення Z у вершині після того, як ви розділили координати екрана x і y на це z значення