【发布时间】:2013-11-24 21:48:01
【问题描述】:
我找不到在我的 2D 游戏中正确使用 JOGL 和纹理的方法,这是我的代码:
初始化方法
public void init(GLAutoDrawable drawable) {
[...]
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
gl.glShadeModel(GL.GL_SMOOTH);
gl.glEnable(GL.GL_TEXTURE_2D);
gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL.GL_BLEND);
box.initTexture(gl, "image/tex1.png");
}
显示方式
public void display(GLAutoDrawable drawable) {
GL gl = drawable.getGL();
gl.glClear(GL.GL_COLOR_BUFFER_BIT);
gl.glLoadIdentity();
box.render(gl);
gl.glFlush();
}
Myclass.init
public boolean initTexture(GL gl,String textureName){
boolean ris=true;
try
{
Texture = TextureIO.newTexture(new File(textureName),false);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR);
}
catch (IOException ex)
{
System.err.println(ex);
ris=false;
}
return ris;
}
Myclass.render
public void render(GL gl){
gl.glTranslatef(X,Y,0.0f);
gl.glRotatef(Angle, 0.0f, 0.0f, 1.0f);
Texture.enable();
Texture.bind();
gl.glBegin(GL.GL_QUADS);
gl.glColor3i(1,1,1);
gl.glTexCoord2f(0, 0);
gl.glVertex2f(-Width/2,-Height/2);
gl.glTexCoord2i(0, 1);
gl.glVertex2f(-Width/2,Height/2);
gl.glTexCoord2i(1, 1);
gl.glVertex2f(Width/2,Height/2);
gl.glTexCoord2i(1, 0);
gl.glVertex2f(Width/2,-Height/2);
gl.glEnd();
gl.glLoadIdentity();
}
此代码显示一个空白屏幕,它没有给出任何类型的错误。我已经测试了这段没有纹理的代码,它工作得很好。
PS:我使用的纹理在 myprojectfolder\image\ 中,它是一个 128 x 128 像素的 png 图像
【问题讨论】:
标签: opengl mapping textures jogl