0
我有这样定义(与所有关于颜色和非位置东西的代码中省略)的IcosahedronGeometry顶点位置对象:three.js所 - 在另一个
var radius = 200;
geometry = new THREE.IcosahedronGeometry(radius, 2);
var materials = [
new THREE.MeshPhongMaterial({}),
new THREE.MeshBasicMaterial({})
];
group1 = THREE.SceneUtils.createMultiMaterialObject(geometry, materials);
group1.position.x = 0;
// rotate a bit just so it spins off-axis
group1.rotation.x = -1.87;
这产生一个几乎是球形的,多对一双面形状。 我想在这个形状的几个顶点处放置小球体。假设有10个球体。我这样做是通过复制10个顶点到一个数组,像这样:
var vertexArray = [];
for (var i = 0; i < 10; i++) {
vertexArray.push(geometry4.vertices[i])
}
然后,我用的是载体复制到vertexArray
设置位置关闭精灵:
for (var i = 0; i < vertexArray.length; i++) {
var loader = new THREE.TextureLoader()
var spriteMaterial = new THREE.SpriteMaterial(
{
map: loader.load('/glow.png'),
blending: THREE.AdditiveBlending,
side: THREE.BackSide
})
var sprite = new THREE.Sprite(spriteMaterial)
sprite.position.set(vertexArray[i].x, vertexArray[i].y, vertexArray[i].z)
// do i need rotate these by the same amount?
sprite.rotation.x = -1.87
scene.add(sprite)
}
这一切工作正常,除了Sprites不符合二十面体上的实际顶点,他们只是随机地(看似)坐在脸上的某个地方。偶尔一个精灵会坐在一个顶点上。
我复制顶点错了,还是在这里丢失了一个步骤?
尝试'group1.add(精灵)',来代替。不要设置'sprite.rotation'。 – WestLangley
哇,就是这样,谢谢。那么你可以将场景中的任何物体添加到同一场景中的其他物体上吗? – volx757
是的。 ---------- – WestLangley