Программирование трехмерных изображений в VisualBasic.
NET

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

ВВЕДЕНИЕ

Актуальность

Одной из самых динамично развивающихся областей компьютерных технологий на сегодняшний день является компьютерная графика.

Компьютерная графика применяется:

· в управлении и экономике

· в задачах логистики (например, для построения трехмерной модели складов)

· для виртуального отображения пространственного расположения указанного объекта (например, контейнера на полке)

При помощи разработки трехмерных изображений можно улучшить и ускорить процесс проектирования и создания технически сложных объектов: зданий, станков, сложных объектов. Построение трехмерных изображений на мониторе компьютера позволяет сэкономить большие материальные средства. Кроме того, данная тема является недостаточно проработанной в современной экономике, и поэтому она представляет наибольший интерес для экономистов. Предметом исследования является программа по вращению трехмерных изображений на языках VB. NET и VRML.

Целью данной курсовой работы является разработка программ на языках Visual Basic. NET и VRML, позволяющих вращать трехмерные изображения, являющиеся моделями какого-либо реального объекта, для обозрения его со всех сторон.

Поставленная цель раскрывается через следующие задачи:

ѕ исследовать область применения трехмерных изображений в экономике;

ѕ изучить принцип построения трехмерной графики на VB. NET и VRML;

ѕ разработать программы на языках VB. NET и VRML «Вращение куба».

1. ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ ПОЛОЖЕНИЯ ПОСТРОЕНИЯ ТРЕХМЕРНЫХ ИЗОБРАЖЕНИЙ

1.1 Понятие трехмерной графики

Трёхмерная графика -- раздел компьютерной графики, совокупность приемов и инструментов (как программных, так и аппаратных), предназначенных для изображения объёмных объектов. Больше всего применяется для создания изображений на плоскости экрана или листа печатной продукции в архитектурной визуализации, кинематографе, телевидении, компьютерных играх, печатной продукции, а также в науке и промышленности.

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

Вемкторная грамфика Векторная графика/Википедия-свободная энциклопедия. — Режим доступа: http: //ru. wikipedia. org/wiki-- способ представления объектов и изображений в компьютерной графике, основанный на использовании элементарных геометрических объектов, таких как точки, линии, сплайны и многоугольники. Термин используется в противоположность к растровой графике, которая представляет изображение как матрицу фиксированного размера, состоящую из точек (пикселей) со своими параметрами.

1.2 Области применения трехмерной графики

Трехмерное моделирование сегодня применяется в очень многих сферах. В первую очередь, это строительство. Это может быть модель будущего дома, офисного здания, любого промышленного объекта. Визуализация активно применяется в дизайн-проектах интерьеров.

3D модели очень популярны в сайтостроительстве. Программы и технологии трехмерного моделирования широко применяются в производстве, например, в производстве корпусной мебели, и в строительстве, например, для создания фотореалистичного дизайн-проекта будущего помещения.

Трехмерные модели незаменимы для презентаций, выставок, а также используются в работе с клиентами, когда необходимо наглядно показать, каким будет итоговый результат.

Компьютерная графика стала основным средством взаимодействия человека с ЭВМ. Важнейшими сформировавшимися областями приложений являются:

· компьютерное моделирование, которое явилось исторически первым широким приложением компьютерной графики,

· системы автоматизации научных исследований, системы автоматизации проектирования, системы автоматизации конструирования, системы автоматизации производства, автоматизированные системы управления технологическими процессами,

· бизнес,

· искусство,

· средства массовой информации,

· досуг.

1.3 Преимущества трехмерного моделирования

Преимуществ у трехмерного моделирования перед другими способами визуализации довольно много. Трехмерное моделирование дает точную модель, максимально приближенную к реальности.

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

Из трехмерной модели легко можно выделить чертеж каких-либо компонентов или конструкции целиком. В результате снижаются временные затраты на проектирование, уменьшаются издержки.

Специальные программы дают возможность интеграции с любым другим профессиональным программным обеспечением, например, с приложениями для инженерных расчетов, программами для станков или бухгалтерскими программами. Внедрение подобных решений на производстве дает существенную экономию ресурсов, значительно расширяет возможности предприятия, упрощает работу и повышает ее качество.

В некоторых ситуациях необходимо заменить исследуемую систему (оригинал) каким-то объектом, сходную с оригиналом по поведению или описанию (моделью). В этом случае можно использовать трехмерную графику.

1.4 Пакеты инженерной графики для работы с трехмерными объектами

Программные пакеты, позволяющие создавать трёхмерную графику, то есть моделировать объекты виртуальной реальности и создавать на основе этих моделей изображения, очень разнообразны.

ѕ Rhinoceros 3D

(Преимущественно используется в промышленном дизайне, архитектуре, корабельном проектировании, ювелирном и автомобильном дизайне, в CAD/CAM проектировании, быстром прототипировании, реверсивной разработке, а также в мультимедиа и графическом дизайне)

ѕ NevercenterSilo

(инструмент 3D моделирования с широкими возможностями — от «лепки» высокополигонных скульптурных органических форм до построения точных технических объектов. Такая идеология программы позволяет с успехом осуществлять самый широкий круг проектов для самых разных задач — от персонажей компьютерных игр до архитектуры)

ѕ AutoCADCivil 3D

(Среди новых возможностей продукта — работа с напорными трубопроводными сетями, улучшенная топосъемка, создание основных карт и проектирование железнодорожных путей. Улучшена работа многих функций проектирования транспортных сооружений — формирования коридоров, 3D-навигации, выполнения запросов и определения границ поверхностей. AutoCADCivil 3D позволяет оптимизировать проекты инфраструктуры.)

ѕ AutoCAD

(Двух- и трёхмерная система автоматизированного проектирования и черчения, разработанная компанией Autodesk. Программа включает в себя полный набор инструментов для комплексного трёхмерного моделирования)

a. Форматы хранения пакетов инженерной графики

COLLADA -- формат, разработанный для обмена между 3D приложениями. (Реализована поддержка таких программ, как Maya; 3ds Max; Poser (v.7. 0); Lightwave 3D (version 9. 5); Cinema 4D (MAXON); SoftimageXSI; Houdini; MeshLab; CityScape, CityEngine, SketchUp, Blender и другие)

