движение мыши opengl - PullRequest
       47

движение мыши opengl

2 голосов
/ 20 апреля 2011

Я создаю игру в пул, написанную на C ++, используя обычный OpenGL (без внешних инструментов), но я могу использовать GLUT.Я нарисовал кий, который хочу следовать за курсором мыши, но я не уверен, как это сделать.

Я знаю, как использовать ввод с клавиатуры для перемещения объектов, например, положения камеры или рисования объекта, но яне уверен, как перемещать объект с помощью мыши.

Это сигнал, который я пытаюсь переместить с помощью мыши:

void cue () {
  glBegin;
  glTranslatef(-10,5,0); 
  glRotatef(90,0,1,0); 
  glutSolidCone(0.25, 15, 20, 20);
  glEnd();
}

Ответы [ 4 ]

4 голосов
/ 29 апреля 2011

В NeHe есть учебник, который охватывает основы вращения в OpenGL: http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=04

Если вы хотите повернуть вокруг другой точки, см. Как изменить центр вращения в OpenGL . Это в основном сводится к этому:

Переведите это так, чтобы точка вас хочу вращаться вокруг на происхождение, затем поверните, затем переведите в нужное место.

Также используйте glPushMatrix / glPopMatrix или glLoadIdentity, чтобы изолировать преобразования.

3 голосов
/ 20 апреля 2011

Glut имеет несколько функций обратного вызова мыши
Обратный вызов мыши
Обратный звонок в движении

Вы можете использовать обратный вызов, чтобы выяснить движение мыши, остальное чисто математика.

2 голосов
/ 29 апреля 2011

Для пояснения: OpenGL не является ни библиотекой моделирования, ни графом сцены.Все, что делает OpenGL, это выбрасывает точки, линии и треугольники в буфер изображения.

Таким образом, сделать это чисто с OpenGL невозможно.Вам понадобится некоторый код моделирования для создания моделей из треугольников.Сделайте себе одолжение и:

  • смоделируйте ваши объекты с помощью 3D-моделира
  • , экспортируйте их в формат файла, который вы можете прочитать
  • , в вашей программе прочитайте эти файлы иотправьте сетки в OpenGL оттуда

Любая физическая симуляция (и ваша игра в пул требует ее) должна иметь доступ к геометрии объектов.И, как уже упоминалось, OpenGL не моделирует, поэтому, что бы вы ни рисовали с OpenGL, просто отправив его в OpenGL, не сделаете его доступным для физического моделирования.

Ваш код в любом случае неверен: между вызовами спецификации вершин допускаются толькоglBegin(...) и glEnd().Твои звонки glRotate, glTranslate и glutSolidCone там не разрешены.

1 голос
/ 20 апреля 2011

использует глобальную переменную, которая сохраняет положение курсора мыши, а затем использует ее в обеих функциях.

глобальные переменные, по-видимому, являются единственным способом связи между различными функциями, необходимыми для перестановки.Сделать это без них кажется очень сложным, учитывая текущую структуру opengl / glut.

...