Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java openglload&;将png渲染到屏幕_Java_C++_Opengl_Graphics_Jogl - Fatal编程技术网

Java openglload&;将png渲染到屏幕

Java openglload&;将png渲染到屏幕,java,c++,opengl,graphics,jogl,Java,C++,Opengl,Graphics,Jogl,我正在尝试将一个十字线png加载到我用OpenGL开发的游戏中,更准确地说是JOGL 十字线应加载到屏幕的中心 然而,即使在扫描了几个小时的互联网后,我仍然没有找到一种简单的方法,用JOGL将PNG渲染到屏幕上,我相信这是非常容易的 我找到的所有答案都是关于纹理的,而这不是我想要的,因为我不打算为此制作一个对象——只是在需要时在屏幕上显示它 编辑: 在eldo的建议下,尝试在显示方法中执行以下操作: gl.glPushMatrix(); gl.glEnable(GL2.GL_TE

我正在尝试将一个十字线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不会“忘记”它的实际状态,并按照你的意愿渲染你的图像。但只需几个步骤,您就可以在完成所有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

在此之后,你可以在屏幕中间画一个四边形的四边形。 你不能只在屏幕中间轻松地绘制一幅图像,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

在此之后,你可以在屏幕中间画一个四边形的四边形。 “我相信有些事情很简单”其实不是。OpenGL不是这样工作的。如果要渲染图像,必须为其制作纹理。至少在现代OpenGL中,“我不打算为此制作对象”,OpenGL没有对象的概念。它在屏幕上绘制点、线和三角形。听起来你想要一个更高层次的框架或引擎,而不是OpenGL。@NicolBolas我明白了。所以你说我必须把它放在这个世界上,然后对它应用纹理?@ColonelThirtyTwo你说得对,我说得不准确。我已经为游戏中的每个对象创建了Java对象,它保存了数据(在本例中,是指向它的resource.obj文件的路径,以及额外的数据,如在世界中的位置等)。这就是为什么我说object。看看Hello纹理“我相信很简单的东西”,其实不是。OpenGL不是这样工作的。如果要渲染图像,必须为其制作纹理。至少在现代OpenGL中,“我不打算为此制作对象”,OpenGL没有对象的概念。它在屏幕上绘制点、线和三角形。听起来你想要一个更高层次的框架或引擎,而不是OpenGL。@NicolBolas我明白了。所以你说我必须把它放在这个世界上,然后对它应用纹理?@ColonelThirtyTwo你说得对,我说得不准确。我已经为游戏中的每个对象创建了Java对象,它保存了数据(在本例中,是指向它的resource.obj文件的路径,以及额外的数据,如在世界中的位置等)。这就是我为什么说object。看看Hello纹理,除了禁用深度测试之外,这都是旧的、不推荐的OpenGL。@Colonel三十二,它仍然是一个有效的解决方案,可以用新的东西替换。这不是一个有效的解决方案,只是一个例子或概念。此外,他没有提供任何代码,因此无法回答他需要的问题。我添加了一些由于某种原因无法工作的代码。。。你能看一下吗?@Jjang“其他东西”看起来就像它应该的样子?看起来你好像陷入困境了。@Jjang我看不到你所有的代码,我甚至不是一个专家,但这里有一个纹理的工作示例:除了禁用深度测试,这都是旧的、不推荐的OpenGL。@Colonel三十二,它仍然是一个工作解决方案,可以用新的东西替换。这不是一个有效的解决方案,只是一个例子或概念。此外,他没有提供任何代码,因此无法回答他需要的问题。我添加了一些由于某种原因无法工作的代码。。。你能看一下吗?@Jjang“其他东西”看起来就像它应该的样子?看起来你在一个角落里。@Jjang我看不到你所有的代码,我甚至不是专家,但这里有一个纹理的工作示例: