.tga 파일에서 텍스처를로드하는 .obj 및 .mtl이 있습니다. 이 모든 것은 3D 모델링 소프트웨어에서 잘 작동하는 것처럼 보이지만 객체의 자식 중 일부 (특히 무릎과 송아지 사이에 포켓과 다리와 같이)가 아닌 three.js (THREE.WebGLRenderer({ antialias: true })
)가로드되면 투명 한 들쭉날쭉 한 간격/빈 삼각형이있는 것 같습니다.ThreeJS : 일부 텍스처 표면/삼각형이 렌더링되지 않습니다.
threejsHelper.helpers.loadObject('objects/pants/MaleBaggyPants.obj', 'objects/pants/MaleBaggyPants.mtl', {
blinn1SG: (new THREE.MeshPhongMaterial({ color: 0xffffff, transparent: false, opacity: 1.0, overdraw: 0.5, map: threejsHelper.helpers.loadTexture(app.manager, 'objects/pants/button.tga') })),
blinn2SG: (new THREE.MeshPhongMaterial({ color: 0xffffff, transparent: false, opacity: 1.0, overdraw: 0.5, map: threejsHelper.helpers.loadTexture(app.manager, 'objects/pants/back.tga') })),
blinn4SG: (new THREE.MeshPhongMaterial({ color: 0xffffff, transparent: false, opacity: 1.0, overdraw: 0.5, map: threejsHelper.helpers.loadTexture(app.manager, 'objects/pants/front.tga') })),
blinn5SG: (new THREE.MeshPhongMaterial({ color: 0xffffff, transparent: false, opacity: 1.0, overdraw: 0.5, map: threejsHelper.helpers.loadTexture(app.manager, 'objects/pants/pocket.tga') })),
blinn6SG: (new THREE.MeshPhongMaterial({ color: 0xffffff, transparent: false, opacity: 1.0, overdraw: 0.5, map: threejsHelper.helpers.loadTexture(app.manager, 'objects/pants/back.tga') })),
blinn7SG: (new THREE.MeshPhongMaterial({ color: 0xffffff, transparent: false, opacity: 1.0, overdraw: 0.5, map: threejsHelper.helpers.loadTexture(app.manager, 'objects/pants/front.tga') }))
}, function (object) {
object.rotation.x = (-90*Math.PI/180);
object.rotation.z = (-90*Math.PI/180);
app.scene.add(object);
app.ready = true;
});
도우미 함수 :
...
loadTexture: function (manager, path) {
var texture;
if (path.split('.').pop() == 'tga') {
var loader = new THREE.TGALoader();
texture = loader.load(path);
} else {
texture = new THREE.Texture();
var loader = new THREE.ImageLoader(manager);
loader.load(path, function (image) {
texture.image = image;
texture.needsUpdate = true;
});
}
return texture;
},
loadMaterial: function (mtlPath, textures, complete) {
var loader = new THREE.MTLLoader();
loader.load(mtlPath, function (materials) {
materials.preload();
if (!!materials.materials) {
for (var key in materials.materials) {
if (key in textures) {
materials.materials[key] = textures[key];
}
}
}
complete(materials);
});
},
loadObject: function (objPath, mtlPath, textures, complete) {
app.helpers.loadMaterial(mtlPath, textures, function (materials) {
var loader = new THREE.OBJLoader();
loader.setMaterials(materials);
loader.load(objPath, function (object) {
complete(object);
});
});
},
...
로더 기능 (는 등의 오버 드로 값을 변경 투명도를 오프, 안티 앨리어싱 온 시도)
'material.side = THREE.DoubleSide'로 설정하십시오. 또한 오버 드로를 제거하십시오 - 그것은'CanvasRenderer'만을위한 것입니다. – WestLangley
@WestLangley 팁 주셔서 감사! 그럼에도 불구하고 그 차이는 여전히 존재합니다. * (CanvasRenderer를 사용하여 다시 시도해보십시오.'var renderer = window.WebGLRenderingContext? 새 THREE.WebGLRenderer (antialias : true)) : 새 THREE.CanvasRenderer();') * –
라이브 예제. 문제가 중복되는 더 간단한 obj 파일을 작성하고 관련성이 없어야하므로 텍스처를 제거하십시오. – WestLangley