SKP (*. skp) — это формат для пакетов SketchUp. SketchUp -- программа для быстрого создания и редактирования трёхмерной графики.)

U3D (*. u3d) — универсальный формат файла трёхмерной графики, использующий сжатие данных. (Формат файла определён консорциумом 3D IndustryForum, объединившим различные группы компаний и организаций, включая Intel, Boeing, HP, AdobeSystems, BentleySystems, RightHemisphere и другие, для которых основной задачей является продвижение трёхмерной графики в различных сферах промышленности, имеющих специализацию в производстве, строительстве и промышленном проектировании.)

VRML-- это текстовый формат файлов, где, например, вершины и грани многогранников могут указываться вместе с цветом поверхности, текстурами, блеском, прозрачностью и так далее.

X3D (*. x3d) -это стандарт ISO, предназначенный для работы с трёхмерной графикой в реальном времени.

X (*. x) -формат файла для хранения 3D объектов, созданный компанией Microsoft. Этот формат хранит информацию о геометрии 3D объекта (координаты вершин и координаты нормалей), текстурные координаты, описание материалов, пути и названия к текстурам, которые используются.

1. Возможности работы с трехмерной графикой на языках VB. NET и VRML

Visual Basic. NET (VB. NET) -- это объектно-ориентированный язык программирования, который можно рассматривать как очередной виток эволюции Visual Basic (VB), реализованный на платформе Microsoft. NET. VB. NET не имеет обратной совместимости с более ранней версией (Visual Basic 6. 0). Развитие проектов старых версий (*. vbp) возможно только после предварительной конвертации их в формат VB. NET специальным мастером (Migration Wizard); однако, как правило, после конвертации требуется существенная ручная доработка текстов.

1.5 Основы программирования на языке VB. NET

Краткий перечень возможных типов переменных Visual Basic. Net:

· Double — это числовой тип. Применятся для хранения чисел в экспоненциальной форме. Для хранения переменной отводится 8 байт. Отрицательные значения находятся в промежутке от — 1,7 976 931 348 6231E+308 до -4,9 406 564 584 1247E-324. Положительные значения входят в промежуток от 4,9 406 564 584 1247E-324 до 1,7 976 931 348 6231E+308.

· Integer — предназначен для обработки целочисленных значений. Переменная подобного типа занимает 4 байта. Возможные значения находятся в промежутке от — 2 147 483 648 до 2 147 483 647.

· Single — предназначен для хранения чисел в экспоненциальной форме. Для хранения переменной отводятся 4 байта. Отрицательные возможные значения переменной такого типа расположены в промежутке от 3,40 2823E+38 до -1,40 1298E-45. Положительные значения укладываются в промежуток от 1,40 1298E-45 до 3,40 2823E+38.

· String — строковый тип. Предназначен для хранения строк различной длинны. Возможная длинна строки, может, доходит до 2-х миллионов символов кодировки Unicode. Объем памяти для хранения переменной выделяется в зависимости от длинны строки.

· Byte — числовой тип. Для хранения переменной отводиться 1 байт. Значения переменной может находиться в промежутке от 0 до 255. Знак не используется.

По зоне видимости различают локальные и глобальные переменные. Первые доступны только конкретной подпрограмме, вторые -- всей программе.

Объявление локальных переменных: DimcPX, cPYAsSingle

Объявление глобальных переменных: PrivatecPX, cPYAsSingle

Типы данныx пишутся после As.

Объявление функций:

Public Sub имя ()

тело функции

EndSub

Основные операторы:

IF… ThenТрусов M. А. Visual Basic. NET. Создание графических объектов и основы программирования- M.: HT Пресс, 2006. — с. 15

Оператор записывается одной строкой. Применяется он, как правило, для выполнения одной инструкции. Синтаксис его выглядит так:

If условие Then действие

то есть при выполнении данного условия выполняется указанное действие.

For… Next

Этот цикл применяется при необходимости точного указания

количества итераций. Хотя это можно сделать и в других циклах. Синтаксис оператора выглядит примерно так:

Forn = 0 To 100 Step

Инструкция

Nextn

Число n указывает на итерацию, с которой начинается выполнение инструкций, а 100 — это общее количество итераций. Выход из цикла осуществляется с помощью оператора ExitFor.

С помощью методов класса Math можно выполнить любые математические вычисления.

math. Sin (а) Синус числа а

math. Cos (a) Косинус числа а

Массивы

Объявление одномерного массива:

Dimmas (3) AsInteger

Областью видимости этого массива является процедура. После имени массива стоят скобки, в которых указано количество элементов. Отсчет начинается с 0. Тип данных — Integer. Таким образом, это одномерный массив, состоящий из четырех элементов, имеющих данные типа Integer. Данный массив состоит из четырех целых чисел. Элементам массива необходимо присвоить значения. Делается это следующим образом:

Dimmas (2) AsInteger

mas (0) = 1

mas (l) = 3

mas (2) =

Создание двухмерной графики.

Прежде чем приступить к созданию трехмерной графики рассмотрим коротко общие правила создания графики средствами VISUAL BASIC NET.

Рисование на языке VISUAL BASIC NET Жарков В. А. Компьютерная графика, мультимедиа и игры на VisualC#2005. -М. :Жарков Пресс, 2005.- с. 58

Событие — это вызов объектом внешней по отношению к данному объекту процедуры. Событие может совершаться, если в состоянии объекта произошли изменения, например щелчок кнопки Button.

Для создания строки нужного кода используется любой параметр. Этот параметр можно рассматривать как переменную, имеющую своим значением результат пользовательского события, например, доступ к классу Graphics, который содержит классы и методы служащие для создания графики.

Создаем объект p класса Graphics:

Dim p As Graphics = Me. CreateGraphics

Me — ключевое слово, которое дает возможность обратиться к конкретным экземпляром класса или структуры, в которых код выполняется в данный момент. Me ведет себя как любой объект переменной или переменной структуры, ссылаясь на текущий экземпляр.

CreateGraphics — метод управления или форма для получения ссылки на графический объект.

Теперь, используя объктр p, можно рисовать фигуры.

p. DrawPolygon () — рисуетмногоугольник.

p. Rectangle (110, 110, 200, 200)

рисует прямоугольник из точки (110,110) с шириной и длиной 200.

