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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2009, 23:19   #1
Xawk
Новичок
Джуниор
 
Регистрация: 26.03.2009
Сообщений: 1
По умолчанию OpenGL в delphi. Как перемещать куб с помощью мыши

Ни как не получается переместить куб мышью. Может подскажите как это реализовать?
Xawk вне форума Ответить с цитированием
Старый 24.11.2009, 09:57   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

например обрабатывать события взятия-движения и отпускания мыши:
Код:
procedure Tpgl.WMMouseRDown(var mSg: TWMLButtonDown);
var mvmatrix,projmatrix: array[0..15] of gldouble;
    zval: glfloat;
    twx,twy,twz: gldouble;
begin
 inherited;
 //
 glGetIntegerv(GL_VIEWPORT, @vp);
 glgetdoublev(GL_MODELVIEW_MATRIX, @mvmatrix);
 glgetdoublev(GL_PROJECTION_MATRIX, @projmatrix);
 glreadpixels(msg.xPos, vp[3]- msg.yPos -1, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, @zval);
 gluunproject(msg.xPos, vp[3]- msg.yPos -1, zval, @mvmatrix, @projmatrix, @vp, twx,twy,twz);
 oldwx:= twx; oldwy:= twy; oldwz:= twz;

 //режим 3D-ВРАЩЕНИЯ или 2D-ПЕРЕДВИЖЕНИЯ
 if (msg.CharCode= 16) then shift:= true;      // if зажат SHIFT-
 //
 moving:= true
end;
procedure Tpgl.WMMouseRup(var mSg: TWMLButtonDown);
begin
 inherited;
 moving:= false
end;

procedure Tpgl.WMMouseMove(var msg: TWMMouseMove);
var i,z: integer;
    a,b,c: extended;
    //
    mvmatrix,projmatrix: array[0..15] of gldouble;
    zval: glfloat;
begin
 if moving then begin
  if shift then begin                 //вращение-
   ry:= wx-oldwx;
   rz:= oldwy-wy;
   glRotatef(ry, 0.0, 1.0, 0.0);
   glRotatef(rz, 1.0, 0.0, 0.0);
  end else begin                     //передвижение-
   tx:= wx-oldwx;
   ty:= wy-oldwy;
   glTranslatef(tx, ty, 0);
  end;
  InvalidateRect(Handle, nil, False) //перерисовываем только если надо-
 end;

 inherited
end;
лишнее думаю сами догадаетесь убрать.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 08.12.2009, 12:20   #3
byblik-07
 
Регистрация: 07.12.2009
Сообщений: 6
По умолчанию

интересно) но не понятно))

Последний раз редактировалось byblik-07; 08.12.2009 в 12:31.
byblik-07 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перемещать label с помощью мыши? Лукманов Александр Общие вопросы Delphi 9 26.11.2018 20:23
Перемещать строки вверх-вниз, с помощью стрелок. Rio309 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 27.10.2008 21:47
Как с помощью Microsoft Excel написать программу, позволяющую перемещать предмет на плоскости? Vova4kA Microsoft Office Excel 10 28.05.2008 14:18
как с помощью TScrollBar перемещать содержимое TMemo вверх или вниз Sanprof Общие вопросы Delphi 3 04.03.2008 00:39
Как перемещать TShape с помощью мыши? SaCREDO Помощь студентам 1 29.03.2007 00:37