3d 모델을 블렌더에서 three.js 파일로 내 보냈습니다. 그것은 그것의 다른 부분에 적용되는 2 개의 재료가 있습니다. 여기에는 코드를 게시하지 않으므로 정점과 uv 좌표가 많이 있습니다. 나는 정말로 그것이 2 개의 물질을 가지고 있다는 것을 알 수있다. 그래서 나는 나의 오류가 내 three.js 코드에 있음을 확신한다. 0 개의 뼈, 모프 타겟, 색을 가지고 있습니다. 그게 내 응용 프로그램에 대한 중요하거나 안다면, 그래서 내 오류가 거기에 있을지 모르겠다. 여기 여러 재질의 메쉬 렌더링시 undef의 속성 'uniform'을 읽을 수 없습니다.
는 내가 지금까지 무엇을 가지고 :var camera, scene1, scene2, raycaster, renderer, staticMesh , loader;
var highlighted, standard;
var mouse = new THREE.Vector2(), INTERSECTED;
init();
animate();
function init() {
standard = new THREE.MeshLambertMaterial({ color: 0x9999ff });
highlighted = new THREE.MeshLambertMaterial({ color: 0xff0000 })
camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 1, 10000);
camera.position.z = 15;
scene1 = new THREE.Scene();
scene2 = new THREE.Scene();
loader = new THREE.JSONLoader();
loader.load("abs.json", function(geometry) {
var mesh = new THREE.Mesh(geometry, new THREE.MeshLambertMaterial({ color: 0x9999ff }));
//mesh.scale.set(10, 10, 10);
mesh.position.y = -6;
mesh.position.x = 0;
scene2.add(mesh);
});
loader.load("bodyTest.json", function(geometry, material) {
material[0] = new THREE.Mesh(geometry, new THREE.MeshLambertMaterial({ color: 0x9999ff }));
material[1] = new THREE.Mesh(geometry, new THREE.MeshLambertMaterial({ color: 0x9999ff }));
var materials = new THREE.MeshFaceMaterial(material);
staticMesh = new THREE.Mesh(geometry, materials);
scene1.add(staticMesh);
});
var directionalLight = new THREE.DirectionalLight(0xffffff);
directionalLight.position.set(-1, -1, -1).normalize();
scene1.add(directionalLight);
directionalLight = new THREE.DirectionalLight(0xffffff);
directionalLight.position.set(1, 1, 1).normalize();
scene1.add(directionalLight);
directionalLight = new THREE.DirectionalLight(0xffffff, .5);
directionalLight.position.set(1, 0, 0).normalize();
scene1.add(directionalLight);
directionalLight = new THREE.DirectionalLight(0xffffff, .5);
directionalLight.position.set(-1, 0, 0).normalize();
scene1.add(directionalLight);
raycaster = new THREE.Raycaster();
renderer = new THREE.WebGLRenderer({ antialiasing: true});
renderer.setClearColor(0xffffff);
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.sortObjects = false;
document.body.appendChild(renderer.domElement);
document.addEventListener('mousemove', onDocumentMouseMove, false);
window.addEventListener('resize', onWindowResize, false);
}
function onWindowResize() {
camera.aspect = window.innerWidth/window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
}
function onDocumentMouseMove(event) {
event.preventDefault();
mouse.x = (event.clientX/window.innerWidth) * 2 - 1;
mouse.y = - (event.clientY/window.innerHeight) * 2 + 1;
}
function animate() {
requestAnimationFrame(animate);
scene1.rotation.y += 0.007;
scene2.rotation.y += 0.007;
/*
var vector = new THREE.Vector3(mouse.x, mouse.y, 1).unproject(camera);
raycaster.set(camera.position, vector.sub(camera.position).normalize());
var intersects = raycaster.intersectObjects(scene2.children);
if (intersects.length > 0) {
if (INTERSECTED != intersects[ 0 ].object) {
if(staticMesh) staticMesh.material.materials[1] = staticMesh.currentMat;
INTERSECTED = intersects[ 0 ].object;
staticMesh.currentMat = staticMesh.material.materials[1]
staticMesh.material.materials[1] = highlighted;
}
} else {
if(staticMesh) staticMesh.material.materials[1] = staticMesh.currentMat;
INTERSECTED = null;
}
*/
renderer.render(scene2, camera);
renderer.render(scene1, camera);
}
당신은 이미 내가 오류에서 오는 줄 알았는데 부분을 주석 볼 수 있듯이. 나는 또한 renderer.render(scene1, camera);
가 주석 처리 된 상태로 실행하려고 시도했지만 오류가 없었습니다.
'material [0] = new THREE.Mesh (...)'??? – WestLangley
와우 !!! 나는 그것을 어떻게 놓쳤는가? 내가 그것을 볼 때마다 저는 LambertMaterial을 계속 보았습니다. 괜찮아 보인다. – Sammy