Ich spiele gerade mit ThreeJS decals. Ich konnte einen schönen Fleck auf meine Kugel legen.Aktualisierung DecalGeometry Vertices, UVs,
Hier ist der Code, mit dem ich den Aufkleber auf meiner Kugel "anlege". (Ich habe einige benutzerdefinierten Klassen, aber keine Sorge darüber.
// Create sphere
var mainMesh = new THREE.Mesh(
new THREE.SphereGeometry(7, 16, 16),
new THREE.MeshBasicMaterial({ color: 0x00a1fd })
);
// Declare decal material
var decalMaterial = new THREE.MeshPhongMaterial({
color : 0xff0000,
specular : 0x444444,
map : TextureLoader.instance.getTexture('http://threejs.org/examples/textures/decal/decal-diffuse.png'),
normalMap : TextureLoader.instance.getTexture('http://threejs.org/examples/textures/decal/decal-normal.jpg'),
normalScale : new THREE.Vector2(1, 1),
shininess : 30,
transparent : true,
depthTest : true,
depthWrite : false,
polygonOffset : true,
polygonOffsetFactor : -4,
wireframe : false
});
// Create decal itself
var decal = new THREE.Mesh(
new THREE.DecalGeometry(
mainMesh,
new THREE.Vector3(0, 2.5, 3),
new THREE.Vector3(0, 0, 0),
new THREE.Vector3(8, 8, 8),
new THREE.Vector3(1, 1, 1)
),
decalMaterial.clone()
);
// Add mesh + decal + helpers
scene.add(
mainMesh,
new THREE.HemisphereLight(0xffffff, 0, 1),
decal,
new THREE.WireframeHelper(decal, 0xffff00)
);
decal.add(new THREE.BoxHelper(decal, 0xffff00));
Jetzt woud, Ich mag diesen Fleck auf meiner Sphäre bewegen und damit aktualisieren, um die Geometrie meines Abziehbild.
Leider wenn ich decal.geometry.computeDecal()
, das Netz des Aufklebers rufe nicht aktualisiert. ich keine Lösung dazu finden.
function moveDecal()
{
decal.translateX(1);
decal.geometry.computeDecal();
};
nach der DecalGeometry
Klasse, die Funktion computeDecal
bereits auf true gesetzt verschiedene Mitglieder erforderlich aktualisieren Eckpunkte, Spalte Oder, UVs, ....
this.computeDecal = function() {
// [...]
this.verticesNeedUpdate = true;
this.elementsNeedUpdate = true;
this.morphTargetsNeedUpdate = true;
this.uvsNeedUpdate = true;
this.normalsNeedUpdate = true;
this.colorsNeedUpdate = true;
};
Vielen Dank für Ihre Hilfe! : D
PS: ThreeJS r80
Mmmh, so dass Sie meine, ich habe keine andere Wahl, als mein Abziehbild mit einer neuen jedes Mal, wenn ich es verschieben möchten zu ersetzen? – Hellium
@WestLangley Was bedeutet "du kannst nicht" in diesem Zusammenhang? Meinst du, Three.js wird diese Werte nicht intern aktualisieren? Wenn ja, wissen Sie, warum die Bibliothek keine Warnung oder einen Fehler auslöst, wenn Benutzer versuchen, eine unveränderbare Eigenschaft zu aktualisieren? – duhaime