Урок 9 - Экспорт .3DS модели из 3DS max 2009 в OpenGL

  Основой для этого урока будет пример предыдущего урока.
Первое, что нам предстоит сделать, это обновить Header OpenGL, подключаем в uses новый заголовочный файл DglOpenGL.
Архив с исходными файлами и проектом в конце урока!

Особенности этого Header’а:

  • Очень сильно упрощается инициализация OpenGL;
  • Возможность выбора версии контекста OpenGL;
  • Не нужно инициализировать кучу необходимых расширений;
  • Поддержка версии OpenGL 4.2(самая последняя на 2012 год).


Вот новая инициализация: В FormCreate:
InitOpenGL;//инициализируем все необходимые параметры и расширения
DC := GetDC(Form1.Handle); //получаем адрес формы
RC := CreateRenderingContextVersion(DC, [opDoubleBuffered], 2, 0, false, 32, 24, 8, 0, 0, 0); 
//создаём контекст с параметрами:
//Адрес формы в памяти,
// двойная буферизация, 
//Major версия OpenGL,
// Minor версия OpenGL, 
//проверка совместимости,
//глубина цвета, 
//разрядность буфера глубины,
//разрядность буфера трафарета, 
//разрядность буфера аккумуляции, 
//остальное не важно.

ActivateRenderingContext(DC, RC); //Активируем созданный контекст

Вместо переменной HRC: HGLRC будут 2 новые переменные: DC, RC: HDC. Таким образом мы создали контекст воспроизведения версии 2.0. Его поддерживают абсолютно все современные видеоадаптеры.

Загружать модели мы будем при помощи библиотеки Unit3DS, ее также необходимо подключить uses.

Все очень просто: В var добавляем переменную:
Var 
Model: T3DSModel;

В FormCreate нужно создать и загрузить модель:
...
Model:= T3DSModel.Create;
Model.LoadFromFile(Путь до модели, путь до папки с текстурами);
...

Наша модель будет лежать в папке Models, а текстуры в папке Textures, загрузка модели будет выглядеть так:
Model:=T3DSModel.Create;
Model.LoadFromFile(GetCurrentDir+'\Models\Scene.3DS', GetCurrentDir+'\Textures');

Все, модель мы загрузили! Теперь необходимо её нарисовать. Это осуществляется с помощью функции Draw(Pos, Angle).
Где Pos – это вектор позиции (X,Y,Z), Angle – это тоже вектор но вместо X,Y,Z будет Pith(угол поворота вокруг оси X), Yaw(угол поворота вокруг оси Y), Roll(угол поворота вокруг оси Z). Вектор - это тип TVector имеющий 3 параметра X, Y ,Z : Single и есть функция динамического создания Vector(X, Y, Z : Single): TVector;

Начинам рисовать:
Model.draw(Vector(0,0,0),Vector(0,0,0));

То есть в место того где мы рисовали пол с кубиком надо написать вот эту строку. Результат:



А вот вид модели в 3DS Max’е:



Примечание: отрисовка происходит не привычным способом (glBegin(); glEnd();), вывод происходит не по полигону, а по одному объекту за раз. Это повышает производительность на 100-150 FPS. При экспорте обязательно надо применить материал на все объекты. Если при компиляции возникает ошибка с отрисовкой или загрузкой модели, спасает модификатор в 3DS Max - UVW Map. Если не помогло, то лучше начать создавать модель заново исключая пустых объектов (без точек, материалов и т. д.).

В следующем уроке мы рассмотрим, что такое шейдеры и сделаем простейшее попиксельное освещение.



Добавил(а): oktavius Дата: 2012-11-29
Красава!!!!!



Добавил(а): oktavius Дата: 2012-11-29
Жду Продолжения!) Отличным примером была бы простейшая 3D игра. Например: Освещение внутри Куба красное. Игрок внутри Куба, подходит к кнопке и нажимает ее. после нажатия кнопки освещение становится нормальным, при повторном нажатии снова красным)



Добавил(а): Klesh Дата: 2012-11-29
Рад стараться, в следующем уроке примером будет твоя идея.



Добавил(а): oktavius Дата: 2012-11-30
Отлично буду ждать



Добавил(а): oktavius Дата: 2012-11-30
Кстати очень хороший дизайн сайта Очень прост, и интуитивно понятен



Добавил(а): Admin Дата: 2012-11-30
Спасибо



Добавил(а): qwerty Дата: 2012-12-04
Уроки клевые! Правда не всегда все понятно, но спасают примеры. Не бросай это все! Хорошее дело делаешь!



Добавил(а): Klesh Дата: 2012-12-05
Стараюсь, а по поводу вопросов спрашивайте и я буду исправлятся



Добавил(а): Serhio Дата: 2012-12-09
Открываю exe-шник, в ответ ошибка "could not get function pointer adress for wglCreateContextAttribsARB-OpenGL 3.x and above not supported". Объясните кто-то, что оно от меня хочет) Поддержу предыдущие каменты - шикарный сайт, отличные уроки. Большое спасибо всем, кто имеет отношение к этому проекту)



