2013-08-29 3 views
0

일식을 사용합니다. 그래서 내 작업 공간에서, 내 프로젝트 아래서, 나는 새 폴더 "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(); 


} 

}

왜 왜 왜 내 텍스처 검은 색 롤입니까? 내 코드가 어떻게 이런 일을하는지 이해하지 못한다. 내 컴퓨터에 문제가 생길 수 있습니까?

답변

0

죄송합니다. 그러나 코드에 많은 문제가 있습니다. OpenGL 튜토리얼을 살펴 보는 것이 좋습니다. arcsynthesis 하나는 매우 깊이있다.

당신의 문제는 텍스처 "나무"가 결코 OpenGL에 묶여 있지 않다는 것입니다.

OpenGL을 컨텍스트로 텍스처를 결합하기 위해 당신의 glBegin 전에

glBindTexture(GL_TEXTURE_2D, id); 

()를 호출해야합니다

ID가 매끄러운 UTIL 방법 glGentextures 또는 귀하의 경우 생성 된 텍스처 ID입니다. 목재 란 무엇입니까? 첫 번째 코드 블록에서는 텍스처 ID이지만 두 번째 블록에서는 'getHeght()'를 호출합니다. 나는 '나무'가 무엇인지 혼란 스럽다.

어느 쪽이든, 그것을 사용하기 위해 OpenGL 용 텍스처를 바인딩해야하고 다시 OpenGL 기본에 대한 자습서를 살펴볼 것을 권장합니다.

+0

* "그러나 코드에 많은 문제가 있습니다."* : 모든 문제를 지적 해 주시겠습니까? –

+0

사과드립니다. 그들은 나쁜 코드보다 실천이 좋지 않습니다. getHeight/width 메서드가 텍스쳐를 참조하고 있으므로 텍스쳐 크기로 좌표를 설정하는 것이 이상하게 보일 것이라고 가정합니다. 텍스처를 바인딩하고 gl 호출을 사용하는 동일한 메소드를 통해 정점 위치를 전달하는 것은 지저분한 일이며 쿼드는 자주 사용되지 않습니다. 또한 렌더링 후에 텍스처를 바인딩 해제해야합니다. – Apcragg

+0

나는 그것을 오픈 GL에 묶어 놓았다. 검은 색 쿼드로 표시됩니다. 여러 다른 이미지를 시도했는데 크기가 다르고 모든 힘이 2입니다. 나무는 텍스처 이름입니다. ill 메소드를 업데이트하십시오. – user2727211

0

같은 질문을 두 번 묻는 것은 도움이되지 않습니다. 그러나 glBegin을 시작하기 전에 먼저 glBindTexture으로 전화해야합니다.

+0

흰색으로 바뀌면 ... – user2727211

0

질감을 사용 설정하지 않았습니다. initGL 메소드에서 GL11.glEnable (GL11.GL_TEXTURE_2D)을 호출하십시오.

관련 문제