Много лет назад я сделал рендерер с заштрихованными треугольниками, который использовал библиотечные вызовы для рисования треугольников. Это довольно наивный подход, но вы сможете достичь того же результата, используя VB6. Я получил всю математику и технику из «Принципов и практики компьютерной графики» Фоли и соавторов. Некоторые части уже устарели, но я думаю, что вы найдете его очень полезным для этого проекта, и его можно купить, например, в 2-х руках по разумным ценам в Amazon.
Один простой подход может быть:
- Считать файл модели в виде треугольников
- Преобразование каждого треугольника с использованием матриц для учета положения камеры
- Проецируйте треугольные точки на 2D
- Нарисуйте 2D треугольник (вероятно с использованием GDI )
Это относится к просмотру каркаса. Чтобы распространить это на скрытое удаление поверхности, вам необходимо определить, какие треугольники находятся впереди. Два возможных способа:
- Z-порядок, сортирующий треугольники и рисующий самые дальние от камеры. Это просто, но неэффективно, если много треугольников и может дать эффект перекрывающихся треугольников, когда порядок не совсем правильный. Вы также должны решить, как сортировать треугольники - например, по центру, по экстентам ...
- Использование программного буфера глубины. Это даст лучшие результаты, но больше работы для реализации. Вам придется написать собственный код для рисования треугольника, поэтому вы не можете полагаться на GDI. См. Алгоритм линии Брезенхама и соответствующие алгоритмы для выполнения заполненных треугольников, чтобы узнать, как это сделать.
После этого вам также потребуется некоторое затенение в зависимости от освещения. Расчеты описаны в принципах и практике компьютерной графики. Для простого затенения вы можете придерживаться рисования треугольников, используя gdi, но если вы хотите сделать gouraud или phong shading, значения цвета варьируются по треугольнику. Одним из способов решения этой проблемы является подразделение треугольника на более мелкие треугольники, но это неэффективно и не даст очень хороших результатов. Лучше было бы нарисовать треугольники самостоятельно, как требуется выше для буфера глубины программного обеспечения.
Хорошим расширением будет поддержка примитивов, отличных от треугольников. Основной подход заключается в разделении примитивов на треугольники, когда вы их читаете.
Удачи - может быть интересный проект.