Есть и другой способ рисования:

Конструктор точки выглядит так:

Dim pt As Point

pt = New Point (100, 100)

Затем конструктор размеров:

Dim sz As New Size (150, 150)

И конструктор прямоугольника

Dim rct2 As Rectangle

rct2 = New Rectangle (pt, sz)

Конструктор пера

Dim pn As Pen = New Pen (Color. Black, 3)

Теперь рисуем прямоугольник (методом DrawRectangle)

e. Graphics. DrawRectangle (pn, rct2)

Создание трехмерной графики с использованием математических формул Электронный учебник 3DRG/Режим доступа: https: //docs. google. com, c 23.

Система координат

При построении моделей используется та система координат, которую предлагает нам компьютер. В дальнейшем необходимо будет разработать собственную систему координат. Но любая созданная система координат будет создаваться на базе уже существующей, то есть экранной системы.

Соответственно, горизонтальная составляющая координат (ось X) направлена слева направо, а вертикальная составляющая (ось Y) — сверху вниз. При создании трехмерной графики приходится учитывать третье измерение. Для определения кажущейся удаленности объектов служит третье измерение (ось Z).

Создание трехмерного объекта

Объемный рисунок — это всего лишь видимость. Созданное трехмерное изображение остается двухмерным, так как экран монитора остается плоским.

Изменение координаты Z влечет за собой изменение координат X и Y в двухмерном измерении.

Главнейшим из элементов является точка (Point), являющаяся вершиной графического объекта. Координаты точек задают направление и размеры любой линии рисунка, будь то ребра куба или стороны ничтожно малых треугольников, из которых состоят грани того же куба.

Зададим координаты двух точек, расположенных в трехмерном пространстве и посмотрим, как изменяются вертикальная и горизонтальная координата в зависимости от изменения координаты Z. Координату, определяющую глубину расположения рисунка можно рассматривать как величину условную, ее изменение влечет за собой всего лишь изменение координат X и Y.

Выявим математическую зависимость между координатами точек. Это необходимо для того, чтобы размеры между отдельными элементами рисунка были строго пропорциональны друг другу. Таким образом, определив величину координаты Z, можно определить соответствующие ей величины горизонтальных и вертикальных координат. Это будет выглядеть так:

) (1)

(2)

Так же необходимо использовать коэффициент, определяющий соотношение размеров отдельных объектов в зависимости от степени их предполагаемого удаления от экрана. Величину коэффициента можно задать практически любую. Главное, чтобы величина этого коэффициента была одинакова для всех элементов рисунка.

(3)

(4)

Если мы хотим получить точку с координатами (X1, Y1, Z1), то нам следует создать для ее отображения точку с координатами X и Y. Имеются ввиду реальные координаты, то есть те, которые использует компьютер. Данные формулы справедливы только для того случая, когда точка, определяющая начало созданной вами системы координат совпадает с началом отсчета компьютерной системы координат. Точка, являющаяся началом нарисованной системы координат, определена нами в трехмерном пространстве как имеющая следующие координаты: X =0, Y = 0, Z = 0.

Реальные ее координаты равны: X = 20 и Y = 300. Так как при расчетах действий программы компьютер будет учитывать только собственную (экранную) систему координат. Поэтому необходимо установить прочную связь между всеми системами координат участвующими в работе создаваемой вами программы. Применительно к нашему случаю надо добавлять к координатам выбранной точки реальные координаты начала созданной трехмерной системы координат.

Приведенные выше формулы в окончательном виде будут выглядеть так:

(5)

(6)

X0 и Y0 — это реальные координаты точки, определяющей начало созданной нами трехмерной системы координат

Движение объектов.

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

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

(7)

(8)

Эти точки находятся на равном расстоянии, соответственно, слева и справа от центра экрана. А при переводе в трехмерные координаты обязательно следует указать координаты центральной точки:

(9)

(10)

Вращение вершин фигуры вокруг OX

(11)

(12)

(13)

Вращение вокруг OY

(14)

(15)

(16)

Вращение вокруг Oz

(17)

(18)

(19)

Затем их необходимо перевести в экранные координаты вершин, учитывая ось Z

(20)

(21)

1.6 Работа с трехмерной графикой на языке VRML

Язык VRML предназначен для описания трехмерных изображений и оперирует объектами, описывающими геометрические фигуры и их расположение в пространстве.

Vrml-файл представляет собой обычный текстовый файл, интерпретируемый браузером.

В VRML приняты следующие единицы измерения:

· Расстояние и размер: метры

· Углы: радианы

· Остальные значения: выражаются, как часть от 1.

· Координаты берутся в трехмерной декартовой системе координат.

Так как Vrml-документ представляет собой обычный тестовый файл, то для того, чтобы VRML-браузер распознал файл с VRML-кодом, в начале файла ставится специальный заголовок:

#VRML V2.0 ascii

V2. 0-определяет версию программы, на которой просматривается код

ascii-определяет кодировку текста программы

Shape — это объект, описывающий некую геометрию. Например:

Shape {

geometry Box { }

appearance Appearance {

material Material {

diffuseColor 0 0 1

}

}

}

Эта программа описывает обычный прямоугольник.

У каждого обекта в языке VRML существуют свойства: geometry — геометрия и appearance — внешний вид.

Что бы задать геометрию, полю geometry присвоено значение объекта Box. После в скобках указывается size-размер, например {1 1 1}.

Что бы задать внешний вид, полю appearance необходимо присвоить значение объекта, например Appearance. Объект Appearance обладает собственными полями. Ему присвоено значение объекта Material, и уже в нём используется поле diffuseColor, значение которого определяет цвет конуса. Цвет задаётся как комбинация трёх составляющих: красный (0), зелёный (0) и синий (1).

2. Реализация программ на языках VB. NET и VRML «Вращение куба»

2. 1 Принцип работы программы «Вращение куба» на языке VB. NET

После открытия программы Microsoft VisualStudio 2005 нужно создать новый проект, выбрав среди языков программированияVisualBasic, затем WindowsApplication.

На экране появилось окно- форма, на который в дальнейшем будет отображаться и вращаться куб. Теперь с помощью TextBox создаются четыре кнопки, с помощью которых будет вращаться куб вверх, вниз, вправо и влево.

