Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OpenGL и "мышь", нужно получиьт смещение 
:(
    Опции темы
Vetos
Дата 20.7.2009, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: 3
Всего: 4



Здравствуйте!
Мне надо убрать курсор мыши с экрана и отлавливать смещение. Я делаю так:
Код

ShowCursor (false);
//в обработчике событий
case WM_MOUSEMOVE:
    mmx =  LOWORD( lParam ) - mx;
    mmy = (HIWORD( lParam ) - my) * -1;
    mx  = LOWORD( lParam );
    my  = HIWORD( lParam );
    if ( mx > 420 || my > 340 || mx < 220 || my < 140 ) 
       { mx = 320; my = 240; SetCursorPos( 320, 240); }
break;


Все бы ничего да только при такой тактике при назначении позиции курсора происходит глюк и камера немного улетает, если этого не делать все норм, да только мышь убегает из окна)))

поворот камеры делаю так

Код

void TMyCamera::RotateAroundPosition(float RolX, float RolY)
{
    rolX += RolX;  rolX и rolY запоминают углы поворота, ator = 22.0f / 1260.0f т.е. ПИ/180
    rolY += RolY;
    Target.X = Position.X + cos( rolY * ator ) * cos( rolX * ator );
    Target.Y = Position.Y + sin( rolY * ator );
    Target.Z = Position.Z + cos( rolY * ator ) * sin( rolX * ator );
}



--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
Vetos
Дата 20.7.2009, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: 3
Всего: 4



Немного решил проблему:
Код

   if ( mx > 420 || my > 340 || mx < 220 || my < 140 ) 
      { mx = 320; my = 210; SetCursorPos( 320, 240); }


Но всеравно непонятно, почему отличается координата Y выставленная с помощью SetCursorPos от полученной в обработчике?
Даже с таким извращением заметны рывки при срабатывании if smile , может ктото знает другой способ чтоб и "мышь не убегала" и рывков небыло?


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
Rickert
Дата 21.7.2009, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



Vetos, что это у вас за условие, по которому срабатывает SetCursorPos?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Vetos
Дата 21.7.2009, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: 3
Всего: 4



Цитата(Rickert @  21.7.2009,  02:05 Найти цитируемый пост)
 что это у вас за условие, по которому срабатывает SetCursorPos?

Это типа если мышь ушла от центра окна(320, 240) на 100 едениц то кинуть ее в центр


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
Solomon
Дата 27.7.2009, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: нет
Всего: 2



и вправду.. зачем этот извращенный if ??

посмотри вот урок.


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
Rickert
Дата 27.7.2009, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



Vetos, не нужно ничего мерить. Просто, если курсор не в центре, то SetCursorPos(center.x, center.y), без проверок.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
sgi1981
Дата 15.8.2009, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 16.3.2006

Репутация: нет
Всего: 10



SetCursorPos является причиной события WM_MOUSEMOVE, потому что фактически он перемещает мышь.


--------------------
Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0624 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.