Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];

Вниз

Привязка камеры к актеру.   Найти похожие ветки 

 
Fenix ©   (2006-02-26 16:19) [0]

Доброе время суток.
Когда из 3д макса объект хагружается в GLScene он появляется боком, я для этого повернул DummyCube на 90 градусов, но сейчас я хочу сделать, что бы камера двигалась за актером, и когда я засовываю камеру в DummyCube у меня полностью сбивается управление камерой...
Меня инетерсует как можно закрепить камеру за актером, что бы все норм работало.


 
grisme ©   (2006-02-26 16:57) [1]

Пусть координаты юнита p_x,p_y,p_z. Угол обзора по OY(вправо-влево) p_ang. Координаты камеры cam_x,cam_y,cam_z.
Присваивай координатам камеры:
 cam_x:=p_x+sin(p_ang)*k;
 cam_z:=p_z-cos(p_ang)*k;
Где k-коэффициент дальности камеры. Попробуй, я не проверял - из головы даю...:)


 
Fenix ©   (2006-02-26 18:07) [2]

Этот способ работает. Я просто его ставил не в Cadenser, а в обычный таймер и перемещение камеры происходило рывками, щас ве норм.

Еще у меня проблема с перемещением объекта. Я использую векторы. Вот часть кода:


if IsKeyDown("a") then GLDummyCube2.RollAngle:=GLDummyCube2.RollAngle+0.2;
if IsKeyDown("d") then GLDummyCube2.RollAngle:=GLDummyCube2.RollAngle-0.2;

force[1]:=-cos(GLDummyCube2.RollAngle/57)*speed;
force[0]:=sin(GLDummyCube2.RollAngle/57)*speed;

GetOrCreateDCEDynamic(GLDummyCube2).ApplyAccel(Force);

У меня идет перемещение по непонятному закону... Когда работал с перемещением через позицию было все норм, а в примере было через векторы, но у меня почемуто не правильно идет перемещение :(
В чем может быть ошибка?


 
Fenix ©   (2006-02-26 22:43) [3]

Вроде понял в чем прблема:
GetOrCreateDCEDynamic(GLDummyCube2).ApplyAccel(Force);
Эта строчка задает смещение на заданный вектор Force.
А мне нужно что бы просто он начал двигаться в том направлении....
Я гдето читал, что это можно сделть через Direction.
Если кто знает как, то прошу написать.
Или как заставить двигаться объект по заданному вектору.


 
Домовенок ©   (2006-02-27 13:15) [4]

Поверни камеру... :)

По умолчанию:
Camera1.up.x = 0;
Camera1.up.y = 1;
Camera1.up.z = 0;

Попробуй сделать так:
Camera1.up.x = 0;
Camera1.up.y = 0;
Camera1.up.z = 1;

Ничего не гарантирую, но может поможет...


 
Fenix ©   (2006-02-27 13:35) [5]

Можешь обьяснить разницу между UP и Direction?
Через них по идее можно сделать так, что бы не пришлось поварачивать объектры на 90 градусов, и в верх шли координаты Z.


 
Домовенок ©   (2006-02-27 14:30) [6]

Неа, все методом тыка... :)

up - задается "верхняя" ось камеры.
up и direction взаимосвязаны, попробуй по тыкай сам, я думаю быстро разберешься и все поймешь.


 
Fenix ©   (2006-02-27 14:38) [7]

Меня еще одна вещь интересует допустим я задаю
up=(0,1,0);
Но после запуска программы (у меня этот предмет перемещается) значения up становятся (0,1,-4,37113882867379E-8);
И еще у меня GLActor находиться в GLDummyCube.
Мне лучше работать с GLDummyCube? просто если изменять их оба... то получаеться непоймешь что :))


 
a22 ©   (2006-02-27 19:16) [8]

есть оси X, Y, Z.
так вот у камеры тоже есть три оси. DIrection - оси "взгляда", Up - "наверх" (она по сути указывает, как будет повернута камера вокруг оси direction) и третья ось, которую в расчетных функция указывать необязательно, т.к. ее всегда можно получить из первых двух


 
Fosgen   (2006-02-28 21:22) [9]

