JOGL — open GL — сохранение части мира неподвижным при перемещении остальной части

#java #opengl #camera #jogl

#java #opengl #камера #jogl

Вопрос:

Я вроде как новичок в JOGL, и я работаю над игрой. У меня есть ракета, звезды на заднем плане и планеты. Я хочу, чтобы ракета оставалась неподвижной в нижней части экрана, нужно нажать кнопку GO, а затем планеты начнут снижаться, чтобы ракета могла их избежать.

Я продолжаю заканчивать тем, что нажимаю go, планеты падают (через перевод), и ракета также падает. Я знаю, почему это происходит при перемещении камеры, поэтому движется весь мир. Я пытался использовать PushMatrix и PopMatrix, но безуспешно.

т. е.

 if (goButtonPressed)  
{
    //gl.glTranslatef(0.0f,0.3f,0f);   // this line just keeps the whole thing still  
    drawRocket(gl);                    // I was trying to 'undo' the translation  
    gl.glPushMatrix();  
    gl.glMatrixMode(GL.GL_PROJECTION);  
    gl.glTranslatef(0.0f, -0.3f, 0f);  
    gl.glPopMatrix();  
}
  

Возможно ли то, что я пытаюсь сделать в opengl? Я делаю это слишком сложным?

Ответ №1:

Вместо того, чтобы полагаться на проекционную матрицу для сохранения состояния позиций ваших ракет, как насчет сохранения этой информации в вашем собственном коде, а затем передачи абсолютных координат в JOGL? Затем обновление положения объекта может быть выполнено с помощью более очевидного фрагмента кода, такого как rocket.y = dy; .

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

Ответ №2:

Не совсем ответ на ваш вопрос, но вам следует взглянуть на jMonkeyEngine, если вы хотите создать игру с opengl на Java.

http://jmonkeyengine.com/

То, что вы пытаетесь сделать, безусловно, возможно с opengl и довольно легко сделать с помощью jMonkeyEngine. На их сайте есть множество руководств и тому подобного.