-
Здравствуйте. Работаю с GLScene. Хочу сделать нормальное управление для перемещения, обзора в пространстве. Вращение камеры вокруг заданного объекта я сделал (MoveAroundTarget). Подскажите, пожалуйста, как сделать, к примеру, передвижение вперед, назад, в стороны относительно направления камеры.
-
Я не знаком с GLScene, но для OpenGL я писал так gluLookAt(eyevector,targetvector,upvector), таким образом для пермещения камеры вперёд/назад нужно синхронно передвигать вперёд eyevector и targetvector... Судя по всему раз у вас есть MoveAroundTarget, то наверное есть и что-то типа MoveTarget?
-
procedure TFGame.GLCadencerProgress(Sender: TObject; const deltaTime, newTime: Double); var CameraSpeed:single=5; begin GLCamera1.Move(deltaTIme*Camera); // для движения вперёд/назад GLCamera1.Slide(deltaTIme*Camera); // для стрейфа влево/вправо end;
-
а CameraSpeed для чего? :)
-
> [3] CrytoGen (31.07.08 10:52)
Видимо не совсем корректный псевдокод. :)) Но суть понятна.
-
Извиняюсь ;) procedure TFGame.GLCadencerProgress(Sender: TObject; const deltaTime, newTime: Double); var CameraSpeed:single=5; begin GLCamera1.Move(deltaTIme*CameraSpeed); // для движения вперёд/назад GLCamera1.Slide(deltaTIme*CameraSpeed); // для стрейфа влево/вправо end;
-
Используй GLNavigator . У данного компонента имеется свойство MovingObject. В него необходимо передать имя камеры, которой управляешь. После этого установисвойство UseVirtualUp в значение «true», а VirtualUp.Y в значение «1».
В событии каденсера On progress
//перемещение камеры через GLNavigator, if isKeyDown('W') then GLNavigator1.MoveForward(deltatime*5); if isKeyDown('S') then GLNavigator1.MoveForward(-deltatime*5); if isKeyDown('A') then GLNavigator1.StrafeHorizontal(-deltatime*5); if isKeyDown('D') then GLNavigator1.StrafeHorizontal(deltatime*5);
если нужно, чтобы камера двигалась туда, куда направлен взгляд, то поставь свойство MoveUpWhenMovingForvard компонента GLNavigator в значение true.
-
Удалено модератором Примечание: дубль
|