2009-11-12 2 views
2

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

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

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

Или если у вас есть идея лучше для проекта VB6.

Спасибо.

+4

Мне просто интересно, почему у вас есть VB6? – bytebender

+0

Какой садистский университет по-прежнему имеет VB6 в своей учебной программе? –

+0

На самом деле я написал статью о внедрении 3D-рендеринга в VB6. Я отправил его на CompuServe навсегда. Если у вас есть доступ к старым форумам CompuServe, вы должны посмотреть его. :-) –

ответ

3

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

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

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

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

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

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

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

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

+0

Спасибо за информацию, я ищу книгу и посмотрю, найду ли я ответы. – Andrei

1

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

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

+0

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

0

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

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

+0

Мне действительно не нужно создавать полноценный 3D-рендеринг программного обеспечения, но, по крайней мере, он должен иметь Camera, lights, shading и transformations. – Andrei

0

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

  1. шейдеры: http://wiki.gamedev.net/index.php/D3DBook:Introduction_%28Volume%29
  2. Math: 3D Math Primer for Graphics and Game Development

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

  1. .NET Game Programming with DirectX 9.0
  2. Beginning .NET Game Programming in VB .NET
+0

Спасибо, много, я знаю, что C++ для этого лучше, но я должен использовать VB6. Я проверю эту книгу. – Andrei

5

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

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

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

Не слушайте этих nay-sayers, выходите и веселитесь!

+0

Да, я обязательно постараюсь это сделать, и я не изменю свое мнение. Я читал обо всем этом, и я хочу найти больше информации. Вы сказали ранее, что вы написали учебник для этого, у вас есть ссылка? – Andrei

+0

удачи в этом вопросе на следующий год, тогда xD – fortran

1

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

DeX3D является открытым исходным кодом 3D движок закодированы целиком Visual Basic от Джерри Чен ([email protected]).

  • Гуро
  • Прозрачность
  • Помутнение
  • Omni и местная подсветка
  • Иерархическая сетках
  • Поддержка 3D Studio файлов
  • систем частиц
  • Безье сегментов кривой
  • 2,5 D текст
  • Visual Basic источник

Более подробная информация, скриншоты и источник можно найти на Dex3D Главная. (< = Dead Link)

+0

Да, я нашел исходный код более ранней версии этого, я попытаюсь посмотреть, как это работает. – Andrei

0

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

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

+0

Я хочу сделать свой проект без использования DirectX другого 3D-движка. Я хочу сделать что-то, начиная с базового кода, но если я не могу, я обязательно попробую DirectX или попробую сделать приложение Vector Drawing. – Andrei

1

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

alt text http://www.vbmigration.com/Documentation/Images/sample/EGL25.jpg

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