2012-05-28 4 views
2

Three.js 라이브러리의 Collada loader를 통해 가져온 간단한 3D 모델의 모든 텍스처를 바꿀 수 있습니까?Collada 가져온 텍스처를 Three.js의 ShaderMaterial 텍스처로 대체하는 방법은 무엇입니까?

ShaderMaterial을 통해 색상, 반사 및 법선 매핑을 모델의 재료 이름으로 지정하고 "-color", "-normal"및 "-spec"을 추가하여 모델에 적용하는 것이 목표로하고 싶습니다. "문구 :

"brochureFrontCover "->"brochureFrontCover-color.jpg ","brochureFrontCover-normal.jpg ","brochureFrontCover-spec.jpg "

좋은 영혼이 나를 보여줄 수 있다면 어떻게 같은 기능을해야 나는 매우 감사 할 것입니다.

스크립트 : http://dev.printhouse.co.uk/uv-simulator/j/Brochure.js

콜라다 모델 : http://dev.printhouse.co.uk/uv-simulator/m/Brochure.dae

답변

1

내가 이런 식으로 뭔가해야한다고 생각 : 당신이 유니폼을 조정할 필요가 있다면

THREE.SceneUtils.traverseHierarchy(dae, function (child) { 

    if (child.material) { 

     var shader = THREE.ShaderUtils.lib[ "normal" ]; 
     var uniforms = THREE.UniformsUtils.clone(shader.uniforms); 

     uniforms[ "tDiffuse" ].texture = THREE.ImageUtils.loadTexture(child.material.name + "-color.jpg"); 
     uniforms[ "tNormal" ].texture = THREE.ImageUtils.loadTexture(child.material.name + "-normal.jpg"); 
     uniforms[ "tSpecular" ].texture = THREE.ImageUtils.loadTexture(child.material.name + "-spec.jpg"); 

     uniforms[ "enableDiffuse" ].value = true; 
     uniforms[ "enableSpecular" ].value = true; 

     child.geometry.computeTangents(); 

     child.material = new THREE.ShaderMaterial({ 
      uniforms: uniforms, 
      vertexShader: shader.vertexShader, 
      fragmentShader: shader.fragmentShader, 
      lights: true 
     }); 

    } 

}); 

This example이 좋은 참고해야한다 .

+0

감사합니다. mrdoob! 스크립트를 업데이트하고'GL_INVALID_OPERATION : glDrawXXX : 범위 정점을 벗어난 접근 시도'오류가 발생했습니다. 'dae' 인자가 모델의 계층 구조에서 특정 레벨을 호출해야합니까 ('dae = collada.scene; '로 설정 했습니까?)? – ALx

+0

오 이런! 자, 그냥'child.material = new THREE.MeshBasicMaterial ({wireframe : true});을 실행하여 시작하면됩니다. 적어도 그것이 작동하는지 알기 위해서 ... – mrdoob

+0

네, 멋진 와이어 프레임 모델을 보여줍니다. 그래서 당신은 어떻게 생각하십니까? – ALx

관련 문제