Подписаться на RSS рассылку
Главная » Статьи по Delphi » GLScene » Изменить текстуру на TGLFreeForm

Изменить текстуру на TGLFreeForm

Автор: Борисов С. А.

Иногда требуется программно изменить текстуру во время работы программы (в run-time). С примитивами проблем у меня не возникало никаких, а вот с TGLFreeForm возникла маленькая проблема. Создайте простейшую сцену, на которой имеется камера, источник света, и TGLFreeForm. Создайте какой-нибудь простой объект в 3DSMax, причем необходимо в редакторе наложить текстуру на объект. Нажимаем клавишу M либо Rending -> Material Editor. Появляется окно редактора материалов. Далее кликаем по кнопке которая выделена рамкой на следующем рисунке:


Далее указываем что мы будем загружать изображение. См. изображение ниже:


Далее выделяем объект, на который будем накладывать текстуру и жмем по кнопке Assign Material to Selection. Теперь необходимо экспортировать модель. Жмем File -> Export. Выбираем формат .3DS. Появляется окно, ставим галочку жмем OK. Сохраненный файл размещаем в папке с проектом, текстуру там же.

Теперь создаем обработчик onCreate формы:

procedure TForm1.FormCreate(Sender: TObject);
begin
  GLFreeForm1.LoadFromFile('test.3ds');
end;

Если вы используете JPEG текстуру, то обязательно добавьте модуль JPEG в секцию Uses.

Добавьте компонент TGLMaterialLibrary. Это библиотека материалов. Теперь сделаем так, чтобы все используемые текстуры загружались автоматически. Для этого просто укажем у GLFreeForm1 свойство MaterialLibrary равным GLMaterialLibrary1.

Теперь запустите приложение и убедитесь, что все работает. Если ничего не видно, и ошибок не возникло, возможно просто камера находится внутри объекта, или просто объекта не видно. Чтобы упростить задачу у камеры в свойстве TargetObject укажите объект на который будет направлена камера. В нашем случае это будет GLFreeForm1.

Теперь, допустим, необходимо изменить текстуру по нажатию на кнопку. Выкладываем на форму кнопку, создаем для нее обработчик:

procedure TForm1.Button1Click(Sender: TObject);
begin
  GLMaterialLibrary1.Materials[0].Material.Texture.Image.LoadFromFile('путь к файлу');
  GLFreeForm1.StructureChanged;
end;

Вот и все, текстура должна поменяться.

Для общего развития рекомендую посетить блог Дмитрия Тимофеева. Блог посвящен программированию игр на XNA. Очень много полезной информации. Жалко, что XNA это все же не Delphi а C#.

Просмотров: 4591

Обсудить на форуме


Имя *:
Email:


Код *:

Copyright © 2008-2016 Программирование на Delphi для начинающих и не только

Полнота авторских прав на все материалы, опубликованные на сервере DelphiDevelop.ru принадлежит их авторам

Перепечатка материалов разрешается с указанием авторства и гиперссылки на первоисточник информации

Хостинг от uCoz

Автор проекта: Борисов Сергей

e-mail: save-x@yandex.ru

Связь с администрацией сайта