2013-08-06 2 views
2

내 libgdx 프로젝트에서 추가 재료를 모델에 추가하려고합니다. 사실, 나는 텍스처 조합을 얻을 필요가 있습니다 - 다음 재질의 텍스처는 이전 텍스처의 텍스처에 배치되어야합니다. 투명성이있는 경우도 있습니다. 그LibGDX에서 여러 재질 텍스처 합치기

Model knight = assets.get("data/g3d/knight.g3db", Model.class); 
    knightInstance = new ModelInstance(knight); 

    Material additionalMaterial = new Material(); 
    knightInstance.materials.add(additionalMaterial); 

    knightInstance.materials.get(0).clear(); 
    knightInstance.materials.get(0).set(TextureAttribute.createDiffuse(assets.get("data/g3d/checkboard.png", Texture.class))); 
    BlendingAttribute blendingAttribute1 = new BlendingAttribute(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA, 0.4f); 
    knightInstance.materials.get(0).set(blendingAttribute1); 

    knightInstance.materials.get(1).clear(); 
    knightInstance.materials.get(1).set(TextureAttribute.createDiffuse(assets.get("data/g3d/tiles.png", Texture.class))); 
    BlendingAttribute blendingAttribute2 = new BlendingAttribute(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA, 0.6f); 
    knightInstance.materials.get(1).set(blendingAttribute2); 

Offcorse 같은

무엇인가, 그것은 작동하지 않습니다. 첫 번째 소재 만 보입니다. LibGDX에서 그렇게 할 수 있습니까?

답변

1

NodePart 당 하나의 재질 (렌더링되는 실제 메쉬/재료 조합) 만있을 수 있습니다.

두 번째로 모델을 두 번 렌더링하고 다른 텍스처로 렌더링하려는 경우. 위에서 설명한 것처럼 두 개의 ModelInstance를 만들고 각각에 텍스처를 설정할 수도 있습니다.

두 개의 ModelInstance를 생성하지 않으려면 모델 (또는 모델 인스턴스) 내에 NodePart를 복제 할 수도 있습니다. 이 두 번째 NodePart에서 어떤 스킨/뼈가 정보를 제거 할 것을

Model knight = assets.get(...); 
NodePart part1 = knight.nodes.get(0).parts.get(0); 
NodePart part2 = new NodePart(part1.meshPart, new Material()); 
knight.nodes.get(0).parts.add(part2); 
part1.material.set(TextureAttribute.createDiffuse(texture1)); 
part2.material.set(TextureAttribute.createDiffuse(texture2)); 

참고 : 모델을 가정하면, 이것은 다음과 같이 할 수있는 한 부분에 하나 개의 노드가 있습니다. 모델이 애니메이션/스킨 인 경우 뼈 배열을 복사하고 포즈를 바인딩해야합니다.

깊이 테스트에 따라이 방법 (NodePart를 두 번 렌더링)은 예상대로 작동하지 않을 수 있습니다. 그리고 그것이 효과가 있다면, 나는 그것을 추천하지 않을 것이다. 대신 셰이더를 사용하여 두 텍스처를 결합해야합니다.

각 재료 속성은 기본적으로 셰이더 유니폼을 나타냅니다. 두 텍스처를 결합하려면 실제 렌더링을 구현하는 셰이더를 만들어야합니다. 다음으로 셰이더에서 사용할 재질에 두 개의 TextureAttributes (다른 유형)를 추가 할 수 있습니다. 다음을보십시오 : http://blog.xoppa.com/using-materials-with-libgdx/ 예를 들어 자세히 설명합니다.

관련 문제