2013-08-12 13 views
1

html에서는 JSONLoader를 사용하여 obj (.js 파일을 Blender 2.66에서 내보내는 중)를로드합니다. 내 obj를로드 한 후 ThreeCSG를 사용하여 큐브를 뺍니다. 달성하고자하는 효과는 횡단면과 같습니다. 이제 csg 작업이 정상적으로 작동합니다. 문제는 csg 작업 후에 원래 색을 유지할 수 없다는 것입니다.csg 작업 후 원본 색 유지 방법 (ThreeCSG.js 사용)

예를 들어, A가 B를 뺀 후에, 메시가 A의 재질로 남아 있기를 바랍니다. 이미지와 다소 비슷합니다 (a.subtract (b)) csg.js website이 표시됩니다. 차이점은 모두 빨간색 (A 재료)이되기를 바랍니다. 그러나 obj에는 여러 색상과 더 복잡한 형상이 있기 때문에 더 복잡 할 수 있습니다.

여기 내 코드의 일부입니다.

loader.load("obj/blenderscene/FinFET2.4.js", createScene1); 

function createScene1(geometry, materials) { 

    mesh = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial(materials)); 

    var mesh_bsp = new ThreeBSP(mesh); 
    var cube_geometry = new THREE.CubeGeometry(2.5,7 , 7); 
    cube_geometry = new THREE.Mesh(cube_geometry ,new THREE.MeshLambertMaterial({ color: 0xff11ff, opacity: 0.9, shading: THREE.FlatShading, wireframe: true, wireframeLinewidth: 2, transparent: true })); 

    var cube_bsp = new ThreeBSP(cube_geometry); 
    var subtract_bsp = mesh_bsp.subtract(cube_bsp); 

    var result = subtract_bsp.toMesh(new THREE.MeshFaceMaterial(materials)); 
    result.geometry.computeVertexNormals(); 
    scene.add(result); 
} 

three.js를 버전은 R55이다.

내 가난한 영어로 죄송합니다. 도움이 필요합니다. 무슨 뜻인지 이해해 주실 수 있기를 바랍니다.

감사합니다.

답변

1

자료 색인을 올바르게 설정하십시오.

geometry.faces

에서 searchFace 같은 정점과 얼굴 searchFace로 result.geometry.faces 통해 재료

검색을

루프를 큐브 재료를 추가하는 방법에

발견 된 경우 검색 얼굴에 materialindex를 추가하십시오.

찾을 수없는 경우 th 중 2 개가있는 얼굴을 검색하십시오. E geometry.faces

을에 searchFace 동일 정점 geometry.faces

에 searchFace 같은 정점 1로, 얼굴 검색을 찾을 수없는 경우 다음 searchFace

을 얼굴의 MaterialIndex에 추가 찾으면

귀하의 제안에 대한 큐브 재료

+0

감사를 재료 인덱스를 추가 발견되지 않는 경우는 다음 searchFace

에 얼굴의 MaterialIndex에 추가 발견합니다. 대부분의 상황에서 잘 작동합니다. 그러나 단면의면은 원래 색상을 표시 할 수 없습니다. 예를 들어 [빨간색으로 표시된면] (http://ppt.cc/70Ey)에는 큐브의면과 공통된 정점이 없습니다. 이 문제를 해결하는 다른 방법이 있습니까? 내 생각에 나오는 아이디어는 가장자리를 사용하여 판단을 내리는 것입니다. 작동하면 공유해 드리겠습니다. – user2666495

+0

얼굴 좌표를 원래의 것으로 확인하고 각면의 재질 인덱스를 원래 값으로 설정하려고했습니다. 하지만 나를 위해 일하지 않습니다. – Deeps