私は現在ThreeJS decalsで遊んでいます。私は私の球面に美しい汚れをつけることができました。DecalGeometry頂点、UVの更新
私の球にデカールを「適用」するために使用するコードです。 (私はいくつかのカスタムクラスを持っているが、これについては心配しないでください。
// 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));
を今、私は自分の球でこの汚れを移動し、したがって、私のデカールのジオメトリを更新したいとwoud。残念ながら
私はdecal.geometry.computeDecal()
を呼び出すときに、デカールのメッシュが更新されません。私はこれについての解決策を見つけることができません。DecalGeometry
クラスによると、機能computeDecal
が既に更新に必要な真の様々なメンバーに設定
function moveDecal()
{
decal.translateX(1);
decal.geometry.computeDecal();
};
頂点、col UVなど)。
this.computeDecal = function() {
// [...]
this.verticesNeedUpdate = true;
this.elementsNeedUpdate = true;
this.morphTargetsNeedUpdate = true;
this.uvsNeedUpdate = true;
this.normalsNeedUpdate = true;
this.colorsNeedUpdate = true;
};
ありがとうございました! :D
PS:ThreeJS r80
Mmmhので、あなたは、私は新しいものと私はそれを移動するたびに、私のデカールを交換するしかないわけ? – Hellium
@WestLangleyこの文脈では「あなたができない」とは何ですか?あなたはThree.jsがこれらの値を内部的に更新しないことを意味しますか?その場合、ユーザーが不変プロパティを更新しようとすると、ライブラリが警告またはエラーをスローしない理由を知っていますか? – duhaime