Форум: "Игры";
Текущий архив: 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