Добавил(а): Klesh Дата: 2012-12-09
Похоже что твой видеоадаптер не поддерживает функцию создания контекста с пользовательскими атрибутами (wglCreateContextAttribsARB). Попробуй заменить в исходнике вот эту строку:
RC := CreateRenderingContextVersion(DC, [opDoubleBuffered], 2, 0, false, 32, 24, 8, 0, 0, 0);
На эту:
RC:= CreateRenderingContext (DC,[opDoubleBuffered],32,24,24,24,0,0);
Тут мы инициализируем самую последнею версию OpenGL, которую поддерживает видеокарта.



Добавил(а): Serhio Дата: 2012-12-19
Klesh, пробовал сам все поправить, но видно без твоей помощи не обойтись. Заменил строку, но ошибки на этом не закончились. Компилятор находит ошибки в "pngzlib" (начиная с этой строчки{$L deflate.obj} (№144)), пробовал закаментить эти строчки, выбивает ошибку в "Textures". Скачивал игру кубик рубика на делфи с исходником - те же проблемы. Что характерно - модель в формате .ase отображается без проблем (чужая модель естественно ). При попытке загрузить свою .ase делфи поругался и выдал черный экран.



Добавил(а): Klesh Дата: 2012-12-20
Прими мои глубочайшие извинения , я забыл написать о новых файлах, которые требует у тебя Delphi. Просто в этом примере введена поддержка текстур формата PNG. Ссылка на них будет опубликована немного позже. Файлы надо просто закинуть в папу с проектом.



Добавил(а): Klesh Дата: 2012-12-21
Вот: PNGImage.rar



Добавил(а): Serhio Дата: 2012-12-22
Klesh, спасибо большое, что помогаешь) осталась (надеюсь) последняя ошибка в textures. Как я понимаю, тоже нужно заменить файл?



Добавил(а): Klesh Дата: 2012-12-22
Да, надо распаковать весь архив в папку с примером.



Добавил(а): Klesh Дата: 2012-12-25
Скоро, просто это очень сложная тема и я не до конца разобрался в ней. Урок будет размером примерно в 9 страниц.



Добавил(а): oktavius Дата: 2012-12-24
Когда же следующий урок



Добавил(а): Programer Дата: 2013-02-28



Добавил(а): thedelphi Дата: 2013-03-11
понятнее уроков я еще не видел, оч хорошо



Добавил(а): СyberExpert Дата: 2013-03-26
Привет Klesh я бы хотел узнать какие языки программирования ты изучил и какие ты ещё изучаешь.



Добавил(а): Klesh Дата: 2013-03-29
Привет СyberExpert, на данный момент я знаю: Delphi и Pascal. Пытаюсь изучить С++ (знаю пока на уровне новичка приходится все время писать шейдеры для OpenGL, а они на C#).



Добавил(а): Calabi-Yau Дата: 2013-04-30
В архиве нет DglOpenGL. Прога из архива запускается только экзешником



Добавил(а): Klesh Дата: 2013-05-01
Забыл положить , все исправил



Добавил(а): Programer Дата: 2013-05-04
Ужасно интересные все уроки большое спасибо ребята за этот великолепный сайт



Добавил(а): Klesh Дата: 2013-05-05
Спасибо, очень приятно, рады стараться для вас



Добавил(а): gasmator Дата: 2013-05-11
dglOpengl нету(



Добавил(а): Programer Дата: 2013-05-19
А можно ли на языке Delphi написать свой движок?



Добавил(а): Klesh Дата: 2013-05-19
Конечно можно, главное прямые руки и большой мозг



Добавил(а): gamer25 Дата: 2013-06-07
Когда планируются новые уроки?



Добавил(а): gasmator Дата: 2013-06-16
ага уже хочется про шейдеры)



Добавил(а): gasmator Дата: 2013-06-16
а где дгл опен гл модуль



Добавил(а): Alexsus17 Дата: 2013-06-19
Ну где же урок про шейдеры?



Добавил(а): Klesh Дата: 2013-06-19
Ок, до 30 числа постараюсь написать.



Добавил(а): Alexsus17 Дата: 2013-08-28
ну хотя бы до сентября уже бы что-нить увидеть



Добавил(а): Joker1999obp Дата: 2013-10-19
какого числа будет новый урок? и как часто добавляются новые уроки?



Добавил(а): sheen12 Дата: 2013-11-04



Добавил(а): dreammage Дата: 2013-11-14
черт побери, не получается экспортировать из 3д макса =((



Добавил(а): dmch_d Дата: 2014-05-23
Через .3ds можно как-то передавать анимацию?



Добавил(а): Programer Дата: 2014-09-15
Сайт случаем ещё не заброшен ?



Добавил(а): 5kaiN Дата: 2014-10-14
Programer, будем надеется что это не так..



Добавил(а): NightFoxProg Дата: 2014-11-16
а как заменить вашу модель, допустим на другую ? такое возможно ?



Добавил(а): dmch_d Дата: 2015-10-28
Уважаемый Klesh, у меня возникли трудности с использованием texture.pas из предыдущих уроков. Возможно-ли как-то использовать этот модуль загрузки для загрузки (извиняюсь за тавтологию) текстур с последующим наложением оных на полигон?



Добавил(а): Dj-Slon Дата: 2017-04-04
Вот другая модель: Собор Василия Блаженного https://yadi.sk/d/PqtJQvZMshod3?force_show=1 я начал с неё - ща нашел кучу спорткаров



Добавил(а): s1t1n Дата: 2017-10-15
Отлично.


    No results found.
Отменить.