2013-02-13 5 views
0

Im, создавая что-то в JOGL и im, чтобы заставить камеру двигаться с помощью клавиатуры или мыши, это действительно не имеет значения, если камера может обтекать объект и, возможно, увеличивать и уменьшать масштаб , Если использовать клавиатуру/мышь трудно, я также не возражаю использовать некоторые кнопки в приложениях, например. стрелки вверх, вниз, влево и вправо и кнопка «плюс» и «минус» для увеличения, но в основном проще всего. Im строит что-то вроде Лего, но его оказалось довольно сложным, не имея возможности переместить камеру.JOGL - перемещение камеры

+1

В чем вопрос? –

+0

Покажите нам какой-то код и что вы уже пытаетесь переместить камеру. –

+0

Вопрос в том, есть ли у кого-нибудь что-нибудь, что может это сделать? Я абсолютно не знаю, как это сделать, в то время как ive получил клавиши со стрелками, вращающие объект, но это не то, что я хочу – thrash

ответ

7

Чтобы переместить вашу «камеру», вам необходимо применить преобразование glTranslate3f() в начале вашей функции рендеринга. Если местоположение вашей камеры должна быть

cameraPos = <cx, cy, cz> 

, то вы должны использовать

glTranslate3f(-cx, -cy, -cz); 

Это компенсирует все, что обращается к этому вектору.

Чтобы использовать клавиатуру, чтобы это произошло, вы захотите использовать реализацию KeyListener и определить функции, указанные интерфейсом.

public void keyPressed(KeyEvent ke){ // put something intelligent here... } 
public void keyReleased(KeyEvent ke){} 
public void keyTyped(KeyEvent ke){} 

Убедитесь, что зарегистрировать реализующий класс как KeyListener вашему GLJPanel (или любой другой, который вы используете). Затем внутри функции keyPressed (...) проверьте, какая клавиша нажата, и увеличивайте соответствующую координату камеры.

Если вы хотите получить действительно фантазию и позволить мыши, чтобы вы могли осмотреться, вы можете сделать подобное, создав MouseMotionListener и зарегистрировав его. Преобразование OpenGL, которое необходимо для включения в игру, может варьироваться в зависимости от типа поведения мыши, которое вы ищете. Если вам просто нужно что-то простое, что позволит вам осмотреться, вы, вероятно, можете уйти с отслеживанием движения мыши в направлениях x и y и позволить ему изменять некоторые углы смещения. Перемещение мыши в направлении x вращается вокруг оси y. Движение в направлении y вращается вокруг оси x. Как вызов OpenGL, как и с glTranslate3f(), вы можете использовать glRotatef() для поворота вокруг каждой оси.

glRotatef(angleX, 1, 0, 0); // to rotate about the x-axis 
glRotatef(angleY, 0, 1, 0); // to rotate about the y-axis 

Опять же, это просто быстрое и простое решение. Это не будет красиво, но это сработает. Если вы хотите реализовать что-то немного странное, вы можете посмотреть на вычисление матрицы вращения произвольной оси.

http://inside.mines.edu/~gmurray/ArbitraryAxisRotation/
(один из многих ресурсов на эту тему)

1

Вы можете использовать функцию под названием «gluLookAt (позиция х, положение у, положение г, х, где камера смотрит, у из где камера смотрит, z где камера смотрит, 0, 1, 0);

Что касается части «0, 1, 0», оставьте их такими, какие они есть, поскольку вы просто панорамируете и увеличиваете масштаб. Это просто влияет на наклон камеры.

Смежные вопросы