Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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 使用纹理对象,使用JOGL绘制基本纹理_Java_Opengl_Textures_Jogl - Fatal编程技术网

Java 使用纹理对象,使用JOGL绘制基本纹理

Java 使用纹理对象,使用JOGL绘制基本纹理,java,opengl,textures,jogl,Java,Opengl,Textures,Jogl,我试图让我的应用程序的用户能够加载他们选择的图像来制作背景。通过Java加载图像是没有问题的,但我无法将图像转换成纹理……我的画布上只有一个灰色的大方框。这是我目前掌握的代码: //if there's an image to overlay, render it if (renderImage) { gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); if (texture =

我试图让我的应用程序的用户能够加载他们选择的图像来制作背景。通过Java加载图像是没有问题的,但我无法将图像转换成纹理……我的画布上只有一个灰色的大方框。这是我目前掌握的代码:

  //if there's an image to overlay, render it
    if (renderImage) {

        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

        if (texture == null && img != null) {

            texture = TextureIO.newTexture(img, true);
            texture.enable();
            texture.bind();
        }

        gl.glBegin(GL.GL_POLYGON);
        gl.glNormal3f(0,0,1);
            gl.glTexCoord2d(-texture.getWidth(), -texture.getHeight());
            gl.glVertex2d(-25, -25);
            gl.glTexCoord2d(-texture.getWidth(), texture.getHeight());
            gl.glVertex2d(canvas.getWidth(),0);
            gl.glTexCoord2d(texture.getWidth(), texture.getHeight());
            gl.glVertex2d(canvas.getWidth(), canvas.getHeight());
            gl.glTexCoord2d(texture.getWidth(), -texture.getHeight());
            gl.glVertex2d(0, canvas.getHeight());
        gl.glEnd();
        gl.glFlush();
    }
    //otherwise, render "grass"
    else {

        gl.glClearColor(0.0f, 0.65f, 0.0f, 0.0f);

        //Clear buffer and set background color to green (the "grass" on the sides of the intersection)
        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
    }
试试这个:

gl.glBegin(GL.GL_QUADS);
gl.glNormal3f(0,0,1);
gl.glTexCoord2d(0.0, 0.0);
gl.glVertex2d(0.0, 0.0);
gl.glTexCoord2d(1.0, 0.0);
gl.glVertex2d(canvas.getWidth(), 0.0);
gl.glTexCoord2d(1.0, 1.0);
gl.glVertex2d(canvas.getWidth(), canvas.getHeight());
gl.glTexCoord2d(0.0, 1.0);
gl.glVertex2d(0.0, canvas.getHeight());
gl.glEnd();
默认情况下,非重复纹理坐标在0.0到1.0范围内。

尝试以下操作:

gl.glBegin(GL.GL_QUADS);
gl.glNormal3f(0,0,1);
gl.glTexCoord2d(0.0, 0.0);
gl.glVertex2d(0.0, 0.0);
gl.glTexCoord2d(1.0, 0.0);
gl.glVertex2d(canvas.getWidth(), 0.0);
gl.glTexCoord2d(1.0, 1.0);
gl.glVertex2d(canvas.getWidth(), canvas.getHeight());
gl.glTexCoord2d(0.0, 1.0);
gl.glVertex2d(0.0, canvas.getHeight());
gl.glEnd();
默认情况下,非重复纹理坐标在0.0到1.0范围内。

I put

  if (texture == null && img != null) {

        texture = TextureIO.newTexture(img, true);
        texture.enable();
        texture.bind();
    }
在一个try,catch语句中。

我把

  if (texture == null && img != null) {

        texture = TextureIO.newTexture(img, true);
        texture.enable();
        texture.bind();
    }

在一个try,catch语句中。

也许您没有注意标题,我想使用纹理对象来实现这一点,正是因为通过我从NEHE开始的几天的研究,这似乎是最新的、最简单的纹理方法。由于我使用JOGL的经验不足一周,我发现很难理解NEHE中发生的一切,我拒绝复制和粘贴代码,尤其是如果我不理解它。。。但是谢谢你的贡献,真的很有帮助。我还需要接受NeHe示例没有涵盖的.bmp、.png、.jpg和.gif图像文件。NeHe的教程确实使用纹理对象。也许你没有注意标题,我想使用纹理对象来实现这一点,正是因为通过我从NEHE开始的研究,这似乎是最新的、最简单的纹理方法。由于我使用JOGL的经验不足一周,我发现很难理解NEHE中发生的一切,我拒绝复制和粘贴代码,尤其是如果我不理解它。。。但是谢谢你的贡献,真的很有帮助。我还需要接受NeHe示例没有涵盖的.bmp、.png、.jpg和.gif图像文件。NeHe的教程确实使用纹理对象。做到了,geeze,这只是我的坐标……如果我将它们插入原始glBegin(GL.GL_多边形)之间,它也可以工作。谢谢没问题。使用
GL_POLYGON
时要小心,它只支持凸多边形。这样做了,geeze它只是我的坐标……如果我将这些坐标插入原始glBegin(GL.GL_POLYGON)之间,它也可以工作。谢谢没问题。使用
GL_POLYGON
时要小心,它只支持凸多边形。