Java 使用纹理对象,使用JOGL绘制基本纹理
我试图让我的应用程序的用户能够加载他们选择的图像来制作背景。通过Java加载图像是没有问题的,但我无法将图像转换成纹理……我的画布上只有一个灰色的大方框。这是我目前掌握的代码: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 =
//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
时要小心,它只支持凸多边形。