2013-10-14 2 views
0

Blender3D에서 검을 만들고 삼각형 모델 .OBJ 형식으로 내 보낸 다음 .MTL 파일을 생성하고 UV 매핑을 사용하여 텍스처를 만들었습니다. 내가 .PNG 형식으로 내 보낸 모델.LWJGL에서 3D 모델을 3D 모델로로드하는 방법

LWJGL의 검 모델에 검 텍스처를로드하려면 어떻게해야합니까?

큐브를 사용하여이를 수행하는 방법에 대한 자습서 만 찾을 수 있지만 게임은 MineCraft의 복제 고양이가 아니므로 큐브는 나에게 유용하지 않습니다.

누구든지 나를 도와 줄 수 있습니까?

명확화 : 여기서 알기 쉬운 것은 적절한 OBJ 파일과 함께 MTL 파일을 가져 와서 LWJGL 환경에서 OBJ 개체에 MTL 자료를 적용하는 방법입니다.

+0

그래서 무엇을 시도 했습니까? – Vallentin

+0

@Vallentin 나는이 사람과 똑같은 일을하려하고있다. LWJGL에서 내 .OBJ 3D 모델에 텍스처를로드하는 데 도움이 필요합니다. 지금까지 Slick-Util 텍스처 로더를 사용해 보았습니다.하지만 (질문에서 언급했듯이) 큐브에서만 작동하는 것 같습니다 : c Idk 다른 것을 시도해보십시오. 저는 여기 뉴비입니다. 정말로 힘들어합니다. 내 머리카락을 당길 준비가되었습니다. D ': – FreelanceCoder

+0

@FreelanceCoder는 내 대답을 읽으면서 그것을하는 방법에 대한 아이디어를 줄 것입니다. – Vallentin

답변

1

기본적으로 당신은 class OBJModel 같은 것을 만들 수 다음 파면 된 .obj 파일을로드하고 class OBJModel의 인스턴스를 반환하는 OBJModelLoader.load(final InputStream is); 있습니다. 당신이 내부의 어떤 모든 일을 알고하지 않으면 class OBJModel

, 당신은 모델

로드 등 정점, 법선, 텍스처 좌표,면, 재료,

를 저장하는 몇 가지 배열을 가질 것

: .OBJ 파일 수단은, 당신은 당신이 OBJModel load() 방법을 얼마나 그냥 아이디어를 제공하기 위해 Wikipedia click here

에 대한 모든 것을 읽을 수 있습니다, 여기에 생각이다

public final static OBJModel load(final InputStream is) 
{ 
    final OBJModel model = new OBJModel(); 

    try (final BufferedReader br = new BufferedReader(new InputStreamReader(is))) 
    { 
     String line; 

     while ((line = br.readLine()) != null) 
     { 
      if (line.isEmpty() || (line.charAt(0) == '#')) 
      { 
       continue; 
      } 

      if (line.contains("#")) 
      { 
       line = line.substring(0, line.indexOf('#')); 
      } 

      line = line.trim(); 

      if (line.isEmpty()) 
      { 
       continue; 
      } 

      if (line.startsWith("v ")) 
      { 
       String[] xyz = line.split(" "); 

       float x = Float.parseFloat(xyz[1]); 
       float y = Float.parseFloat(xyz[2]); 
       float z = Float.parseFloat(xyz[3]); 

       model.addVertex(x, y, z); 

       continue; 
      } 
      else if (line.startsWith("vn ")) 
      { 
       String[] xyz = line.split(" "); 

       float x = Float.parseFloat(xyz[1]); 
       float y = Float.parseFloat(xyz[2]); 
       float z = Float.parseFloat(xyz[3]); 

       model.addNormal(x, y, z); 

       continue; 
      } 
      else if (line.startsWith("vt ")) 
      { 
       String[] uv = line.split(" "); 

       float u = Float.parseFloat(uv[1]); 
       float v = Float.parseFloat(uv[2]); 

       model.addTextureCoordinate(u, v); 

       continue; 
      } 
      else if (line.startsWith("f ")) 
      { 

나는 당신에게 당신이 그것을 어떻게 완성해야하는지에 대한 아이디어를주기 위해 이것을 만들었습니다. 당신은 텍스처 좌표 정점을 렌더링 할 때 정기적으로 할 것이다 당신이 모델을 렌더링 할 때 모델

렌더링

잘 단지를 않습니다.

블렌더는 모든 올바른 텍스처 좌표를 제공하므로 모든 꼭지점을 텍스처 좌표로 렌더링하기 전에 블렌드해야합니다.

사용중인 OpenGL의 버전에 따라 다르지만 모델 저장 및 렌더링에는 VAOs을 사용하는 것이 좋습니다. VAOs을 사용할 수없는 경우 gl*Pointer 호출을 사용하여 일반 VBOs을 사용하고 렌더링에는 직접 모드를 사용하지 마십시오.

관련 문제