Сначала в самом теле программы необходимо объявить все глобальные переменные (до стандартной функции Form_Load).

В программе объявлены глобальные переменные, определяющие центр экрана, угол поворота куба, все координаты вершин куба (в двумерном и трехмерном пространстве), параметры куба (ширина, высота, глубина), массив для считывания данных с файла.

Далее, после Form_Load, создается функция vvod () для считывания параметров куба с текстового файла формата *. txt.

В этой функции считывание строк с файла осуществляет оператор sw. ReadLine (), а разбиение Mid (a, j, 1), гдеa-строка, j-номер символа, с которого записывать.

Функция val () осуществляет присвоение значений переменным, так же вычисляет координаты центра в трехмерных координатах, используя формулы.

(22)

(23)

Вместо половины ширины экрана использовано произвольное значение 300.

Функция val () позволяет вращать влево и вправо куб при помощи формул

(24)

(25)

Таким образом, переменная angle1 отвечает за поворот вниз, а angle за поворот вверх.

Функция val1() используется при повороте вправо и влево, соответственно переменными angle1 и angle, которые при каждом нажатии на кнопки, либо увеличиваются, либо уменьшаются.

С помощью кнопок Button_Click составлены четыре процедуры, в которых происходит вращение.

В Button1_Click и Button3_Click вызывается функция val () для присвоения значений переменным и изменения угла. Затем в функции вычисляются координаты всех вершин куба с помощью формул. Рассмотрим одну из вершин:

(26)

(27)

(28)

Все координаты отсчитываются относительно центра экрана, с использованием заданных с файла параметров куба (ширины, высоты и глубины).

Далее осуществляется вращение каждой вершины с помощью формул вращения вокруг осей, описанных в предыдущей главе.

Далее создается объект p для рисования и очистка экрана.

Dim p As Graphics = Me. CreateGraphics

p. Clear (Color. White)

Затем с помощь DrawPolygon выводится изображение куба на форму в виде 6 прямоугольников.

В Button2_Click и Button4_Click отличается от предыдущего тем, что вначале вызывается функция val1(), которая осуществляет поворот влево и вправо.

Так как программа считывает данные с файла, необходимо создать текстовый файл в каталоге программы WindowsApplication7binDebug. В этом файле в первой строке требуется указать три координаты прямоугольника через пробел (строку необходимо начать с пробела и после написания трех координат тоже поставить пробел). Например: 234 250 300.

2.2 Принцип работы программы «Вращение куба» на языке VRML

Программа написана в конструкторе Vrmlpad. В заголовке указана версия программы-просмотра кода — 2. 0, в кодировке Юникод.

С помощью объекта Shape и его свойства geometry Box нарисован прямоугольник с размерами ширина — 1, длина — 1, высота — 1. Свойство diffuseColor окрашивает прямоугольник в зеленый цвет.

Файл имеет расширение *. vrml и может быть просмотрен в любом плагине для браузера, например в CORTONA3D

ЗАКЛЮЧЕНИЕ

В курсовой работе разработана программа, которая выполняет вращение куба, параметры которого задаются из файла, с учетом перспективы.

Несколько планов на доработку кода программы:

ѕ Фигуру куба можно доработать до модели здания. Для этого нужно куб разбить на необходимое количество горизонтально расположенных прямоугольников-этажей. Такая программа может выполнять задачи, связанные необходимостью сэкономить материалы, то есть, например, будет рисовать наиболее короткий путь проложения электрической проводки

ѕ Так же фигуру куба можно использовать как склад. Для этого нужно разбить куб на необходимое количество кубиков, которые будут соответствовать ящикам на складе. Такая программа будет выполнять задачи с поиском необходимого ящика, который, возможно, будет лежать в самой труднодоступной области.

язык трехмерный инженерный графика

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ И ЛИТЕРАТУРЫ

1. Трусов M. А. VisualBasic. NET. Создание графических объектов и основы программирования- M.: HT Пресс, 2006. — 160 с.

2. Джамбруно М. Трёхмерная графика и анимация. В 2 т. Т. 2 -- М.: Вильямс, 2002. -- 640 с.

3. Сайлер Б. Использование VisualBasic 6. / Брайан Сайлер, ДжеффСпоттс-- М.: Вильямс, 2007. -- 832 с.

4. ИвановВ. П. Трёхмерная компьютерная графика /В. П. Иванов, А. С. Батраков; под ред. Г. М. Полищука. -- М. :Радио и связь, 1995. -- 224 с.

5. Жарков В. А. Компьютерная графика, мультимедиа и игры на VisualC#2005. -М. :Жарков Пресс, 2005. -812с.

6. Сафронов И. Visual Basic в задачах и примерах./ И. Сафронов-- БХВ-Петербург. -- СПб: «БХВ-Петербург», 2008. -- 400 с.

7. Ананьев А. Самоучитель VisualBasic 6. 0/А. Ананьев, А. Федоров-М.: BHV — Санкт — Петербург, 2000.- 624 с.

8. Графические форматы [Электронный ресурс]: Свободная экциклопедия — Режим доступа к энциклопедии.: http: //ru. wikipedia. org/wiki — Загл. с экрана.- яз. рус., англ. и др.

9. Visual Basic. NET [Электронный ресурс]: Свободная экциклопедия — Режим доступа к энциклопедии.: http: //ru. wikipedia. org/wiki — Загл. с экрана.- яз. рус., англ. и др.

10. VRML-с чего начать [Электронный ресурс]: Свободный ресурс- Режим доступа: http: //vrml. org. ru/htm/first/- Загл. с экрана- яз. рус.

ПРИЛОЖЕНИЯ

ПРИЛОЖЕНИЕ 1

Программа на языке VisualBasic. NET «Вращение куба»

Public Class Form1

Private CenterPX, CenterPY, CenterPZ As Single 'центр

Private cPX, cPY As Single

Private angle As Single

Private angle1 As Single

Private ax1, ay1, az1, ax1R, ay1R, az1R, ax1D, ay1D, az1D As Single 'координатывершинкуба

Private ax2, ay2, az2, ax2R, ay2R, az2R, ax2D, ay2D, az2D As Single

Private ax3, ay3, az3, ax3R, ay3R, az3R, ax3D, ay3D, az3D As Single

