Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Камера в OpenGL


Автор: Evgesha 8.2.2014, 21:05
Здравствуйте
Кто подскажет как сделать управление камеры мышкой
Чтото уменя крышняк уже едит
Вот кусок кода

Код

void __fastcall TForm00_Haupt::Panel_3DSceneMouseDown(TObject*Sender, TMouseButton Button, TShiftState Shift,
  int X, int Y)
  {
    if (Button == mbLeft)
      {
        Panel_3DScene->Cursor = crSizeAll;
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
        if (Mouse->CursorPos.y > oldy)
          {
            lookupdown -= (oldy - Mouse->CursorPos.y) / sensitivity;
            glRotatef(lookupdown, 1.0f, 0, 0);
          }
        if (Mouse->CursorPos.y < oldy)
          {
            lookupdown -= (oldy - Mouse->CursorPos.y) / sensitivity;
            glRotatef(-lookupdown, 1.0f, 0, 0);
          }
        if (Mouse->CursorPos.x > oldx)
          {
            heading -= (oldx - Mouse->CursorPos.x) / sensitivity;
            glRotatef(heading, 0, 1.0f, 0);
          }
        if (Mouse->CursorPos.x < oldx)
          {
            heading -= (oldx - Mouse->CursorPos.x) / sensitivity;
            glRotatef(-heading, 0, 1.0f, 0);
          }
        //
        oldx = Mouse->CursorPos.x;
        oldy = Mouse->CursorPos.y;
        //
        Bild3D_zeichnen();
      }
    else
      {
        Panel_3DScene->Cursor = crDefault;
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
        return;
      }
  }

Автор: tzirechnoy 9.2.2014, 11:11
Я, конечно, вижу минимум одну вроде как ошыбку в Вашэм коде -- но можэт Вы сами словами расскажэте, что Вам не нравится?

А то можэт это конкретно и не ошыбка, а так задумано.

Автор: Evgesha 9.2.2014, 19:43
Да прошу прощения что сразу не расказалю Было такой ощущение что все понимают проблему ну ладно.
Хотелось бы крутить мышкой объект 
если мышка в области панели и удержаной левой кнопки мышки
если мышка в области панел и левая кнопка отжата чтоб не крутилость
но самое важное сам объект както крутиться не так как хочу
хотелось бы как в играх 

а что за ошибка

Автор: tzirechnoy 10.2.2014, 12:35
Цитата
но самое важное сам объект както крутиться не так как хочу


Ага. То есть крутится. Тогда я, можэт быть, угадал ошыбку.

Дело в том, что glRotate*() поворачивает текущую сцэну. То есть у Вас угол поворота -- накапливается в переменных lookupdown и heading, а потом на этот угол доворачивается ужэ текущая сцэна. То есть, фактически, в lookupdown и heading получается скорость поворота, а не угол, как Вы, вероятно, планировали.

В общем, измерения движэния мышы накапливаются дважды -- и в переменных и в матрицэ opengl.

Да, если всё ещё непонятно -- попробуйте просто ничего не накапливать в lookupdown/heading, а просто крутить на oldx - Mouse->CursorPos.x

Автор: SVN74 10.2.2014, 14:22
Зачем изобретать велосипед?
В нормальных движках это пишется одной строкой...
CONTROL CAMERA USING ARROWKEYS

Автор: baldina 10.2.2014, 14:31
Цитата(SVN74 @  10.2.2014,  14:22 Найти цитируемый пост)
В нормальных движках

а если товарисч пишет сам движок?

Автор: SVN74 10.2.2014, 14:36
Цитата(baldina @  10.2.2014,  14:31 Найти цитируемый пост)
а если товарисч пишет сам движок? 

Тогда все пожелаем ему удачи...  smile 

Автор: baldina 10.2.2014, 14:38
Evgesha, ты пытаешься крутить на углы эйлера, что приводит к http://en.wikipedia.org/wiki/Gimbal_lock, и допустимо только при небольших углах

прогрессивный путь - использование идеи проекции движения мыши на шар или цилиндр, см. http://nehe.gamedev.net/tutorial/arcball_rotation/19003/

Автор: Evgesha 10.2.2014, 18:18
Цитата(SVN74 @ 10.2.2014,  13:22)
Зачем изобретать велосипед?
В нормальных движках это пишется одной строкой...
CONTROL CAMERA USING ARROWKEYS

Порекомендуй нормальный движок для XE 2 c++ Builder

Автор: SVN74 10.2.2014, 21:05
Цитата(Evgesha @  10.2.2014,  18:18 Найти цитируемый пост)
Порекомендуй нормальный движок для XE 2 c++ Builder 

Вот не могу понять, почему вы так уперлись в XE 2 c++ Builder, вам все равно игры придется писать в консольном режиме, а там у всех сред одинаково (все пишется с чистого листа)...   
http://forum.vingrad.ru/forum/topic-375647.html

Автор: tzirechnoy 11.2.2014, 10:39
Да с чего вы все взяли, что у него игра?

Если игра -- то да, лучшэ взять какой-нибудь опенсурсный движок для начала, и писать как все на lua. Но у меня все использования OpenGL совсем не были играми.

Автор: Evgesha 11.2.2014, 16:57
да действительно с чего вы взяли что игра
мне надо рисовать определеный объект и крутить его мышкой и маштабировать 
предложения и идеии а лучше рабочий код  smile еще принемаються

Автор: baldina 12.2.2014, 09:02
arcball поглядел?

Автор: Evgesha 12.2.2014, 15:46
Да уже пробовал но чтото совсем не получаеться
может кто расталкует куда что писать  smile 
башка совсем не варит

Автор: baldina 12.2.2014, 16:05
на nehe есть работающие примеры

Добавлено через 2 минуты и 18 секунд
погляди внизу страницы, там исходники под разные компиляторы

Автор: Evgesha 9.3.2014, 19:48
Всем спасибо буду разбираться.

Автор: Evgesha 19.3.2014, 10:55
Не могу разобраться с примером ArcBall
Подмогните пожалуста

Автор: baldina 19.3.2014, 17:44
в чем проблем?

Автор: Evgesha 20.3.2014, 05:05
Все компилется  но ничего не крутиться
Может пример для XP2 кто даст
Спасибо

Автор: baldina 20.3.2014, 09:46
все компилицца и крутицця и в xp и в w7

Автор: Evgesha 24.3.2014, 19:41
Да ето я понимаю пример работает.
Я пробовал в свою прогрмму вставить (RAD Studio XE2 Builder)
Поэтому и прошу помощи

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)