我找不到在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图像
答案 0 :(得分:0)
gl.glColor3i(1,1,1);
^^^^^^^^ wat
... 指定的有符号整数颜色分量线性映射到浮点值,使得最正的可表示值映射到1.0,最负的可表示值映射到-1.0。 (请注意,此映射不会将0精确转换为0.0。) ...
因此,您将当前颜色设置为几乎为黑色(RGB(0,0,0)
)。
结合GL_MODULATE
的默认texenv,所有传入的纹素将乘以接近零,接近于零。
切换到glColor3f(1,1,1)
或GL_DECAL
。