![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Функция MouseLook (взгляд за мышью) в GLCamera [Delphi, Windows]
Riko © (2003-09-09 10:50:00)Люди, пожалуйста, где искать реализацию сабжа? Или это в GLSceneViewer'e?
Хотя бы в каком направлении копать?
Ranma (2003-09-21 04:52:00) [1]есть рекомендация:
1. создать dummycube и привязать к нему камеру.
2. горизонтальные движения мыши использовать для вращения dummy
3. вертикальные для камеры
4. и будет вам счастье ибо если не сделать такую иерархическую структуру, то камеру при движениях будет плющить (если конечно не сбрасывать каждый раз rotations)
Riko (2003-09-09 14:48:00) [2]Все понял, спасибо огромное....
pasha_676 (2003-09-09 13:17:00) [3]
> Честно говоря, перелопатил много доки, но никак не пойму....
Нехватка базового представления.
Попытаюсь с азов.
Любой предмет в трехмерном пространстве имеет положение, которое определяется тремя векторами, в терминологии GLScene - Directional, Position и Up. С позишинал все понятно. Дирекшинал - вектор определяющий куда смотрит камера и ап - вектор куда смотрит верх камеры.
Теперь по существу - что бы вращать камеру надо изменять вектора ап и дирекшинал. Причем изменение апа- это не что иное, как поворот камеры вокруг оси дирекшинала. Он скорее всего тебе не нужен (как я понял). Изменение дирекшинала же будет изменять куда смотрит камера.
Следующий вопрос. Как отловить перемещение мыши в форме - это извини азы дельфи. Должен найти сам.
Следующий пункт - отловил изменение координат мыши - сделал преобразования дирекшинола на их основе - получил поворот камеры вокруг своей оси. Вот тебе и поворот.
Математика преобразований - дело десятое - зависит от того что ты конкретно хочеш сделать и от того как это должно работать. В общем случае смотри матрицы поворота вокруг осей.
Весь этот муторный пост сделал по очень простой причине - ты должен понимать что и как представляется и работает. Реализовать непосредственно в GLScene можно прощеееее
И непосредственно к GLScene. Во-первых проследи чтоб камера не была привязана ни к какому объекту (TargetObject это автоматом сбивает дирекшинал камеры на объект), во вторых обрати внимание на пропертя камеры
GLCamera1.Roll, Turn и Pitch что ли. Измени их и будет тебе счастие. (По сути эти пропертя и меняют ап и дирекшиналы, пользуйся исходным кодом - и увидишь это).
Riko (2003-09-09 11:13:00) [4]>>привязать камеру к предмету и двигать ее по окружности
Это получается, а свободное вращение?
>>новое положение камеры и новый вектор направления камеры.
Можно чють-чють подробнее?
FormMouseMove или GLSceneViewerMouseMove?
GLCamera Direction, Position и Up ?
Честно говоря, перелопатил много доки, но никак не пойму....
pasha_676 (2003-09-09 11:02:00) [5]В смысле двигаешь мышью - поворачивается камера?
В GLScene можно - привязать камеру к предмету и двигать ее по окружности - см. примеры в комплекте GLScene.
Ну и никто не отменял "ручной" метод - считываешь изменения положения мыши и выставляешь в зависимости от них новое положение камеры и новый вектор направления камеры.