Private ax4, ay4, az4, ax4R, ay4R, az4R, ax4D, ay4D, az4D As Single

Private ax5, ay5, az5, ax5R, ay5R, az5R, ax5D, ay5D, az5D As Single

Private ax6, ay6, az6, ax6R, ay6R, az6R, ax6D, ay6D, az6D As Single

Private ax7, ay7, az7, ax7R, ay7R, az7R, ax7D, ay7D, az7D As Single

Private ax8, ay8, az8, ax8R, ay8R, az8R, ax8D, ay8D, az8D As Single

Private CHIR, VIC, GLUB As Integer 'параметрыкуба

Private ar (1000) As Integer 'массивдлявводачиселсфайла

Private x1, y1, z1 As Single

Private n As Integer = 300

Private z0 As Single = 300

Private Sub Form1_Load (ByVal sender As System. Object, ByVal e As System. EventArgs) Handles MyBase. Load

End Sub

Public Sub vvod () ''вводчиселсфайла

'открываетфайлдлячтения

Dim sw As IO. StreamReader = New IO. StreamReader («D:22. txt», True)

Dim a As String

Dim j As Long, st As String, c As Integer = 0, i As Integer

a = sw. ReadLine ()

st = 1 ' первый пробел в строке

For j = 1 To Len (a) '

If Mid (a, j, 1) = «» Then

c = c + 1

ReDim Preserve ar© ' изменение размера массива числами ()

ar© = Mid (a, st, 3)

st = j + 1

End If

Next

sw. Close ()

End Sub

Sub val ()

vvod ()

CHIR = ar (2)

VIC = ar (3)

GLUB = ar (4)

'координатыцентра

CenterPX = 300: CenterPY = 300: CenterPZ = 300

''экранныекоординат

cPX = 300 * CenterPX / CenterPZ

cPY = 300 * CenterPY / CenterPZ

x1 = 40

y1 = 40

z1 = 40

angle = angle + 2

angle1 = angle1 — 2

End Sub

Sub val1()

vvod ()

CHIR = ar (2)

VIC = ar (3)

GLUB = ar (4)

'координатыцентра

CenterPX = 300: CenterPY = 300: CenterPZ = 300

''экранныекоординат

cPX = 300 * CenterPX / CenterPZ

cPY = 300 * CenterPY / CenterPZ

x1 = 40

y1 = 40

z1 = 40

angle = angle — 2

angle1 = angle1 + 2

End Sub

Private Sub Button1_Click (ByVal sender As System. Object, ByVal e As System. EventArgs) Handles Button1. Click

''вниз

val ()

'координаты вершин верхней грани

ax1 = -0.5 * CHIR: ay1 = -0.5 * GLUB: az1 = 0.5 * VIC

ax2 = 0.5 * CHIR: ay2 = -0.5 * GLUB: az2 = 0.5 * VIC

ax3 = 0.5 * CHIR: ay3 = 0.5 * GLUB: az3 = 0.5 * VIC

ax4 = -0.5 * CHIR: ay4 = 0.5 * GLUB: az4 = 0.5 * VIC

'координатывершиннижнейграни

ax5 = -0.5 * CHIR: ay5 = -0.5 * GLUB: az5 = -0.5 * VIC

ax6 = 0.5 * CHIR: ay6 = -0.5 * GLUB: az6 = -0.5 * VIC

ax7 = 0.5 * CHIR: ay7 = 0.5 * GLUB: az7 = -0.5 * VIC

ax8 = -0.5 * CHIR: ay8 = 0.5 * GLUB: az8 = -0.5 * VIC

'вращение вершин вокруг OX

'верхняя грань

ax1R = ax1

ay1R = az1 * Math. Sin (angle1) + ay1 * Math. Cos (angle1)

az1R = az1 * Math. Cos (angle1) — ay1 * Math. Sin (angle1)

ax2R = ax2

ay2R = az2 * Math. Sin (angle1) + ay2 * Math. Cos (angle1)

az2R = az2 * Math. Cos (angle1) — ay2 * Math. Sin (angle1)

ax3R = ax3

ay3R = az3 * Math. Sin (angle1) + ay3 * Math. Cos (angle1)

az3R = az3 * Math. Cos (angle1) — ay3 * Math. Sin (angle1)

ax4R = ax4

ay4R = az4 * Math. Sin (angle1) + ay4 * Math. Cos (angle1)

az4R = az4 * Math. Cos (angle1) — ay4 * Math. Sin (angle1)

ax5R = ax5

ay5R = az5 * Math. Sin (angle1) + ay5 * Math. Cos (angle1)

az5R = az5 * Math. Cos (angle1) — ay5 * Math. Sin (angle1)

ax6R = ax6

ay6R = az6 * Math. Sin (angle1) + ay6 * Math. Cos (angle1)

az6R = az6 * Math. Cos (angle1) — ay6 * Math. Sin (angle1)

ax7R = ax7

ay7R = az7 * Math. Sin (angle1) + ay7 * Math. Cos (angle1)

az7R = az7 * Math. Cos (angle1) — ay7 * Math. Sin (angle1)

ax8R = ax8

ay8R = az8 * Math. Sin (angle1) + ay8 * Math. Cos (angle1)

az8R = az8 * Math. Cos (angle1) — ay8 * Math. Sin (angle1)

' в экранные координаты вершин

ax1D = cPX + n * ax1R / (z0 + az1R)

ay1D = cPY + n * ay1R / (z0 + az1R)

ax2D = cPX + n * ax2R / (z0 + az2R)

ay2D = cPY + n * ay2R / (z0 + az2R)

ax3D = cPX + n * ax3R / (z0 + az3R)

ay3D = cPY + n * ay3R / (z0 + az3R)

ax4D = cPX + n * ax4R / (z0 + az4R)

ay4D = cPY + n * ay4R / (z0 + az4R)

ax5D = cPX + n * ax5R / (z0 + az5R)

ay5D = cPY + n * ay5R / (z0 + az5R)

ax6D = cPX + n * ax6R / (z0 + az6R)

ay6D = cPY + n * ay6R / (z0 + az6R)

ax7D = cPX + n * ax7R / (z0 + az7R)

ay7D = cPY + n * ay7R / (z0 + az7R)

