Урок 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. Ссылка на них будет опубликована немного позже. Файлы надо просто закинуть в папу с проектом.
|
Добавил(а): 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.