ЗАДАНИЕ VIII

Тема: Трехмерная графика.
Цель: Краткое знакомство с трехмерной графикой в среде Stratum Computer.

Перед началом работы необходимо:

владеть работой с клавиатурой и мышкой;
владеть основными приемами работы в системе Stratum.

 

Основные понятия

        Трехмерные объекты существуют в рамках трехмерного пространства и могут быть визуализированы в специальном двухмерном объекте: проекции трехмерного пространства. Трехмерное пространство находится в двухмерном пространстве (записывается вместе с ним в файл). Визуализация трехмерных объектов осуществляется в проекции трехмерного пространства, большинство из параметров которой определяются выбранной в проекции камерой. Камера - это специальный графический объект, определяющий направление взгляда и координаты наблюдателя, а также и другие параметры, влияющие на отображение. Конструирование трехмерных объектов можно производить в программном продукте 3d Studio и импортировать их в Stratum. Простейшие трехмерные объекты можно создавать с Stratume, для этого следует в режиме редактирования трехмерного пространства нажать на кнопку с изображением соответствующего примитива.

        Операции с графическими 3D объектами.
        Имиджи операций (управления объектами) располагаются в библиотеке GRAPH3D.LIB. Во всех имиджах имеется переменная hSpace3d, задающая дескриптор (уникальный номер) трехмерного пространства. Эту переменную можно устанавливать либо по связи, либо определить ее в имидже уровнем выше.

move3d.gif (667 bytes)         Move3d - управление перемещением графического объекта
resize3d.gif (737 bytes)         Resize3d - управление масштабом графического объекта
rotate3d.gif (766 bytes)         Rotate3d - управление вращением графического объекта

Они во многом схожи и имеют одинаковые переменные HANDLE hSpace3d,hBase,hObject STRING ObjName,BaseName

  Имя   Тип   Назначение
hSpace3d HANDLE Дескриптор трехмерного пространства. Если эта переменная не устанавливается по связи, то она берется из переменной имиджа уровнем выше.
hBase HANDLE Дескриптор объекта, в локальной системе координат которого происходят эволюции объекта.
hObject HANDLE Дескриптор управляемого объекта.
ObjName STRING Имя управляемого объекта.
BaseName STRING Имя объекта, в локальной системе координат которого происходят эволюции объекта.

Кроме этого имиджи имеют еще и специальные переменные.

move3d.gif (667 bytes)   Move3d  FLOAT x,y,z. Координаты объекта. В момент старта имидж получает координаты 3d объекта и записывает их в эти переменные. В дальнейшем следит за их изменениями и соответственно перемещает 3d объект.
resize3d.gif (737 bytes)   Resize3d  FLOAT x,y,z. Коэффициенты масштабирования по соответствующим осям. Коэффициенты изначально устанавливаются в 1. В дальнейшем масштабирование ведется относительно этих первоначальных значений. Поэтому для удобства эти переменные можно установить в другие значения.
rotate3d.gif (766 bytes)   Rotate3d  FLOAT AxisX,AxisY,AxisZ,Angle,matrix.
matrix
- номер матрицы, задающей ось поворота, если на момент верности дескрипторов пространства и объектов значение этой переменной осталось равным 0, то матрица создается автоматически, использую значения переменных AxisX, AxisY, AxisZ.
AxisX, AxisY, AxisZ - координаты вектора, лежащего на оси поворота. Если ось поворота задается через значения этих переменных, то поворот возможен только вокруг, оси проходящей через начало координат. В противном случае координаты следует задавать непосредственно в матрице.
Angle - угол поворота. Имидж обеспечивает поворот объекта на этот угол.

 

Задание 1.

lab008.gif (18871 bytes)

        Создайте новый проект, вставьте имидж GraphicSpace. Поскольку содержимое окна будет считываться из файла 3d.vdr (который Вы можете получить здесь, и полученный файл следует сохранить в директории проекта), установим переменную FileName в 3d.vdr (либо полный путь к файлу). Установим на схеме имидж Proection3D. Имидж Proection3D может создавать новую проекцию трехмерного пространства, но может и использовать уже заранее созданную и нарисованную. Для этого нужно в его переменной ObjectName установить имя уже существующей проекции. У нас это 3d. Запустите проект на выполнение и проверьте, что номер трехмерного пространства не равен 0 ( переменная hSpace3d у имиджа Proection3D ). Для того, чтобы вид трехмерного пространства полностью располагался в окне установите переменную Control (у имиджа Proection3D ) равной 6. Запустите проект на выполнение.
        Теперь будем перемещать тор (трехмерный объект TORE01) вдоль цилиндра (по оси OY). Для этого установим имидж Move3d. Соединим связью переменные hSpace3d этого имиджа и имиджа Proection3D. Зададим имя перемещаемого объекта (переменная ObjName) - TORE01, и объекта в системе координат которого осуществляется перемещение (переменная BaseName) - CYLINDER. При задании имен, большие и маленькие буквы различаются. Создайте новый имидж, текст которого будет задавать закон перемещения объекта:
t:=t+0.1
y:=y0+r*sin(t+f)

где y0 - начальное положение, r - амплитуда, f - фаза, t - время. Соединим переменные y нового имиджа и Move3d. Задайте начальные значения переменных (y0, r, f). Например (5, 4, 0). Запустите проект на выполнение, красный тор должен выполнять поступательные движения вдоль оси OY цилиндра. Аналогично установим перемещения для красного и синего торов. Вместо создания новых имиджей следует вставлять созданный вами имидж, либо использовать копирование. Также задайте начальные значения переменных (y0, r, f).

Задание 2.

        Вращение шарика вокруг тора. Для этого установим имидж Move3d. Соединим связью переменные hSpace3d этого имиджа и имиджа Proection3D. Зададим имя перемещаемого объекта (переменная ObjName) - SPHERE, и объекта в системе координат которого осуществляется перемещение (переменная BaseName) - CYLINDER. Создайте новый имидж, текст которого будет задавать закон перемещения шарика:

Вращение по малому радиусу:

    a1:=a1+0.2
    y:=0.16*r1*sin(~a1)
    _x:=r1*cos(~a1)

Вращение по большому радиусу

    a:=a+0.02
    z:=(r+~_x)*sin(a)
    x:=(r+~_x)*cos(a).

Задайте начальные значения переменных : r1- 15, r - 40. Соединим переменные x,y,z нового имиджа и Move3d.

Дополнительное задание.

Попробуйте управлять с помощью имиджей VSlider и HSlider любыми трехмерными графическими объектами.
Изменение цвета трехмерных объектов. Воспользуемся имиджем ObjectColor3d. Во внешнем имидже изменяйте цвет по произвольному закону.