1
我目前在玩ThreeJS decals。我已經能夠在我的球體上留下美麗的污點。更新DecalGeometry頂點,UVs,
這是我用來在我的球體上「應用」貼花的一段代碼。 (我有一些自定義類,但不用擔心這一點。
// 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()
,貼花的網格不更新,我找不到這方面有任何解決方案。
function moveDecal()
{
decal.translateX(1);
decal.geometry.computeDecal();
};
按照DecalGeometry
類,功能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