일식을 사용합니다. 그래서 내 작업 공간에서, 내 프로젝트 아래서, 나는 새 폴더 "res"를 만들었고, "png"라는 하위 폴더가 텍스처로 사용되었습니다. 그래서 여기에 방법 메신저는 텍스처를로드하기 위해 사용됩니다 :LWJGL 및 슬릭 텍스처가 검은 색으로 표시됩니다 ...?
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.FileNotFoundException;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.newdawn.slick.Color;
import org.newdawn.slick.opengl.Texture;
import org.newdawn.slick.opengl.TextureLoader;
import org.newdawn.slick.util.ResourceLoader;
import org.lwjgl.input.Mouse;
import java.util.Random;
public class TextureDemo
{
public int count = 0;
private static Texture wood;
Random random = new Random();
public TextureDemo()
{
initGL(640, 480, "SLICK TEXTURES");
loadTexture("mozilla");
int x = 100, y = 100, count = 0, width = 0, height = 0, counter = 10;
while(true)
{
count++;
if(count == counter)
{
x--; y--; width++; height++; counter += random.nextInt(50) + 1;
}
render(x, y, width, height);
Display.update();
Display.sync(60);
if(Display.isCloseRequested())
{
Display.destroy();
System.exit(0);
}
}
}
private void initGL(int width, int height, String title)
{
try
{
Display.setDisplayMode(new DisplayMode(width, height));
Display.setTitle(title);
Display.create();
}
catch(LWJGLException e)
{
e.printStackTrace();
Display.destroy();
System.exit(1);
}
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
GL11.glDisable(GL11.GL_COLOR_MATERIAL);
GL11.glLoadIdentity();
GL11.glOrtho(0, width, height, 0, 1, -1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
}
public void loadTexture(String key)
{
try
{
wood = TextureLoader.getTexture("PNG", ResourceLoader.getResourceAsStream("./res/images/"+key+".png"));
System.out.println("working." + wood.getTextureID());
}
catch(FileNotFoundException e)
{
e.printStackTrace();
Display.destroy();
System.exit(1);
}
catch(IOException e)
{
e.printStackTrace();
}
}
public void render(int x, int y, int width, int height)
{
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
System.out.println("working." + wood.getTextureID());
GL11.glBindTexture(GL11.GL_TEXTURE_2D, wood.getTextureID());
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0, 0);
GL11.glVertex2f(x, y);
GL11.glTexCoord2f(1, 0);
GL11.glVertex2f(x + wood.getImageWidth(), y);
GL11.glTexCoord2f(1, 1);
GL11.glVertex2f(x + wood.getImageWidth(), y + wood.getImageHeight());
GL11.glTexCoord2f(0, 1);
GL11.glVertex2f(x, y + wood.getImageHeight());
GL11.glEnd();
GL11.glDisable(GL11.GL_BLEND);
System.out.println(wood.getHeight()+ " " +wood.getWidth());
}
public static void main (String[] args)
{
new TextureDemo();
}
}
왜 왜 왜 내 텍스처 검은 색 롤입니까? 내 코드가 어떻게 이런 일을하는지 이해하지 못한다. 내 컴퓨터에 문제가 생길 수 있습니까?
* "그러나 코드에 많은 문제가 있습니다."* : 모든 문제를 지적 해 주시겠습니까? –
사과드립니다. 그들은 나쁜 코드보다 실천이 좋지 않습니다. getHeight/width 메서드가 텍스쳐를 참조하고 있으므로 텍스쳐 크기로 좌표를 설정하는 것이 이상하게 보일 것이라고 가정합니다. 텍스처를 바인딩하고 gl 호출을 사용하는 동일한 메소드를 통해 정점 위치를 전달하는 것은 지저분한 일이며 쿼드는 자주 사용되지 않습니다. 또한 렌더링 후에 텍스처를 바인딩 해제해야합니다. – Apcragg
나는 그것을 오픈 GL에 묶어 놓았다. 검은 색 쿼드로 표시됩니다. 여러 다른 이미지를 시도했는데 크기가 다르고 모든 힘이 2입니다. 나무는 텍스처 이름입니다. ill 메소드를 업데이트하십시오. – user2727211