Грубо говоря - Direction - куда направлены глаза твоего персонажа, а Up - куда таращится его макушка. Таким образом если Up=(0,1,0) - значит макушка торчит строго вертикально вверх. Если (0,-1,0) - вертикально вниз.

Перемещение через вектор:
Есть вектор Direction. Берем его, умножаем на скорость нашего объекта в generic единицах, затем множим на значение GLCadencer1.Delta - для масштабирования к производительности. А полученное зн-е векторно прибавляем к вектору AbsolutePosition. Получишь перемещение в сторону вектора Direction - изменяя этот вектор - меняешь направление движения.


 
Fenix ©   (2006-02-28 21:36) [10]


> Fosgen

Огромное тебе спасибо, что объяснил перемещение через вектора!!! буду пробовать)))

> Direction - куда направлены глаза твоего персонажа, а Up  - куда таращится его макушка.

следовательно что бы он смотрел в одну точку и двигался в томжже направлении надо up:=direction ???


 
Fosgen   (2006-02-28 22:51) [11]

А что у твоего персонажа - глаза на макушке?


 
Fenix ©   (2006-03-01 15:04) [12]

я понял.... просто векторы перпендикулярные, я просто неправильно понял))


 
Fosgen   (2006-03-01 20:33) [13]

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


 
Fenix ©   (2006-03-01 21:56) [14]

А как седлать что бы направить Direction так же, как объект поварачиваеться, когда использую GLDummyCube2.RollAngle ?
Мне нужно сделать поворот объекта вправо и влево...


 
Fosgen   (2006-03-02 11:32) [15]

Ты сразу определись - ты положение объекта в пространстве задаешь углами (Roll, Pitch, Turn Angle) или векторами (Direction, Up). Ты не забывай, что раз у тебя объект - дочерний к DummyCube - то его Direction не изменится когда ты DummyCube поворачиваешь. Это ведь относительный вектор - потомок, относительно родителя. Есть вектор AbsoluteDirection - только читаемый, установить его нельзя. Но он дает инфу о положении объекта в глобальном пространстве сцены.
Так что тебе чтобы прочесть реальное направление объекта - надо либо его AbsoluteDirection читать, либо Direction Parent-объекта, т.е. того к которому прикреплен интересуемый. Это все работает, если только над Parent нет еще объекта, который тоже может крутиться. Тогда - только через AbsoluteDirection. В конце-концов - бери доку по ГЛсцене, читай про Methods & Properties объектов - и пробуй... Они вообще-то называются соответственно своему предназначению.
Насколько мне помнится углы (Roll, Pitch, Turn Angle) требуются для задания исходного положения объекта (хотя их можно и для других целей пользовать). Т.е. вроде параметры Direction и Up при смене углов не меняются (хотя здесь я могу и ошибаться - не помню - углами не пользуюсь, чисто вектора меняю)... И наоборот - если меняешь вектора - углы остаются прежними. Т.е. как бы - углами задаешь положение меша в объекте FreeForm...


 
Fenix ©   (2006-03-02 15:39) [16]


> Т.е. вроде параметры Direction и Up при смене углов не меняются

Да в этом то и проблема... Мне нужно узнать какое будет значине вектора, при повернутом объекте.... но значение вектор не изменяеться((( а в сумме 3 координаты вектора могут быть от -1 до 1. Что тоже затрудняет работу с ними.



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.041 c
15-1166046445
sat
2006-12-14 00:47
2006.12.31
задача нужны идеи


2-1165909132
term1t
2006-12-12 10:38
2006.12.31
Сново Access Violation...


15-1165830392
Kolan
2006-12-11 12:46
2006.12.31
Есть ли встроеный рефакторинг изменить продедуру на функцию?


15-1165855670
Гоблин
2006-12-11 19:47
2006.12.31
MSSQL - посоветуйте книжку


2-1165692889
FIL-23
2006-12-09 22:34
2006.12.31
QReport





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский