Наложение текстур
Процедура наложения текстур состоит из двух частей, которыми занимаются соответствующие узлы. Узлы ImageTexture, MovieTexture, PixelTexture описывают ЧТО использовать в качестве текстуры, а вспомогательные узлы TextureCoordinate и TextureTransform задают КАК разместить текстуру на объекте. Аналогичная ситуация уже встречалась в разделе "Текст", где узел Text задавал ЧТО написать, а FontStyle задавал КАК это сделать.
ImageTexture (текстура-картинка)
Описание:
ImageTexture {
url []
repeatS TRUE
repeatT TRUE
}
Узел ImageTexture - очень полезный узел, предназначенный для обтягивания объектов картинками. Область использования этого приема исключительно широка: начиная от создания аватара с собственной фотографией и заканчивая привешиванием картинок на background. В разделе url указывается местоположения графического файла.
Самой текстуре присваивается локальная система координат S на T, где S соответсвует нижнему обрезу картинки, а T - левому. Значения S и T изменяются от 0 (левый нижний пиксель) до 1 (правый нижний пиксель для S и левый верхний пиксель для T). Значения параметров repeatS и repeatT определяют, будет ли текстура размножена в направлениях S и T, чтобы заполнить весь объект.
Теперь пару слов о форматах. Броузерам СТРОГО ПРЕДПИСАНО поддерживать jpeg и png. Но кроме того обычно поддерживаются gif и ряд других распространенных форматов.
Те броузеры, которые я использовал, поддерживают:
MS VRML 2.0 Viewer: GIF, BMP, JPG, RAS, PPM, PNG.
Cosmoplayer: в release notes указаны только JPEG и PNG, но GIF точно поддерживается.
Paragraph Cortona: в явном виде не нашел, но исходя из того, что ISB поддерживает BMP, GIF, JPEG, и PNG, то, вероятно, и Cortona с этими форматами справится
GLView: DIB,BMP, GIF, TGA, JPEG, PPM and RGB
Я надеюсь, вы еще не забыли, что в качестве примера постепенно создается стол, на котором уже стоит глобус и клетка. Вот его-то мы и оттекстурим.
Просмотр. Текст кода.
Пусть вас не смущает наличие в коде узла Viewpoint. О принципах его работы будет сказано чуть позже.
MovieTexture (текстура-видеоролик)
Описание:
MovieTexture {
loop FALSE
speed 1.0
startTime 0
stopTime 0
url []
repeatS TRUE
repeatT TRUE
}
Данный узел в качестве текстуры задает файл в формате MPEG. Поскольку этот формат позволяет хранить как видео-, так и аудиоинформацию, соответственно узел MovieTexture может появляться и в разделе texture узла Appearance, и в разделе source узла Sound (о нем позже). В последнем случае, естественно, рендеринг изображения не проводится, а обрабатывается только саундтрек файла.
loop, как обычно задает, будет ли файл прокручиваться бесконечно.
Параметр speed позволяет задавать скорость проигрывания MPEG файла. В случае speed <0 проигрывание идет в обратном порядке. В случае speed=0 будет статично отображаться 0-й фрейм MPEG файла.
startTime и stopTime определяют обработку проигрывания во времени MPEG файла и обычно используются для запуска/остановки в определенный момент или после определенного события.
Параметры url, repeatS и repeatT занимаются тем же, что и в узле ImageTexture
Просмотр. Текст кода.
ЗАМЕЧАНИЕ. Эту mpg-шку, подвернувшуюся под руку, я где-то в сети нашел. Сам же обычно их изготавливаю так: рисую кадры -> собираю в avi -> конвертирую в mpg. Если кто идет другим путем - напишите, вдруг есть удобнее.
PixelTexture (пиксельная текстура)
Описание:
PixelTexture {
image 0 0 0
repeatS TRUE
repeatT TRUE
}
Механизм работы данного узла такой же, как и у ImageTexture, кроме того, что Вы указываете не готовую картинку из файла, а должны ручками раскрасить каждый указанный Вами пиксель. Ситуации, когда Вам такой выход покажется оптимальным, единичны. Что такое repeatS и repeatT читайте выше.
В параметре image первые два числа задают размер текстуры в пикселях, третье - способ раскрашивания: 1 - градации серого, 2 - градации серого плюс прозрачность, 3 - цветное изображение, 4 - цветное изображение плюс прозрачность.
Таким образом, запись
PixelTexture {image 2 2 1 0 255 255 0}
задает текстуру размером 2x2, раскрашенную в шахматном порядке белым и черным
Просмотр. Текст кода.
А запись
PixelTexture {image 2 2 4 0xff000080 0x00ff0080 0x0000ff80 0x00000080}
задает текстуру в полупрозрачную клеточку красного, зеленого, синего и черного цвета.
Можете посмотреть кубик с такой текстурой. Для иллюстрации полупрозрачности текстуры внутри я расположил белый непрозрачный шарик. Если Вы его не видите в своем броузере, переключитесь в режим wireframe и убедитесь, что он там есть. Кстати, даже если Вы видите этот шарик сквозь полупрозрачные стенки кубика, не надейтесь разглядеть противоположные грани кубика!!! Как уже говорилось несколько раз, вид примитивов ИЗНУТРИ не определен.
Просмотр. Текст кода.
TextureTransform (трансформация текстур)
Описание:
TextureTransform {
center 0 0
rotation 0
scale 0
translation 0 0
}
Как упоминалось в начале этой страницы, узел TextureTransform применяется для указания КАК разместить текстуру на объекте. Названия параметров узла говорят сами за себя: center задает точку, относительно которой происходит вращение (rotation) и масштабирование (scale). Translation сдвигает текстуру по поверхности объекта. Все действия проводятся в локальной ST-системе координат текстуры, о которой смотри выше. Узел TextureTransform, безусловно, жизненно необходим, но пользоваться им путем "ручного" исправления параметров очень неудобно. В любом приличном VRML редакторе трансформация текстур проводится визуально перетаскиванием либо самой текстуры (например, ISB), либо слайдеров, задающих численые параметры rotation, scale, translation (например,CosmoWorlds).
Видели когда-нибудь стены, сложенные пьяными каменщиками наискосок? Нет? Можете посмотреть :)
Просмотр. Текст кода.
Назад |
Содержание |
Вперед