Ich arbeite daran, das Beispiel für das Laden von Objekten auf der Beispielseite THREE.js anzupassen, damit die geladenen Objekte ihre Gesichter auswählen und färben können. Meine allgemeine Strategie bestand darin, die beschriebenen Schritte here zu folgen.THREE.js obj loader mit Gesichtsauswahl
Da ich jedoch keine THREE.geometry-Objekte verwende, habe ich Probleme, diese Strategie mit dem OBJ-Loader-Code zusammenzufügen.
Ich habe derzeit ray Schnittpunkt funktioniert so weiß ich, wenn ich auf das Objekt klicken, habe ich nur Probleme beim Färben der Gesichter. Ich weiß, ich muss anwenden: vertexColors: THREE.FaceColors
auf das obj Material und das ist, wo ich feststecke.
Mein aktueller obj Lade Code lautet wie folgt:
var loader = new THREE.OBJLoader(manager);
loader.load(path, function (object) {
object.traverse(function (child) {
if (child instanceof THREE.Mesh) {
var faceColorMaterial = new THREE.MeshBasicMaterial({ color: 0xff00ff, vertexColors: THREE.VertexColors });
child.material = faceColorMaterial;
child.geometry.addAttribute("color", new THREE.BufferAttribute(new Float32Array(3 * 3), 3));
child.geometry.dynamic = true;
}
});
scene.add(object);
targetList.push(object);
}, onProgress, onError);
Und meine Erkennung und Farbcode:
var vector = new THREE.Vector3(mouse.x, mouse.y, 1);
vector.unproject(camera);
var ray = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize());
var intersects = ray.intersectObjects(targetList, true);
if (intersects.length > 0) {
var colorArray = intersects[0].object.geometry.attributes.color.array;
var face = intersects[0].face;
colorArray[face.a] = 1;
colorArray[face.a + 1] = 0;
colorArray[face.a + 2] = 0;
colorArray[face.b] = 1;
colorArray[face.b + 1] = 0;
colorArray[face.b + 2] = 0;
colorArray[face.c] = 1;
colorArray[face.c + 1] = 0;
colorArray[face.c + 2] = 0;
intersects[0].object.geometry.attributes.color.needsUpdate = true;
}
Als ich das laufen, mein Ziel ist schwarz, und wenn ich die Gesichter klicken, sie ändern ihre Farbe nicht.
Wie kann ich meinen Code ändern, damit die Änderungen bei der Auswahl farblich markiert werden?
Meine Geometrie hat kein Farbattribut. Wie gehe ich vor, um das zu reparieren? Ich habe vertexColors in THREE.VertexColors für mein Material aktualisiert. – Glynbeard
Ich habe das colors-Attribut der puffergeometry hinzugefügt. Ich sehe immer noch nichts, wenn ich mich überschneide. – Glynbeard
Ich habe meinen obigen Code aktualisiert, um die von Ihnen vorgeschlagenen Änderungen wiederzugeben. – Glynbeard