JOGL,在使用纹理图像后,颜色关闭

时间:2017-04-25 17:49:38

标签: java image textures jogl

所以基本上,在制作游戏时。我没有使用某些颜色的大块来制作地形,而是决定尝试拍摄已有的地形图片。所以我继续学习本教程:https://www.tutorialspoint.com/jogl/jogl_3d_cube.htm

我设法让图片出现在屏幕上但由于某种原因,颜色总是稍微变暗。我取出了所有现有的物体,看看它们是否对图像产生了影响,但它仍然保持不变。所以现在它在“虚空”中独自存在。背景是黑色顺便说一句。

哦,如果你想知道有关更新,暂停和恢复方法的评论,那些方法并不是真正需要的。 SceneObject是一个场景对象,意味着它对场景(世界)有影响,它可以做东西(更新)绘制(drawInternal)和暂停/恢复(影响更新和绘制的行为,节省暂停时间主要是由于定时器(炸弹等...))。

哦,为什么我有一个布尔(doneLoading)来创建图像?通常我会在MapTexture()上完成它,就像所有的sceneObjects一样,但由于它需要gl,我将它的创建延迟到第一次运行draw方法。它似乎有效,唯一的问题是颜色略有差异,再次稍暗。

package backGround;

import java.io.IOException;
import java.net.URL;

import javax.media.opengl.GL2;
import javax.media.opengl.GLException;

import com.jogamp.opengl.util.texture.Texture;
import com.jogamp.opengl.util.texture.TextureIO;

public class MapTexture extends cgglClasses.SceneObject{

private int texture;
private boolean doneLoading = false;

public MapTexture(){

}
@Override
public void update(long currentMs, long deltaMs, float deltaS) {
    // probably does nothing?
}
@Override
protected void drawInternal(GL2 gl) {
    if(!doneLoading){
        try {
            //gl.glEnable(GL2.GL_TEXTURE_2D);
            URL url = getClass().getResource("/resourcesImg/e1.jpg");
            Texture t = TextureIO.newTexture(url, true, null);
            //Texture t = TextureIO.newTexture(img, true);
            texture = t.getTextureObject(gl);
            //gl.glClearColor(0f,0f,0f,0f);
            //gl.glClearDepth(1f);
            gl.glShadeModel(GL2.GL_SMOOTH);
            gl.glHint(GL2.GL_PERSPECTIVE_CORRECTION_HINT, GL2.GL_NICEST);
            doneLoading = true;
        } catch (GLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //gl.glDisable(GL2.GL_TEXTURE_2D);
    gl.glEnable(GL2.GL_TEXTURE_2D);

    gl.glPushMatrix();

    //gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);
    //gl.glEnable(GL2.GL_TEXTURE_2D);
    //gl.glLoadIdentity();
    gl.glTranslatef(0f, 0f, 10f);
    gl.glBindTexture(GL2.GL_TEXTURE_2D, texture);
    gl.glBegin(GL2.GL_QUADS);
        gl.glTexCoord2f(0f, 0f); gl.glVertex3f(-10f, 0f, -10f);
        gl.glTexCoord2f(1f, 0f); gl.glVertex3f(10f, 0f, -10f);
        gl.glTexCoord2f(1f, 1f); gl.glVertex3f(10f, 0f, 10f);
        gl.glTexCoord2f(0f, 1f); gl.glVertex3f(-10f, 0f, 10f);
    gl.glEnd();

    //

    gl.glPopMatrix();

    gl.glDisable(GL2.GL_TEXTURE_2D);
    //gl.glEnable(GL2.GL_TEXTURE_2D);

}

@Override
public void pause() {
    // does absolutely nothing
}
@Override
public void resume() {
    //as above so below
}
}

因此,如果您对丢失的链接有任何疑问,请回复。它可能是一个我想念的小事,但我似乎无法找到它。

****************************更新****************** **************

好吧,不知怎的,它固定了,但有一些严重的黑客攻击。随机插入Hackerman meme。

所以我注意到,当我试图在应该出现在屏幕上的文本上使用颜色(文本不是纹理)时,我使用红色使其变得明显。现在我无法找到文本,而是之前的整个以前的纹理都是超级红色。就像红色和黑色一样。它看起来像熔岩,很酷,但很奇怪。所以我尝试使用黑色,正如预期的那样全黑。然后我尝试了白色和瞧。最后纹理有我真正想要的真实颜色。

所以在gl.glBindTexture之前(GL2.GL_TEXTURE_2D,纹理);我刚刚添加了gl.glColor3f(1f,1f,1f);它代表RGB中的白色。

为什么它可以工作,我猜测红色留在那里影响图像颜色矩阵,使用白色它现在影响所有颜色。有没有更好的方法来解决或我错过了什么。我已经按照教程进行操作,并且必须尝试使用​​与我的代码类似的5个以上解决的答案。没有工作,但这种方式有所作为。

0 个答案:

没有答案