我有一个像这样定义的IcosahedronGeometry(包含有关颜色和非位置内容的所有代码):
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
的向量来设置Sprite的位置:
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没有与二十面体上的实际顶点对齐,它们只是随意地(看似)坐在脸上的某个地方。偶尔Sprite会精确地坐在顶点上。
我是否错误地复制了顶点,或者错过了这里的一步?
答案 0 :(得分:0)
将对象添加为父对象的子对象,子对象将与父对象一起旋转。
请改用此模式:
var sprite = new THREE.Sprite( spriteMaterial );
sprite.position.copy( vertexArray[i] );
group1.add( sprite );
three.js r.76