OpenGL加载和渲染png到屏幕
OpenGL load & render png to screen
我正在尝试加载十字准线 png 我必须使用 OpenGL 开发的游戏,更准确地说是 JOGL。
十字准线应加载到屏幕中央。
然而,即使在互联网上浏览了几个小时之后 - 还没有找到一种方法来简单地使用 JOGL 将 png 渲染到屏幕上,我认为这很容易。
我找到的所有答案都是关于纹理的,这不是我要找的,因为我不打算为此制作对象 - 只是在需要时在屏幕上显示它。
编辑:
在 eldo 的建议下,尝试在显示方法中执行以下操作:
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();
但是我得到的结果是(其他东西只是墙):
这是十字准线 png:
您不能只在屏幕中间轻松绘制图像,OpenGL 不会 'forget' 它的实际状态并按照您的意愿渲染图像。但是在完成所有 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
在此之后,您可以在屏幕中间绘制一个带有十字准线纹理的四边形。
我正在尝试加载十字准线 png 我必须使用 OpenGL 开发的游戏,更准确地说是 JOGL。
十字准线应加载到屏幕中央。
然而,即使在互联网上浏览了几个小时之后 - 还没有找到一种方法来简单地使用 JOGL 将 png 渲染到屏幕上,我认为这很容易。
我找到的所有答案都是关于纹理的,这不是我要找的,因为我不打算为此制作对象 - 只是在需要时在屏幕上显示它。
编辑:
在 eldo 的建议下,尝试在显示方法中执行以下操作:
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();
但是我得到的结果是(其他东西只是墙):
这是十字准线 png:
您不能只在屏幕中间轻松绘制图像,OpenGL 不会 'forget' 它的实际状态并按照您的意愿渲染图像。但是在完成所有 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
在此之后,您可以在屏幕中间绘制一个带有十字准线纹理的四边形。