Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник по GLScene.doc
Скачиваний:
255
Добавлен:
16.12.2018
Размер:
7.18 Mб
Скачать

Глава 9. Работа с материалами.

I. Прямое обращение к .Material

Если у объекта есть свойство Material, значит, ему можно задать различные параметры материала,

такие как цвет, прозрачность, текстура и т.д. Щелкните два раза по свойству Material, откроется окошко Material Editor(рис. 1).

Рис. 1

Вкладка Front задает свойства материала для внешней части объекта, а Back для внутренней. А теперь рассмотрим некоторые свойства этих вкладок.

Свойство

Описание

Ambient

Однородный фоновый цвет.

Diffuse

Рассеянный (или диффусный) цвет.

Emision

Исходящий цвет.

PolygonMode

Управляет режимом отображения для лицевых и обратных граней полигонов. Может принемать значения pmFill – обычный режим отображения, принимается по умолчанию; pmLines – изображение рисуется с помощью сетки; pmPoints – изображение рисуется точками.

Shininess

Зеркальное отражение материала.

Specular

“Зеркальный” свет или блики.

Более подробно о каждом из перечисленных, кроме PolygonMode и Shininess, рассказывается в Главе 39. “Шейдеры GLSL. Использование без компонентов. Вершинное освещение Ambient + Diffuse.”

Во вкладке Texture можно задать текстуру объекта (то есть, каким рисунком он будет покрыт). Чтобы это сделать загрузите в свойство Object.Material.Texture.Image графический файл, с поддерживаемым GLScene форматом. Учтите, если вы используете не .bmp, .wmf, .emf или .ico, то нужно подключить соответствующий расширению графического файла модуль; какой именно, смотрите описание форматов ниже. И не забудьте после загрузки снять галочку Disabled, иначе текстуры будут невидимыми.

Вот список всех поддерживаемых GLScene форматов.

*.BMP – общеизвестный формат хранения графики. Появился на заре компьютерной эры и до сих пор является повсеместно используемым. Так же стоит отметить, что слово битмап (bitmap) непосредственно связано с этим форматом.

*.ICO – файл, используемый для Windows иконок.

*.WMF – метафайл.

*.EMF – Enhanced метафайл.

*.JPEG/*.JPG – низкокачественный формат хранения графики. Очень сильно сжимает данные.

*.DDS (Direct Draw Surface) - архив, содержащий одну текстуру. Формат был разработан для DirectX SDK ещё при DirettX 3, но сейчас используется повсеместно. Поддерживает alpha-каналы. Осуществляет сжатие текстуры в 3 - 8 раз благодяря механизму S3 Texture Compression (его иногда называют ещё DXTn или DXTC). Прочитать об этом формате можно здесь: http://en.wikipedia.org/wiki/DXT1, о примененеи в OpenGL здесь: http://opengl.gamedev.ru/articles/?id=113&page=3. GLScene преобразует изображение из формата DDS в 24 или 32 битный битмап (в зависимости от битности начального изображения). Отдельно следует отметить ужасное отношение разработчиков GLScene к этому формату. Так модуль DDS не поддерживается 3D текстуры, кубические текстуры и mipmap уровни.

*.TGA - (Targa) – экономный и качественный формат для хранения данных RGBA. 8 битные версии не поддерживаются. При попытке загрузить такую текстуру появляется ошибка “Unsupported TGA ImageType”.

В ходе выполнения программы загрузка и отображение (на заданном объекте) выполняется так: GLCube1.Material.Texture.Image.LoadFromFile('image.bmp'); GLCube1.Material.Texture.Disabled:=false;

Ещё было бы преступлением не рассказать о свойстве Object.Material.TextureEx. Это вторая текстура, которую можно использовать как альфу, как текстуру деталей и т.п.

II. GLMaterialLibrary

Правильнее и удобнее работать не напрямую с параметром Material, а через библиотеку материалов – TGLMaterialLibrary. Для этого нужно перенести TGLMaterialLibrary из вкладки GLScene на форму.

Свойства, рассмотренные применительно к прямому обращению к свойству Material, идентичны тем, которые присутствуют у каждого материала GLMaterialLibrary.

Двойной щелчок по этому компоненту открывает окошко редактора материалов, в нем можно добавлять новые материалы и устанавливать их свойства. После этого у нужного объекта свойству Material.MaterialLibrary установите используемую библиотеку материалов и в свойстве Material.LibMaterialName указываем имя какого-нибудь материал из этой библиотеки. То же самое можно сделать программно, например, так:

GLMaterialLibrary1.Materials.Add; GLMaterialLibrary1.Materials[0].Material.Texture.Image.LoadFromFile('имя файла'); GLMaterialLibrary1.Materials[0].Material.Texture.Disabled:=false; GLCube1.Material.MaterialLibrary:=GLMaterialLibrary1; GLCube1.Material.LibMaterialName:='LibMaterial';

Или вот так:

GLMaterialLibrary1.AddTextureMaterial ('имя материала', 'имя файла');

GLMaterialLibrary1.Materials[0].Material.Texture.Disabled:=false; GLCube1.Material.MaterialLibrary:=GLMaterialLibrary1; GLCube1.Material.LibMaterialName:='LibMaterial';

Попробуйте закрасить наш кубик какой-нибудь текстурой, например нарисованной в Paint. Создайте новый файл, измените атрибуты на 64х64 пикселей (Можете брать другие значения). Нарисуйте там что-нибудь, например круг. Загрузите текстуру в свойство Material куба и снимите галочку с Disabled. Запустим проект (рис 2).

Рис. 2