【问题标题】:Problems with JOGL and TextureJOGL 和纹理的问题
【发布时间】: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


    【解决方案1】:
    gl.glColor3i(1,1,1); 
               ^^^^^^^^ wat
    

    glColor():

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

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

    结合GL_MODULATE 的默认纹理环境,所有传入的纹理元素将乘以接近零,得到接近零。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多