ax8D = cPX + n * ax8R / (z0 + az8R)

ay8D = cPY + n * ay8R / (z0 + az8R)

'Создаем объект p класса Graphics:

Dim p As Graphics = Me. CreateGraphics

p. Clear (Color. White)

Dim pont () As Point = {New Point (ax1D, ay1D), New Point (ax2D, ay2D), New Point (ax3D, ay3D), New Point (ax4D, ay4D)}

p. DrawPolygon (New Pen (Drawing. Color. Green, 1), pont)

Dim pont1() As Point = {New Point (ax5D, ay5D), New Point (ax6D, ay6D), New Point (ax7D, ay7D), New Point (ax8D, ay8D)}

p. DrawPolygon (New Pen (Color. Green, 1), pont1)

Dim pont3() As Point = {New Point (ax1D, ay1D), New Point (ax5D, ay5D), New Point (ax8D, ay8D), New Point (ax4D, ay4D)}

p. DrawPolygon (New Pen (Color. Green, 1), pont3)

Dim pont4() As Point = {New Point (ax2D, ay2D), New Point (ax6D, ay6D), New Point (ax5D, ay5D), New Point (ax1D, ay1D)}

p. DrawPolygon (New Pen (Color. Green, 1), pont4)

Dim pont5() As Point = {New Point (ax3D, ay3D), New Point (ax7D, ay7D), New Point (ax6D, ay6D), New Point (ax2D, ay2D)}

p. DrawPolygon (New Pen (Drawing. Color. Green, 1), pont5)

Dim pont6() As Point = {New Point (ax8D, ay8D), New Point (ax4D, ay4D), New Point (ax3D, ay3D), New Point (ax7D, ay7D)}

p. DrawPolygon (New Pen (Drawing. Color. Green, 1), pont6)

End Sub

Private Sub Button3_Click (ByVal sender As System. Object, ByVal e As System. EventArgs) Handles Button3. Click

'вправо

val ()

'координаты вершин верхней грани

ax1 = -0.5 * CHIR: ay1 = -0.5 * GLUB: az1 = 0.5 * VIC

ax2 = 0.5 * CHIR: ay2 = -0.5 * GLUB: az2 = 0.5 * VIC

ax3 = 0.5 * CHIR: ay3 = 0.5 * GLUB: az3 = 0.5 * VIC

ax4 = -0.5 * CHIR: ay4 = 0.5 * GLUB: az4 = 0.5 * VIC

'координатывершиннижнейграни

ax5 = -0.5 * CHIR: ay5 = -0.5 * GLUB: az5 = -0.5 * VIC

ax6 = 0.5 * CHIR: ay6 = -0.5 * GLUB: az6 = -0.5 * VIC

ax7 = 0.5 * CHIR: ay7 = 0.5 * GLUB: az7 = -0.5 * VIC

ax8 = -0.5 * CHIR: ay8 = 0.5 * GLUB: az8 = -0.5 * VIC

'вращение вершин вокруг Oy

'верхняя грань

ax1R = ax1 * Math. Cos (angle) — az1 * Math. Sin (angle)

az1R = ax1 * Math. Sin (angle) + az1 * Math. Cos (angle)

ay1R = ay1

ax2R = ax2 * Math. Cos (angle) — az2 * Math. Sin (angle)

az2R = ax2 * Math. Sin (angle) + az2 * Math. Cos (angle)

ay2R = ay2

ax3R = ax3 * Math. Cos (angle) — az3 * Math. Sin (angle)

az3R = ax3 * Math. Sin (angle) + az3 * Math. Cos (angle)

ay3R = ay3

ax4R = ax4 * Math. Cos (angle) — az4 * Math. Sin (angle)

az4R = ax4 * Math. Sin (angle) + az4 * Math. Cos (angle)

ay4R = ay4

'нижняягрань

ax5R = ax5 * Math. Cos (angle) — az5 * Math. Sin (angle)

az5R = ax5 * Math. Sin (angle) + az5 * Math. Cos (angle)

ay5R = ay5

ax6R = ax6 * Math. Cos (angle) — az6 * Math. Sin (angle)

az6R = ax6 * Math. Sin (angle) + az6 * Math. Cos (angle)

ay6R = ay6

ax7R = ax7 * Math. Cos (angle) — az7 * Math. Sin (angle)

az7R = ax7 * Math. Sin (angle) + az7 * Math. Cos (angle)

ay7R = ay7

ax8R = ax8 * Math. Cos (angle) — az8 * Math. Sin (angle)

az8R = ax8 * Math. Sin (angle) + az8 * Math. Cos (angle)

ay8R = ay8

' в экранные координаты вершин

ax1D = cPX + n * ax1R / (z0 + az1R)

ay1D = cPY + n * ay1R / (z0 + az1R)

ax2D = cPX + n * ax2R / (z0 + az2R)

ay2D = cPY + n * ay2R / (z0 + az2R)

ax3D = cPX + n * ax3R / (z0 + az3R)

ay3D = cPY + n * ay3R / (z0 + az3R)

ax4D = cPX + n * ax4R / (z0 + az4R)

ay4D = cPY + n * ay4R / (z0 + az4R)

ax5D = cPX + n * ax5R / (z0 + az5R)

ay5D = cPY + n * ay5R / (z0 + az5R)

ax6D = cPX + n * ax6R / (z0 + az6R)

ay6D = cPY + n * ay6R / (z0 + az6R)

ax7D = cPX + n * ax7R / (z0 + az7R)

ay7D = cPY + n * ay7R / (z0 + az7R)

ax8D = cPX + n * ax8R / (z0 + az8R)

ay8D = cPY + n * ay8R / (z0 + az8R)

'Создаем объект p класса Graphics:

Dim p As Graphics = Me. CreateGraphics

p. Clear (Color. White)

Dim pont () As Point = {New Point (ax1D, ay1D), New Point (ax2D, ay2D), New Point (ax3D, ay3D), New Point (ax4D, ay4D)}

p. DrawPolygon (New Pen (Drawing. Color. Green, 1), pont)

Dim pont1() As Point = {New Point (ax5D, ay5D), New Point (ax6D, ay6D), New Point (ax7D, ay7D), New Point (ax8D, ay8D)}

p. DrawPolygon (New Pen (Color. Green, 1), pont1)

