Розробка VRML - документiв. Мова VRML (Virtual Reality Modeling Language). Інструментарій. Основні принципи, страница 3

Оператор USE працює з іменованими вузлами. 

Примітка: за замовчуванням усі вузли в VRML не мають власного унікального імені. Ім'я може бути привласнено будь-якому вузлу, однак не має сенсу іменувати всі об'єкти без необхідності. Власні унікальні імена необхідні тільки динамічним об'єктам і об'єктам, аналоги яких будуть створюватися за допомогою оператора USE. 

Для присвоєння об'єкту унікального імені необхідно скористатися оператором DEF. Загальний вигляд: 

DEF ім'я_об'єкта назва_класу 

У даному прикладі описується побудова двох кубів з ребром 2 на які накладається текстура, що зберігається у файлі logo.jpeg.

#VRML V2.0 utf8 

#опис куба з іменем MyBox 

Transform {    translation 0 0 0    children [ 

DEF MyBox Shape {        appearance Appearance {          texture ImageTexture {            url ["logo.jpeg"] 

}          }        geometry Box { 

size 2 2 2 

#опис другого куба типу MyBox за допомогою оператора USE

Transform {    translation 0 3 0    children [      USE MyBox 

}

Примітка: у VRML файлах можливе застосування коментарів. Для позначення коментарю використовується символ #. 

Для опису паралелепіпеда використовується клас Box { }. size - поле класу Box, що описує розміри паралелепіпеда по осях X, Y і Z відповідно. 

Прототипи

Використання прототипів дозволяє істотно скоротити текст програми та істотно полегшити її написання. 

Опис об'єкта за створеним прототипом зводиться до визначення імені прототипу і нових значень, що привласнюються перевизначеним полям. 

Слово PROTO є зарезервованим і використовується для оголошення (декларації) прототипу. 

Загальний вигляд прототипу: 

Ім'я_прототипу PROTO [поля_даних] {тіло_прототипу}  Ім'я_прототипу - обов'язковий параметр. 

Поля даних мають таку структуру:  field (exposedField) тип_даних назва_поля значення_за_замовчуванням 

Де  z field - зарезервоване слово.  z exposedField - аналог field. Застосовується при роботі з динамічними об'єктами. Поле, оголошене як exposedField дозволяє динамічно змінювати своє значення в процесі роботи. 

z Тип_даних - назва типу даних, що привласнюються полю.  z Назва_поля - дозволяє перевизначати назви полів.  z Значення_за_замовчуванням - дозволяє перевизначити значення за замовчуванням для даного поля. 

Тіло_прототипу - містить повний опис прототипу. Опис прототипу відрізняється від опису об'єкта тим, що у полях даних, що заміщаються, замість значень підставляються назви перевизначених полів даних. 

Слово IS є зарезервованим і показує, що дане поле заміщається перевизначеним. Загальний вигляд оператора заміщення: 

Назва_поля_що_заміщується IS назва_перевизначеного_поля  Назви перевизначених полів визначаються користувачем. 

Назва перевизначеного поля може збігатися з назвою поля, що заміщується. Використання прототипів рекомендується тільки у тому випадку, коли один і той - же об'єкт використовується (можливо, з різними візуальними властивостями) у декількох екземплярах при побудові світу. 

Якщо при визначені об'єкта описані не всі переобумовлені поля, то вступає в дію принцип умовчання.

#VRML V2.0 utf8 

#опис прототипу кулі 

PROTO MySphere [    field SFVec3f trans 0 0 0    field SFFloat radius 1    field SFColor color 1 1 1 

] {    Transform {      translation IS trans 

children [        Shape { 

appearance Appearance {            material Material {              diffuseColor IS color

}            } 

geometry Sphere {            radius IS radius 

#опис екземпляру кулі 

MySphere {    trans 1 2 3    color 1 0.5 0    radius 2 

}

У даному прикладі прототип об'єкта "Куля" спочатку був описаний а потім використаний. 

Групування об'єктів

Group { } - клас, що поєднує у собі групу об'єктів. 

children [ ] - поле класу Group, усередині якого можуть бути описані інші об'єкти. 

У даному прикладі описані два прототипи для створення кулі і паралелепіпеда з заданими властивостями.