Я пытаюсь загрузить перекрестный png, который у меня есть, в игру, которую я разрабатываю с OpenGL, точнее, JOGL.
Перекрестие должно быть загружено в центр экрана.
Однако даже после сканирования интернета в течение нескольких часов — я не нашел способа просто рендерить png-файлы на экран с помощью JOGL, но я верю, что это довольно легко.
Все ответы, которые я нашел, касались текстур, и это не то, что я искал, так как я не планирую делать объект для этого — просто показывать его на экране при необходимости.
После совета Эльдо попытался сделать следующее в методе отображения:
gl.glPushMatrix();
gl.glEnable(GL2.GL_TEXTURE_2D);
try {
Texture text = TextureIO.newTexture(getClass().getResourceAsStream("/misc/crosshair.png"),true, "png");
gl.glTexParameteri( GL2.GL_TEXTURE_2D,GL2.GL_TEXTURE_WRAP_T, GL2.GL_REPEAT );
gl.glTexParameteri( GL2.GL_TEXTURE_2D,GL2.GL_TEXTURE_WRAP_S, GL2.GL_REPEAT );
text.bind(gl);
} catch (GLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
float sizeX = 20, sizeY = 20, sizeZ = 20;
gl.glBegin(GL2.GL_QUADS);
// create crosshair square
gl.glTexCoord2d(0, 0);
gl.glVertex3d(0, sizeY, 0);
gl.glTexCoord2d(1, 0);
gl.glVertex3d(sizeX, sizeY, 0);
gl.glTexCoord2d(1, 1);
gl.glVertex3d(sizeX, sizeY, sizeZ);
gl.glTexCoord2d(0, 1);
gl.glVertex3d(0, sizeY, sizeZ);gl.glEnd();
gl.glPopMatrix();
Однако результат, который я получаю (другой материал — просто стены):
Вы не можете просто нарисовать изображение, которое легко в середине вашего экрана, OpenGL не «забудет» его фактическое состояние и отобразит ваше изображение, как вы хотите. Но в нескольких шагах вы можете сделать его в состоянии нарисовать его после того, как вы закончили рендеринг всех ваших 3D-материалов.
gl.glMatrixMode(GL.GL_PROJECTION); //reset the projection matrix
gl.glLoadIdentity();
gl.glOrtho(left, right, bottom, top, near, far);//change to orthographic projection
gl.glMatrixMode(GL.GL_MODELVIEW);// reset the modelview matrix
gl.glLoadIdentity();
gl.glDisable(GL.GL_DEPTH_TEST);//disable depth test
//draw 2D stuff here
После этого вы можете нарисовать квад по центру экрана с текстурой перекрестия.
Других решений пока нет …