Dim pont3() As Point = {New Point (ax1D, ay1D), New Point (ax5D, ay5D), New Point (ax8D, ay8D), New Point (ax4D, ay4D)}

p. DrawPolygon (New Pen (Color. Green, 1), pont3)

Dim pont4() As Point = {New Point (ax2D, ay2D), New Point (ax6D, ay6D), New Point (ax5D, ay5D), New Point (ax1D, ay1D)}

p. DrawPolygon (New Pen (Color. Green, 1), pont4)

Dim pont5() As Point = {New Point (ax3D, ay3D), New Point (ax7D, ay7D), New Point (ax6D, ay6D), New Point (ax2D, ay2D)}

p. DrawPolygon (New Pen (Drawing. Color. Green, 1), pont5)

Dim pont6() As Point = {New Point (ax8D, ay8D), New Point (ax4D, ay4D), New Point (ax3D, ay3D), New Point (ax7D, ay7D)}

p. DrawPolygon (New Pen (Drawing. Color. Green, 1), pont6)

End Sub

Private Sub Button2_Click (ByVal sender As System. Object, ByVal e As System. EventArgs) Handles Button2. Click

''вниз

val1()

'координаты вершин верхней грани

ax1 = -0.5 * CHIR: ay1 = -0.5 * GLUB: az1 = 0.5 * VIC

ax2 = 0.5 * CHIR: ay2 = -0.5 * GLUB: az2 = 0.5 * VIC

ax3 = 0.5 * CHIR: ay3 = 0.5 * GLUB: az3 = 0.5 * VIC

ax4 = -0.5 * CHIR: ay4 = 0.5 * GLUB: az4 = 0.5 * VIC

'координатывершиннижнейграни

ax5 = -0.5 * CHIR: ay5 = -0.5 * GLUB: az5 = -0.5 * VIC

ax6 = 0.5 * CHIR: ay6 = -0.5 * GLUB: az6 = -0.5 * VIC

ax7 = 0.5 * CHIR: ay7 = 0.5 * GLUB: az7 = -0.5 * VIC

ax8 = -0.5 * CHIR: ay8 = 0.5 * GLUB: az8 = -0.5 * VIC

'вращение вершин вокруг OX

'верхняя грань

ax1R = ax1

ay1R = az1 * Math. Sin (angle1) + ay1 * Math. Cos (angle1)

az1R = az1 * Math. Cos (angle1) — ay1 * Math. Sin (angle1)

ax2R = ax2

ay2R = az2 * Math. Sin (angle1) + ay2 * Math. Cos (angle1)

az2R = az2 * Math. Cos (angle1) — ay2 * Math. Sin (angle1)

ax3R = ax3

ay3R = az3 * Math. Sin (angle1) + ay3 * Math. Cos (angle1)

az3R = az3 * Math. Cos (angle1) — ay3 * Math. Sin (angle1)

ax4R = ax4

ay4R = az4 * Math. Sin (angle1) + ay4 * Math. Cos (angle1)

az4R = az4 * Math. Cos (angle1) — ay4 * Math. Sin (angle1)

ax5R = ax5

ay5R = az5 * Math. Sin (angle1) + ay5 * Math. Cos (angle1)

az5R = az5 * Math. Cos (angle1) — ay5 * Math. Sin (angle1)

ax6R = ax6

ay6R = az6 * Math. Sin (angle1) + ay6 * Math. Cos (angle1)

az6R = az6 * Math. Cos (angle1) — ay6 * Math. Sin (angle1)

ax7R = ax7

ay7R = az7 * Math. Sin (angle1) + ay7 * Math. Cos (angle1)

az7R = az7 * Math. Cos (angle1) — ay7 * Math. Sin (angle1)

ax8R = ax8

ay8R = az8 * Math. Sin (angle1) + ay8 * Math. Cos (angle1)

az8R = az8 * Math. Cos (angle1) — ay8 * Math. Sin (angle1)

' в экранные координаты вершин

ax1D = cPX + n * ax1R / (z0 + az1R)

ay1D = cPY + n * ay1R / (z0 + az1R)

ax2D = cPX + n * ax2R / (z0 + az2R)

ay2D = cPY + n * ay2R / (z0 + az2R)

ax3D = cPX + n * ax3R / (z0 + az3R)

ay3D = cPY + n * ay3R / (z0 + az3R)

ax4D = cPX + n * ax4R / (z0 + az4R)

ay4D = cPY + n * ay4R / (z0 + az4R)

ax5D = cPX + n * ax5R / (z0 + az5R)

ay5D = cPY + n * ay5R / (z0 + az5R)

ax6D = cPX + n * ax6R / (z0 + az6R)

ay6D = cPY + n * ay6R / (z0 + az6R)

ax7D = cPX + n * ax7R / (z0 + az7R)

ay7D = cPY + n * ay7R / (z0 + az7R)

ax8D = cPX + n * ax8R / (z0 + az8R)

ay8D = cPY + n * ay8R / (z0 + az8R)

'Создаем объект p класса Graphics:

Dim p As Graphics = Me. CreateGraphics

p. Clear (Color. White)

Dim pont () As Point = {New Point (ax1D, ay1D), New Point (ax2D, ay2D), New Point (ax3D, ay3D), New Point (ax4D, ay4D)}

p. DrawPolygon (New Pen (Drawing. Color. Green, 1), pont)

Dim pont1() As Point = {New Point (ax5D, ay5D), New Point (ax6D, ay6D), New Point (ax7D, ay7D), New Point (ax8D, ay8D)}

p. DrawPolygon (New Pen (Color. Green, 1), pont1)

Dim pont3() As Point = {New Point (ax1D, ay1D), New Point (ax5D, ay5D), New Point (ax8D, ay8D), New Point (ax4D, ay4D)}

p. DrawPolygon (New Pen (Color. Green, 1), pont3)

Dim pont4() As Point = {New Point (ax2D, ay2D), New Point (ax6D, ay6D), New Point (ax5D, ay5D), New Point (ax1D, ay1D)}

p. DrawPolygon (New Pen (Color. Green, 1), pont4)

Dim pont5() As Point = {New Point (ax3D, ay3D), New Point (ax7D, ay7D), New Point (ax6D, ay6D), New Point (ax2D, ay2D)}

