#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.
То, что вы пытаетесь сделать, безусловно, возможно с opengl и довольно легко сделать с помощью jMonkeyEngine. На их сайте есть множество руководств и тому подобного.