所以基本上,在制作游戏时。我没有使用某些颜色的大块来制作地形,而是决定尝试拍摄已有的地形图片。所以我继续学习本教程: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个以上解决的答案。没有工作,但这种方式有所作为。