p. DrawPolygon (New Pen (Drawing. Color. Green, 1), pont5)

Dim pont6() As Point = {New Point (ax8D, ay8D), New Point (ax4D, ay4D), New Point (ax3D, ay3D), New Point (ax7D, ay7D)}

p. DrawPolygon (New Pen (Drawing. Color. Green, 1), pont6)

End Sub

Private Sub Button4_Click (ByVal sender As System. Object, ByVal e As System. EventArgs) Handles Button4. Click

'вправо

val1()

'координаты вершин верхней грани

ax1 = -0.5 * CHIR: ay1 = -0.5 * GLUB: az1 = 0.5 * VIC

ax2 = 0.5 * CHIR: ay2 = -0.5 * GLUB: az2 = 0.5 * VIC

ax3 = 0.5 * CHIR: ay3 = 0.5 * GLUB: az3 = 0.5 * VIC

ax4 = -0.5 * CHIR: ay4 = 0.5 * GLUB: az4 = 0.5 * VIC

'координатывершиннижнейграни

ax5 = -0.5 * CHIR: ay5 = -0.5 * GLUB: az5 = -0.5 * VIC

ax6 = 0.5 * CHIR: ay6 = -0.5 * GLUB: az6 = -0.5 * VIC

ax7 = 0.5 * CHIR: ay7 = 0.5 * GLUB: az7 = -0.5 * VIC

ax8 = -0.5 * CHIR: ay8 = 0.5 * GLUB: az8 = -0.5 * VIC

'вращение вершин вокруг Oy

'верхняя грань

ax1R = ax1 * Math. Cos (angle) — az1 * Math. Sin (angle)

az1R = ax1 * Math. Sin (angle) + az1 * Math. Cos (angle)

ay1R = ay1

ax2R = ax2 * Math. Cos (angle) — az2 * Math. Sin (angle)

az2R = ax2 * Math. Sin (angle) + az2 * Math. Cos (angle)

ay2R = ay2

ax3R = ax3 * Math. Cos (angle) — az3 * Math. Sin (angle)

az3R = ax3 * Math. Sin (angle) + az3 * Math. Cos (angle)

ay3R = ay3

ax4R = ax4 * Math. Cos (angle) — az4 * Math. Sin (angle)

az4R = ax4 * Math. Sin (angle) + az4 * Math. Cos (angle)

ay4R = ay4

'нижняягрань

ax5R = ax5 * Math. Cos (angle) — az5 * Math. Sin (angle)

az5R = ax5 * Math. Sin (angle) + az5 * Math. Cos (angle)

ay5R = ay5

ax6R = ax6 * Math. Cos (angle) — az6 * Math. Sin (angle)

az6R = ax6 * Math. Sin (angle) + az6 * Math. Cos (angle)

ay6R = ay6

ax7R = ax7 * Math. Cos (angle) — az7 * Math. Sin (angle)

az7R = ax7 * Math. Sin (angle) + az7 * Math. Cos (angle)

ay7R = ay7

ax8R = ax8 * Math. Cos (angle) — az8 * Math. Sin (angle)

az8R = ax8 * Math. Sin (angle) + az8 * Math. Cos (angle)

ay8R = ay8

' в экранные координаты вершин

ax1D = cPX + n * ax1R / (z0 + az1R)

ay1D = cPY + n * ay1R / (z0 + az1R)

ax2D = cPX + n * ax2R / (z0 + az2R)

ay2D = cPY + n * ay2R / (z0 + az2R)

ax3D = cPX + n * ax3R / (z0 + az3R)

ay3D = cPY + n * ay3R / (z0 + az3R)

ax4D = cPX + n * ax4R / (z0 + az4R)

ay4D = cPY + n * ay4R / (z0 + az4R)

ax5D = cPX + n * ax5R / (z0 + az5R)

ay5D = cPY + n * ay5R / (z0 + az5R)

ax6D = cPX + n * ax6R / (z0 + az6R)

ay6D = cPY + n * ay6R / (z0 + az6R)

ax7D = cPX + n * ax7R / (z0 + az7R)

ay7D = cPY + n * ay7R / (z0 + az7R)

ax8D = cPX + n * ax8R / (z0 + az8R)

ay8D = cPY + n * ay8R / (z0 + az8R)

'Создаем объект p класса Graphics:

Dim p As Graphics = Me. CreateGraphics

p. Clear (Color. White)

Dim pont () As Point = {New Point (ax1D, ay1D), New Point (ax2D, ay2D), New Point (ax3D, ay3D), New Point (ax4D, ay4D)}

p. DrawPolygon (New Pen (Drawing. Color. Green, 1), pont)

Dim pont1() As Point = {New Point (ax5D, ay5D), New Point (ax6D, ay6D), New Point (ax7D, ay7D), New Point (ax8D, ay8D)}

p. DrawPolygon (New Pen (Color. Green, 1), pont1)

Dim pont3() As Point = {New Point (ax1D, ay1D), New Point (ax5D, ay5D), New Point (ax8D, ay8D), New Point (ax4D, ay4D)}

p. DrawPolygon (New Pen (Color. Green, 1), pont3)

Dim pont4() As Point = {New Point (ax2D, ay2D), New Point (ax6D, ay6D), New Point (ax5D, ay5D), New Point (ax1D, ay1D)}

p. DrawPolygon (New Pen (Color. Green, 1), pont4)

Dim pont5() As Point = {New Point (ax3D, ay3D), New Point (ax7D, ay7D), New Point (ax6D, ay6D), New Point (ax2D, ay2D)}

p. DrawPolygon (New Pen (Drawing. Color. Green, 1), pont5)

Dim pont6() As Point = {New Point (ax8D, ay8D), New Point (ax4D, ay4D), New Point (ax3D, ay3D), New Point (ax7D, ay7D)}

p. DrawPolygon (New Pen (Drawing. Color. Green, 1), pont6)

End Sub

End Class

ПРИЛОЖЕНИЕ 2

Программа на языке VRML «Вращение куба»

#VRML V2.0 utf8

Shape {

geometry Box {

size 1 1 1

}

appearance Appearance {

material Material {

diffuseColor 0 1 0

}

}

}

ПоказатьСвернуть
Заполнить форму текущей работой