OpenGL加载&渲染png到屏幕

时间:2016-07-18 22:27:23

标签: java c++ opengl graphics jogl

我试图加载一个十字线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();

然而,我得到的结果是(其他东西只是墙壁): enter image description here

这里是十字准线png: crosshair

1 个答案:

答案 0 :(得分:0)

您无法在屏幕中间轻松绘制图像,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

在此之后,您可以在屏幕中间绘制一个四边形,上面有十字准线纹理。