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

Вниз

Сферические координаты в OpenGL   Найти похожие ветки 

 
istemy   (2004-05-18 17:27) [0]

Подскажите, пожалуйста, как можно использовать сферические координаты для поворота головы героя, примерно как в Quake. Не могу создать модель движения героя по сцене. И как достичь плавности движения. Если сможете пришлите исходники на мое мыло. Заранее благодарен.


 
NailMan ©   (2004-05-18 18:27) [1]

нууу это очень просто:

- условно считаем что координаты переносицы есть начало координат(локальные).
- камера у нас юзается с "конечной длиной прицела", т.е. имеется сама камера(EYE), ее точка прицеливания(TARGET) и длина(радиус сферы) между этими точками. Вобщем как в 3DSMax
(длина у нас может быть любой, так как она все равно будет в итоге единичной)
- в каждый момент времени ты имеешь 2 величины(радиус считаем постоянным):
угол по горизонтали(долгота) и угол по вертикали(широта).

Процесс задания координат точки прицеливания(ориентация взора игрока):
- Получаем координаты точки Target по уравнению сферических координат(какие я думаю объяснять не стоит) на известных в текущий момент времени Alpha(долгота), Phi(широта) и радиуса.
- Имея 2 точки EYE(0,0,0) и полученный TARGET(X,Y,Z) мы превращаем их в вектор направления, который будет вектором направления взгляда игрока(ессно нормализовав его).
Т.о. зная вектор направления и зная мировые координаты точки EYE(фактически это мировые координаты игрока на карте) ты можешь задать их камере.

Для плавности движения тебе надо приблизительно сделать так:

- Принять определенную угловую скорость(или ускорения) перемещения камеры вдоль обоих углов в секунду. Соответсвенно каждое изменение этих углов может происходить в определенный квант времени - скажем 50 раз в сек.
- Для определения величины изменения углов ты делаешь линейную интерполяцию каждого угла с нужным числом шагов(50), получаешь промежуточное(фактически конечное) значение угла. Его собсно прибавляешь/убавляешь к каждому углу в соотвествии с данными устройства ввода(+ или -). Фактически это будет твоя угловая скорость.
Для обеспечения заданной скорости вращения на любой тачке, тебе придется сделать простой синхронизатор. Т.е. замерять время пройденное с прошлого изменения углов(тика) и делить его на теоретическое время этого промежутка.
Получишь т.н. коэффициент поправки. Его надо помножать(оно будет <=1) на полученное после интерполяции значение изменения углов, т.о. на слабой тачанке будет тормоз-"пропуск тиков", а на хорошей тачке гладко.
Можно вычисление смещений производить не жестко заданных в тиках, а прямо в игровом цикле, точно также замеряя время(оно будет очень маленьким), но это пагубно может сказаться на общей производительности. Естественно ни о каких GetTickCount для получения счетчика не может быть и речи.

В общих слова так.

По части полного кода помочь не смогу, т.к. я D3D-фил. Могу только по части синхронизатора помочь с реализацией.

---
WBR, NailMan aka 2:5020/3337.13


 
Черный ферзь   (2004-05-20 00:30) [2]

эти,как их там? кватернионы используй!


 
NailMan ©   (2004-05-20 09:41) [3]

Черный ферзь
Ты хоть знаешь что это тако и для чего используются?

---
WBR, NailMan aka 2:5020/3337.13


 
istemy   (2004-05-20 12:03) [4]

А где можно достать текстуру для стен зданий и неба, земли и тд?


 
NailMan ©   (2004-05-20 12:47) [5]

Да игрушку какую-нить распотроши.

---
WBR, NailMan aka 2:5020/3337.13


 
Murkt ©   (2004-05-20 19:18) [6]

[4]
Из третьей кваки.


 
Черный ферзь   (2004-05-21 22:30) [7]

знаю! широта и долгота не катят в понастоящему трехмерной игре..



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

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

Наверх




Память: 0.48 MB
Время: 0.026 c
1-1094559948
Iconka
2004-09-07 16:25
2004.09.19
MDI приложение


14-1093809510
Vasya.ru
2004-08-29 23:58
2004.09.19
Что за мода среди местных флудить вместо того чтобы промолчать


14-1093937936
ИМХО
2004-08-31 11:38
2004.09.19
Мегаполисы


14-1094034520
YurikGL
2004-09-01 14:28
2004.09.19
Софтина для управления


1-1094470836
EugeneP
2004-09-06 15:40
2004.09.19
XMLDocument неверно добавляет атрибуты.