Конференция "Игры" » Вращение мышью [Delphi, Windows]
 
  • Скоба (19.06.08 22:36) [0]
    В общем у меня есть программа по вращению 3д куба, написана она под OpenGl и мне нужно добавить вращение при помощи мыши.

    ЗЫ помогите плиз, очень срочно
  • @!!ex © (19.06.08 22:50) [1]
    Ну так добваь. делов на 5 минут.
    ЛОвишь положение мышки при нажатии, потом ловишь перемещение и на полученное смещение изменять угло вращения куба. Хде у вас проблема, господин?
    За вас никто код не будет писать. Покажите как вы делали. Я могу что-то подправить - не больше.
    Здесь не клуб помощи по написанию курсовых.
  • Скоба (19.06.08 22:56) [2]
    Ну если жалко написать, то нет проблем, эта функция не обязательна в моей программе, просто хотел добавить, для общей наглядности, если Вам известна процедура написания данной функции, то могу лишь снять шляпу, а мне не известно тк я учил Делфи пол года, при это мы НЕ учили opengl...
  • @!!ex © (19.06.08 23:47) [3]
    > [2] Скоба   (19.06.08 22:56)

    OpenGL тут не при чем абсолютно.
    Я повторю еще раз: Всегда рад помочь, указать на ошибки, подсказать алгоритм. А вот код писать за вас не буду.
    Повторяю:
    ловите нажатие мыши, запоминаете координаты, ловите перемещение мыши, узнаете смещение, меняете угол вращение на значение пропорциональное смещению. Пропорция влияет на скорость вращения. Все.
    Попытайтесь реализовать. Выложите сюда. поправлю ваши ошибки. Это единственный вариант получить здесь помощь.
  • Скоба (20.06.08 00:21) [4]
    попытки добавить вращение
    procedure TForm1.true(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
    begin
     AngleY:=AngleY+1.0;
         if (AngleY>=90.0)
         then AngleY:=0.0;

    но это позволяет сместить вращение только при нажатии лмби только по оси У, как вы уже поняли AngleY AngleХ AngleZ - это вращение по разным осям

    При этом реализация вращения куба такая

    procedure TForm1.Rotatespeed1Click(Sender: TObject);
    begin
    ch:=StrToInt(InputBox('Rotate','Sleep:','0'));
    i:=1;
    if Form1.CanFocus then Form1.SetFocus;
    while i=1 do
     case c of
      1:
        begin
         AngleX:=AngleX-1.0;
         if (AngleX>=90.0)
         then AngleX:=0.0;
         Sleep(ch);
         if Application.Terminated then Break;
         Application.ProcessMessages;
         InvalidateRect(Handle, nil, False);
        end;
  • @!!ex © (20.06.08 13:06) [5]
    Жоский код....
    Короче должно быть так.
    var
     Mouse:TPoint;
     Rotating:boolean;
     AngleX, AngleY:single;
    OnButtonDown:
    begin
     Mouse.x :=x;
     Mouse.y :=y;
     Rotating:=true;
    end;

    OnButtonUp:
    begin
     Rotating:=false;
    end;

    OnMouseMove:
    if Rotationg then
    begin
     AngleY:=AngleY+(y-Mouse.y);
     AngleX:=AngleX+(x-Mouse.x);
     Mouse.x :=x;
     Mouse.y :=y;
    end;
  • ........ (13.12.11 22:46) [6]
    ребят, вращение немного не правильно, потому что когда ты отпускаешь мышь, а затем опять нажимаешь и двигаешь, вращение будет производиться по старым осям, и ваше тело будет двигаться не так как двигается мышь. как это учесть ?
  • ........ (13.12.11 22:47) [7]
    ребят, вращение немного не правильно, потому что когда ты отпускаешь мышь, а затем опять нажимаешь и двигаешь, вращение будет производиться по старым осям, и ваше тело будет двигаться не так как двигается мышь. как это учесть ?
  • tButton © (16.12.11 17:48) [8]
    в смысле, вращение объекта должно производиться относительно осей перпендикулярных оси камеры?
 
Конференция "Игры" » Вращение мышью [Delphi, Windows]
Есть новые Нет новых   [118650   +5][b:0][p:0]