【问题标题】:Looping through array and adding object to scene for each entry adds objects to the same position循环遍历数组并将对象添加到每个条目的场景将对象添加到相同的位置
【发布时间】:2019-09-25 10:05:06
【问题描述】:

我正在尝试为数组中的每个项目向我的 three.js 场景中添加一个对象。我无法判断所有对象是否都添加到场景中,因为它们都添加到相同的位置,而且我不知道如何更改每个对象的位置。

下面是代码循环并为数组中的每个项目添加一个立方体:

var geometry = new THREE.BoxGeometry( 1, 1, 1 );
var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
var cube = new THREE.Mesh( geometry, material );

getData()
async function getData() {
    const response = await fetch('/api/indexvr');
    const data = await response.json();
    console.log(data)

    for (var i=0; i<data.length; i++) {
        try {
        scene.add( cube );
        // cube.position.y = i //1++
        } catch (e) {
            console.error(e)
        }
    }
}   

camera.position.z = 5;

我也尝试过在 for 循环中声明立方体及其位置,但这也不起作用。我需要所有对象都是可见的,并且它们的位置是动态的,具体取决于数组中的数量,例如像相机周围的圆圈,如果超过 10/15,将 y 轴增加 4 并再次继续圆圈。我不知道如何或找到帮助文档。有什么想法或链接可以提供帮助吗?提前致谢。

编辑: 使用从 Mugen87 收到的代码,立方体现在看起来像这样。

【问题讨论】:

  • 您需要为每个要显示的东西创建一个新的网格。换句话说,如果您想在屏幕上看到 10 个立方体,那么您需要调用 new THREE.Mesh(...) 10 次并将它们中的每一个添加到场景中。
  • 那么根本就没有办法通过遍历 for 循环或 for each 来添加网格?

标签: three.js virtual-reality


【解决方案1】:

像这样尝试(如果@gman 实现反馈):

var geometry = new THREE.BoxGeometry( 1, 1, 1 );
var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );

getData()
async function getData() {
    const response = await fetch('/api/indexvr');
    const data = await response.json();
    console.log(data)

    for (var i=0; i<data.length; i++) {

        var cube = new THREE.Mesh( geometry, material );
        cube.position.y = i;
        scene.add( cube );

    }
}   

camera.position.z = 5;

【讨论】:

  • 谢谢,我已经添加了您的代码生成的图像。每次我尝试将它们分开时,都会出错。 Three.js 不宽容。
  • “出现错误”是什么意思?你能发布错误信息吗?或者也许用这个活生生的例子来证明这个问题? jsfiddle.net/antmLfuq
  • 不再有错误,我错误地乘以“i”。这是我的代码,但它不适用于您发送的代码笔 jsfiddle.net/dp26z3ba 我已经添加了另一个立方体现在看起来的图像。他们只是看起来一点也不像样,但正在变得更好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-27
  • 2020-12-11
相关资源
最近更新 更多