JOGL和纹理问题

时间:2013-11-24 21:48:02

标签: opengl mapping textures jogl

我找不到在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图像

1 个答案:

答案 0 :(得分:0)

gl.glColor3i(1,1,1); 
           ^^^^^^^^ wat

glColor()

  

...   指定的有符号整数颜色分量线性映射到浮点值,使得最正的可表示值映射到1.0,最负的可表示值映射到-1.0。 (请注意,此映射不会将0精确转换为0.0。)   ...

因此,您将当前颜色设置为几乎为黑色(RGB(0,0,0))。

结合GL_MODULATE的默认texenv,所有传入的纹素将乘以接近零,接近于零。

切换到glColor3f(1,1,1)GL_DECAL