Three.js - 在另一个

时间:2016-05-13 19:17:25

标签: javascript three.js

我有一个像这样定义的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会精确地坐在顶点上。

我是否错误地复制了顶点,或者错过了这里的一步?

1 个答案:

答案 0 :(得分:0)

将对象添加为父对象的子对象,子对象将与父对象一起旋转。

请改用此模式:

var sprite = new THREE.Sprite( spriteMaterial );

sprite.position.copy( vertexArray[i] );

group1.add( sprite );

three.js r.76