- •Учебник
- •Оглавление
- •Введение
- •Глава 1
- •I. Установка
- •II. Удаление
- •Глава 2. Первый проект
- •Глава 3. Создание сцены в режиме design time
- •Создание объектов:
- •Глава 4. Примитивные объекты. Вкладка Basic geometry.
- •Глава 5. Ориентация, координаты.
- •Глава 6. Движение.
- •Глава 7. Как узнать, сколько сейчас fps?
- •Глава 8. Полноэкранный режим.
- •Глава 9. Работа с материалами.
- •I. Прямое обращение к .Material
- •Глава 10. Использование 3d моделей.
- •I. Форматы моделей
- •Глава 11. Прокси объекты.
- •Глава 12. Создание земной поверхности с glTerrainRenderer.
- •Глава 13. Создание земной поверхности с glFreeForm.
- •Глава 14. Итоги работы с glTerainrender и glFreeForm.
- •Глава 15. Создание земной поверхности с glHeightField.
- •Глава 15. Создание неба.
- •Глава 16. GlAtmosphere.
- •Глава 17. Спецэффекты.
- •I. Огонь
- •II. Молния
- •III. Дождь
- •IV. Снег
- •VI. Блики от источников света
- •Глава 18. Растительность.
- •I. Деревья и кустарники
- •II. Трава
- •Глава 19. Работа со шрифтами и вывод надписей.
- •I. Вывод текста через компонент glWindowsBitmapFont
- •II. Проблема с glWindowsBitmapFont в Windows Vista
- •Глава 20. Выделение объекта мышкой.
- •Глава 21. Создание сцены в режиме runtime.
- •Глава 22. Тени.
- •Глава 23. Туман.
- •Глава 24. Vbo или расширение arb_vertex_buffer_object в OpenGl.
- •Глава 25. Fbo или расширение ext_framebuffer_object в OpenGl.
- •Глава 26. Рисование на канве.
- •Глава 27. Использование чистого OpenGl.
- •Глава 28. Звуки.
- •I. Проигрывание звуков с помощью bass
- •II. Проигрывание звуков с помощью fmod
- •III. Проигрывание звуков с помощью OpenAl
- •Глава 29. Игровое меню.
- •Глава 30. Примитивная физика dce.
- •Глава 31. Физика ode.
- •II. Основы библиотеки ode(: tglodeManager и tglodeJointList) на примере создания подобия боулинга.
- •Глава 32. Физика Newton.
- •Глава 33. Ручная проверка коллизий.
- •V. Ручная проверка коллизии
- •Глава 34. Шейдеры. Терменология.
- •Глава 35. Шейдеры. История и компоненты.
- •Глава 36. Шейдеры glsl. Введение.
- •Глава 37. Шейдеры glsl. Использование без компонентов. Самый примитивный шейдер.
- •Глава 38. Шейдеры glsl. Немного о спецификации. Типы данных и переменные
- •Стандартные функции
- •Поддерживаемые компоненты векторов
- •Глава 40. Шейдеры glsl. Текстурирование.
- •Глава 41. Шейдеры glsl. Использование без компонентов. Мультитекстурирование. Смешение трёх цветов по базовой карте.
- •Глава 42. Шейдеры glsl. Использование через компонент glslShader. Часть первая – Первые шаги.
- •Глава 43. Шейдеры glsl. Использование через компонент glslShader. Часть вторая – знакомимся со светом. Передача параметров в шейдер.
- •Глава 44. Шейдеры glsl. Использование через компонент glslShader. Часть третья – текстуры.
- •Глава 45. RenderMonkey.
- •Глава 46. Оптимизация программы.
- •Глава 47. Практика. Создание мира
- •Приложение
- •I. Типы векторов и матриц
- •II. Работа с векторами
- •III. Работа с матрицами
- •IV. Методы объектов glScene
- •Предметный указатель по компонентам glScene
Глава 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