3D-рендеринг программного обеспечения с VB6 - PullRequest
2 голосов
/ 12 ноября 2009

Я студент IT, и мне нужно сделать проект в VB6, я думал сделать 3D Software Renderer, но я не знаю, с чего начать, я нашел несколько уроков, но хочу что-то, что углубится с математикой и алгоритмами мне понравится то, что показывает, как сделать 3D-преобразования, камера, свет, затенение ...

Неважно, какой язык программирования используется, мне просто нужны ресурсы, которые точно показывают, как это сделать.

Так что я просто хочу знать, где найти некоторые ресурсы, или вы можете показать мне некоторый исходный код и сказать, с чего начать.

Или, если у кого-то из вас есть идея для проекта VB6.

Спасибо.

Ответы [ 8 ]

5 голосов
/ 12 ноября 2009

Я не согласен с предыдущими постами, 3D рендеринг на самом деле довольно прост. Однако высокое качество трехмерного рендеринга сложно.

  1. Получите кучу трехмерных данных, треугольники самые простые.
  2. Узнайте об однородных координатах и ​​великолепной матрице 4x4 для преобразований.
  3. Определение камеры по положению и повороту (выражается в матрице 4x4).
  4. Преобразуйте свою трехмерную геометрию с помощью этой камеры.
  5. Выполните перспективное деление и масштабирование для вашего окна. Это преобразует ваши 3D данные в 2D.
  6. Отображение данных в формате 2D.

Теперь вы потеряете буфер глубины, поэтому вначале придерживайтесь каркасов. : -)

Не слушай этих поговорок, выходи и развлекайся!

3 голосов
/ 13 ноября 2009

Много лет назад я сделал рендерер с заштрихованными треугольниками, который использовал библиотечные вызовы для рисования треугольников. Это довольно наивный подход, но вы сможете достичь того же результата, используя VB6. Я получил всю математику и технику из «Принципов и практики компьютерной графики» Фоли и соавторов. Некоторые части уже устарели, но я думаю, что вы найдете его очень полезным для этого проекта, и его можно купить, например, в 2-х руках по разумным ценам в Amazon.

Один простой подход может быть:

  1. Считать файл модели в виде треугольников
  2. Преобразование каждого треугольника с использованием матриц для учета положения камеры
  3. Проецируйте треугольные точки на 2D
  4. Нарисуйте 2D треугольник (вероятно с использованием GDI )

Это относится к просмотру каркаса. Чтобы распространить это на скрытое удаление поверхности, вам необходимо определить, какие треугольники находятся впереди. Два возможных способа:

  1. Z-порядок, сортирующий треугольники и рисующий самые дальние от камеры. Это просто, но неэффективно, если много треугольников и может дать эффект перекрывающихся треугольников, когда порядок не совсем правильный. Вы также должны решить, как сортировать треугольники - например, по центру, по экстентам ...
  2. Использование программного буфера глубины. Это даст лучшие результаты, но больше работы для реализации. Вам придется написать собственный код для рисования треугольника, поэтому вы не можете полагаться на GDI. См. Алгоритм линии Брезенхама и соответствующие алгоритмы для выполнения заполненных треугольников, чтобы узнать, как это сделать.

После этого вам также потребуется некоторое затенение в зависимости от освещения. Расчеты описаны в принципах и практике компьютерной графики. Для простого затенения вы можете придерживаться рисования треугольников, используя gdi, но если вы хотите сделать gouraud или phong shading, значения цвета варьируются по треугольнику. Одним из способов решения этой проблемы является подразделение треугольника на более мелкие треугольники, но это неэффективно и не даст очень хороших результатов. Лучше было бы нарисовать треугольники самостоятельно, как требуется выше для буфера глубины программного обеспечения.

Хорошим расширением будет поддержка примитивов, отличных от треугольников. Основной подход заключается в разделении примитивов на треугольники, когда вы их читаете.

Удачи - может быть интересный проект.

1 голос
/ 12 ноября 2009

EGL25 от Erkan Sanli - это быстрый рендер с открытым исходным кодом VB 6, который может рендерить, вращать, анимировать и т. Д. Сложные твердые фигуры, состоящие из тысяч полигонов. Просто вызовы API Windows - нет DirectX, нет OpenGL.

alt text

VBMigration.com выбрал EGL25 в качестве высококачественного проекта с открытым исходным кодом VB6 для демонстрации своего инструмента обновления с VB6 до VB.Net.

1 голос
/ 12 ноября 2009

Существует список 3D-движка , в котором перечислены три механизма в чистом базовом (оксюморон) + исходный код, и один из них находится в Visual Basic (Dex3D)

DeX3D - 3D движок с открытым исходным кодом полностью закодирован в Visual Basic от Джерри Чен (-onlyuser@hotmail.com).

  • Gouraud shading
  • Прозрачность
  • Запотевание
  • Омни и точечные светильники
  • Иерархические сетки
  • Поддержка файлов 3D Studio
  • Системы частиц
  • Сегменты кривой Безье
  • 2,5 D текст
  • Источник Visual Basic

Больше информации, скриншоты и источник можно найти на Dex3D Домашняя страница. (<= Мертвая ссылка) </p>

1 голос
/ 12 ноября 2009

VB6 - не самый подходящий язык для математики и трехмерной графики, и, учитывая, что вы также не обладаете знаниями по этому предмету, я бы рекомендовал вам выбрать что-то другое (и более простое).

Поскольку это Visual Basic, вы можете попробовать что-то более ориентированное на форму, то есть исходное намерение языка.

0 голосов
/ 12 ноября 2009

Я думаю, что вы можете пойти двумя путями: пойти по пути Direct X и использовать DirectX 8 с поддержкой VB 5-6. Я нашел страницу http://www.gamedev.net/reference/articles/article1308.asp

Вы всегда можете написать группу двигателей, но для этого вам понадобится некоторая базовая линейная алгебра, как предлагает Фрэнк Крюгер.

0 голосов
/ 12 ноября 2009

Программный рендерер - очень сложный проект, и язык VB6 вообще не указан (для такой задачи, как эта, С ++ подходит ...), в любом случае я могу предложить вам несколько замечательных книг, которые я использовал:

  1. Шейдеры: http://wiki.gamedev.net/index.php/D3DBook:Introduction_%28Volume%29
  2. Math: 3D Math Primer для графики и разработки игр

Есть еще 2 книги. Даже если они предназначены для VB.NET, вы можете найти полезный код:

  1. .NET Программирование игр с DirectX 9.0
  2. Начало программирования игр .NET в VB .NET
0 голосов
/ 12 ноября 2009

3D-рендеринг программного обеспечения в целом является довольно сложным, если вы никогда не делали этого раньше. Я бы предложил что-то меньшее - например, просто сделать трехмерную часть и использовать линии для рендеринга ИЛИ просто написать рендерер с заштрихованным треугольником (который в любом случае лежит в основе 3D-рендеринга).

Что-то немного проще, чем пытаться написать полноценный 3D-рендеринг программного обеспечения с первого взгляда - особенно в VB.

...