Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.20;
Скачать: CL | DM;

Вниз

Задание пути объекту.... (GLScene)   Найти похожие ветки 

 
Colt1978   (2004-11-01 22:31) [0]

Привет всем.... подскажите кто может сталкивался... Как заставить объект (к примеру Актёра) двигаться из текущего положения в точку указанную мышкой...
В качестве поверхности перемещения использую Terrain...
Суть в том что не могу я его направить куда надо....


 
Кто---то ©   (2004-11-03 01:58) [1]

Какая разница чем указана точка ?
Проблема с определением места в которое ткнули мышью или с перемещением ?


 
Colt1978   (2004-11-03 07:05) [2]

и с тем и другим....


 
Домовенок   (2004-11-03 09:31) [3]

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


 
Colt1978   (2004-11-03 15:26) [4]

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


 
Кто---то ©   (2004-11-05 01:34) [5]


> Colt1978   (03.11.04 07:05) [2]
> и с тем и другим....

1.
Для определения куда ткнули мышью используй функцию : GLSceneViewer1.Buffer.ScreenToWorld(x, y);
в x y впиши координаты экрана в которые тыкаешь. В качестве резултьта получишь позишн в ДжиЭльСцене.

2.
PointTo - поворачивает объет лицом к заданной позишн или объекту.
Move(расстояние *deltaTime) - двигает на указанное расстояние. deltaTime берётся из кадансера, нужна, чтобы на разных компьютерах движение было с одинаковой скоростью.


 
Colt1978   (2004-11-17 10:16) [6]

Опять я....
Вот как мне подсказали реализовать:

procedure TForm1.GLCadencerProgress(Sender: TObject; const deltaTime,
 newTime: Double);
var
  speed, z : Single;
  nmp : TPoint;

  bufv:tvector;
begin
....
actor.Position.Y:=Terrain.InterpolatedHeight(actor.Position.AsVector)+250;
bufv:=actor.Position.asvector;
bufv[1]:=mpos[1];
actor.PointTo(mpos,vectormake (0,1,0));
if vctordistance (bufv,mpos)>0.1 then actor.Move(deltatime*150);
...
  SceneViewer.Invalidate;
end;

procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject;
 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var rayStart, rayVector, iPoint, iNormal : TVector;
begin
//        SetVector(rayStart, GLSphere1.AbsolutePosition);
      SetVector(rayStart, Camera.AbsolutePosition);
      SetVector(rayVector, SceneViewer.Buffer.ScreenToVector(AffineVectorMake(x, SceneViewer.Height-y, 0)));
      NormalizeVector(rayVector);
      if Terrain.RayCastIntersect(rayStart, rayVector, @iPoint, @iNormal) then
       begin
        mpos:=ipoint;
        mdir:=vectornormalize (inormal);
//         actor.PointTo(mpos,vectormake (0,1,0));
       end;
end;

Я что хочу сказать, дело в том, что я использую террайн этот , увеличиваю его в свойстве масштабирования в 16 раз, может в этом проблеммма того, что актёр движется не туда куда мне хочется. Камера у меня управляется с клавиатуры и при помощи мыщи я вращаю камеру. Мож кто поможет разобраться ?


 
Colt1978   (2004-11-17 10:36) [7]

Забыл добавить что код указанный в процедуре TForm1.GLSceneViewer1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); обрабатывается у меня когда я нажимаю левую кнопку мыши...
Код я просто не вставил...


 
Da Stranger   (2004-11-17 17:48) [8]

Интересный примет есть в \Demos\behaviours\pathcontrol по плавному передвижению по заданному пути с возможностью изменять скорость.
Кстати, кто-нибудь ещё использует glMovement?


 
Colt1978   (2004-11-18 21:35) [9]

Da Stranger   (17.11.04 17:48) [8]

Интересный примет есть в \Demos\behaviours\pathcontrol по плавному передвижению по заданному пути с возможностью изменять скорость.

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


 
Домовенок   (2004-11-21 00:44) [10]

>Colt1978 (18.11.04 21:35) [9]

Дык ты его двигай до конкретной координаты не пока он будет равен ей, а проверяй равен или ушел дальше. Тогда тормози. Если зашел чуть дальше, совсем чуть-чуть, то наверное ничего страшного? А такое бывает иногда.


 
Colt1978   (2004-11-22 06:23) [11]


> Домовенок   (21.11.04 00:44) [10]
что я только не пробывал... ничего не получается.


 
dimodim-modern   (2004-11-22 10:32) [12]

Прикольно...Пашет


 
Colt1978   (2004-11-22 12:09) [13]


> dimodim-modern   (22.11.04 10:32) [12]

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


 
Da Stranger   (2004-11-22 17:56) [14]


> Видишь ли в том примере путь чётко задан, а тут задаю я
> его сам мышкой. 2-х мерные координаты преобразуются в 3-х
> мерные. Возможно что я просто что-то напутал именно с координатами,
> но понять что я уже не всилах... :-(

Получить 3х мерные координаты из 2- мерных можно функцией Camera.xxx.ScreentoWorld, а потом найти пересечение прямой (Camera.position--- эта точка) с плоскостью XY на высоте этой точки.
Получившаяся точка и будет пунктом назначения.
Звучит сложновато, но проше не умею ;)


 
Colt1978   (2004-11-23 06:26) [15]


> Da Stranger   (22.11.04 17:56) [14]

а как это выглядит ввиде кода ?


 
Da Stranger   (2004-11-23 16:40) [16]

Посмотри на это...
Актёр движется, но направление не сохраняет. Завтра, может, выложу усовершенствованную версию.
http://xgb.boom.ru/temp/xxx.zip


 
Colt1978   (2004-11-24 06:43) [17]


> Da Stranger   (23.11.04 16:40) [16]
> Посмотри на это...

нет там ничего...


 
Colt1978   (2004-11-24 06:43) [18]


> Da Stranger   (23.11.04 16:40) [16]
> Посмотри на это...

нет там ничего...



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

Текущий архив: 2005.02.20;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.028 c
3-1106375511
forum_user
2005-01-22 09:31
2005.02.20
Поиск поля в БД Access


4-1104653379
KASioZ
2005-01-02 11:09
2005.02.20
Проблемы с SetWindowHookEx


1-1107872625
Stype
2005-02-08 17:23
2005.02.20
Директория Windows


1-1107800554
VZup
2005-02-07 21:22
2005.02.20
Целый тип данных с ОГРОМНЫМ диапазоном


11-1092233444
nester
2004-08-11 18:10
2005.02.20
Как можно узнать существует ли ресурс.