Пятница, 29.03.2024, 13:01

Delphi

Приветствую Вас Гость

Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Сегодня были:
Самые активные пользователи

Меню сайта
Категории каталога
Звук и музыка [1]
Графика и игры [6]
Базы данных [1]
Стандартные компоненты [0]
3D графика [4]
Исходники [10]
DirectX и OpenGL [5]
Разное [1]
Интернет и сети [7]
Наш опрос
Чему уделять больше внимания?
Всего ответов: 64
Главная » Статьи » Delphi » 3D графика

Положение объекта на Scene

Каждый начинающий работать с GLScene сталкивается с проблемой правильного расположения и долгой настройкой объекта на сцене. Начинают путаться с векторами и их направлением и когда нужно ставить “ - ”, этот процесс настройки убивает очень много времени. Попытаюсь объяснить как быстрей оседлать векторы.


Первое. ShowAxes.
Чтобы легче было понять в каком направление двигать объект выставляем свойство ShowAxes:= True
X – красная стрелочка.
Y – зеленая стрелочка.
Z – синяя стрелочка.
Вот вам и система координат, теперь и “ - ” понятней где ставить.


Второе. Позиция.
Для настройки положения статических объектов типа GLCube, GLSphere лучше использовать Object Inspector т.к. сразу видно что происходит с объектом и куда его двигать. Выбираем объект и меняем его свойства Position отвечающий за позицию объекта, там три параметра X,Y,Z при включенном ShowAxes все довольно просто.

А вот с FreeForm или Actor, Object Inspector я считаю не столь удобен, FreeForm и Actor не венды на форме пока не откомпилируешь проект, поэтому проще задавать кодом позицию объекта. Вот как можно задать кодом позицию объекта:

GLFreeForm.Position.DirectX:=-2;
GLFreeForm.Position.DirectY:=4;
GLFreeForm.Position.DirectZ:=-9;

GLFreeForm.Position.X:=-2;
GLFreeForm.Position.Y:=4;
GLFreeForm.Position.Z:=-9;

GLFreeForm.Position.SetPoint(-9,4,-2);

GLFreeForm.Translate(2,5,2);
Позволяет корректировать позицию при уже указанных координатах, и может использоваться самостоятельно.

Для Actor аналогично. С позицией объекта думаю теперь все понятней.



Третье. Вращение.
Не каждая загруженная FreeForm сразу становится под правильным углом. Есть несколько способов выставить правильный угол.

Первый способ позволяет выставить градус поворота. Если вы выставляете все три параметра, Y пишите последним как у меня.
GLFreeForm.PitchAngle:=90; //Z
GLFreeForm.TurnAngle:=180: //Y
GLFreeForm.RollAngle:=30; //X

Или

Тоже указывается градус поворота.
GLFreeForm.Pitch(90); //Z
GLFreeForm.Turn(90); //Y
GLFreeForm.Roll(90); //X

GLFreeForm.ResetAndPitchTurnRoll(30,90,180);

GLFreeForm.RotateAbsolute(30,90,180);


Второй способ, это выставление шага поворота. Есть два параметра отвечающие за шаг поворота это Up и Direction.

GLFreeForm.Up.X:=1;
GLFreeForm.Up.Y:=2;
GLFreeForm.Up.Z:=3;

GLFreeForm.Up.SetVector(1,2,3);


GLFreeForm.Direction.X:=1;
GLFreeForm.Direction.Y:=2;
GLFreeForm.Direction.Z:=3;

GLFreeForm.Direction.SetVector(1,2,3);

Теперь вы сможете повернуть что и куда угодно.

Допустим вы поместили несколько объектов в GLDummyCube и перевернули его то все объекты в нутрии его тоже перевернутся как и система координат и вам нужно уже задавать параметры по перевернутой системе координат, не забывайте об этом.

Думаю начинающим эта статья поможет понять что куда вертеть. Главное это уметь думать в трех мерном пространстве, да и после небольшой практики все становится предельно ясно.

Статья взята с сайта http://glscene.ru/
Категория: 3D графика | Добавил: Ivin (02.04.2008)
Просмотров: 3837 | Рейтинг: 0.0/0 |