Конференция "Игры" » Помогите сделать управление камерой в GLScene [D7, WinXP]
 
  • Terasbetoni (24.07.08 22:03) [0]
    Здравствуйте. Работаю с GLScene. Хочу сделать нормальное управление для перемещения, обзора в пространстве. Вращение камеры вокруг заданного объекта я сделал (MoveAroundTarget). Подскажите, пожалуйста, как сделать, к примеру, передвижение вперед, назад, в стороны относительно направления камеры.
  • CrytoGen (25.07.08 10:03) [1]
    Я не знаком с GLScene, но для OpenGL я писал так gluLookAt(eyevector,targetvector,upvector), таким образом для пермещения камеры вперёд/назад нужно синхронно передвигать вперёд eyevector и targetvector...
    Судя по всему раз у вас есть MoveAroundTarget, то наверное есть и что-то типа MoveTarget?
  • Mr.Vlad (29.07.08 22:26) [2]
    procedure TFGame.GLCadencerProgress(Sender: TObject; const deltaTime, newTime: Double);
    var CameraSpeed:single=5;
    begin
    GLCamera1.Move(deltaTIme*Camera); // для движения вперёд/назад
    GLCamera1.Slide(deltaTIme*Camera); // для стрейфа влево/вправо
    end;
  • CrytoGen (31.07.08 10:52) [3]
    а CameraSpeed для чего? :)
  • @!!ex © (31.07.08 11:04) [4]
    > [3] CrytoGen   (31.07.08 10:52)

    Видимо не совсем корректный псевдокод. :))
    Но суть понятна.
  • Mr.Vlad (31.07.08 22:40) [5]
    Извиняюсь ;)
    procedure TFGame.GLCadencerProgress(Sender: TObject; const deltaTime, newTime: Double);
    var CameraSpeed:single=5;
    begin
    GLCamera1.Move(deltaTIme*CameraSpeed); // для движения вперёд/назад
    GLCamera1.Slide(deltaTIme*CameraSpeed); // для стрейфа влево/вправо
    end;
  • Nicolay (09.04.09 21:00) [6]
    Используй 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.
  • Nicolay (09.04.09 21:02) [7]
    Удалено модератором
    Примечание: дубль
 
Конференция "Игры" » Помогите сделать управление камерой в GLScene [D7, WinXP]
Есть новые Нет новых   [134430   +4][b:0][p:0]