Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2015, 20:56   #1
tema2434
Пользователь
 
Регистрация: 16.11.2013
Сообщений: 12
По умолчанию Вращение opengl сцены мышью

Всем доброго времени суток, пытаюсь реализовать вращение сцены мышью, написал такой код:
Код:
var 
 Mouse:TPoint;
 Rotating:boolean;
 AngleX, AngleY:single;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 Mouse.x :=x;
 Mouse.y :=y;
 Rotating:=true;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 Rotating:=false;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if (Rotating = true) then
begin
 AngleY:=AngleY+(y-Mouse.y);
 AngleX:=AngleX+(x-Mouse.x);
 Mouse.x :=x;
 Mouse.y :=y;
end;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
FormResize(Sender);
glRotatef(AngleX,1,0,0);
glRotatef(Angley,0,1,0);
........
end;
Но у меня данный код не работает, возможно у меня что-то напутанно с координатами.
tema2434 вне форума Ответить с цитированием
Старый 18.04.2015, 13:18   #2
tema2434
Пользователь
 
Регистрация: 16.11.2013
Сообщений: 12
По умолчанию

Все решил, напутал с процедурами.....
tema2434 вне форума Ответить с цитированием
Старый 18.04.2015, 13:53   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Решение покажешь или закрыть тему?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.04.2015, 16:25   #4
tema2434
Пользователь
 
Регистрация: 16.11.2013
Сообщений: 12
По умолчанию

Вот правильное решение:
Код:
var 
 Mouse:TPoint;
 Rotating:boolean;
 AngleX, AngleY:single;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
  begin
Mouse.x :=x;
Mouse.y :=y;
Rotating:=true;
  end;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 if (Rotating = true) then
begin
 AngleY:=AngleY+(y-Mouse.y);
 AngleX:=AngleX+(x-Mouse.x);
 Mouse.x :=x;
 Mouse.y :=y;
end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
Rotating:=false;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
FormResize(Sender);

glRotatef(AngleX,1,0,0);
glRotatef(Angley,0,1,0);

end;
tema2434 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OpenGL, освещение, странные блики при удалении сцены Lamia Помощь студентам 2 25.01.2015 22:30
Кватернионы, OpenGL, Qt, libQGLViewer и FPS-вращение камеры Smogg Помощь студентам 0 17.11.2014 20:21
клик по объекту сцены OpenGL АндрейRock Qt и кроссплатформенное программирование С/С++ 3 05.05.2012 22:15
SDL OpenGL Вращение фигуры revaldo666 Общие вопросы C/C++ 0 18.07.2010 22:42
OpenGL.Нормально отображение сцены (масштаб)? spamer Мультимедиа в Delphi 0 01.03.2010 01:25