javascript - 使用 THREE.Points() 时出现 TypeError : can't convert undefined to object in Three. js

标签 javascript three.js

我的 Three.js 代码有问题。我想为我的太阳系统模拟器实现小行星带。所以我想使用 THREE.Point() 对象。 为此,我编写了一个函数,但它返回“类型错误”,如标题所示。

我在 Ubuntu 19.10 上使用 THREE.js 库,并且使用 Firefox 67.0.4。 Chrome 也有这个问题。 下面的代码位于我在 init() 函数中调用的 createAsteroidBelt() 函数中。

这是我的代码:我受到here的启发。 .

var dist = (data[jupiterId].distance + data[marsId].distance)/2;
var particleCount = 1000;
var asteroidsGeometry = new THREE.Geometry();

// now create the individual particles
for (let i = 0; i < particleCount; i++) {
    // create a particle with random position
    var asteroidOrbit = dist + THREE.Math.randFloat(-10, 10);
    var coord = new THREE.Vector3();
    coord.x = Math.cos(THREE.Math.randFloat(0, 2*Math.PI)) * asteroidOrbit;
    coord.y = THREE.Math.randFloat(-2, 2);
    coord.z = Math.sin(THREE.Math.randFloat(0, 2*Math.PI)) * asteroidOrbit;
    asteroidsGeometry.vertices.push(coord);
}

var asteroids = new THREE.Points(asteroidsGeometry, new THREE.PointsMaterial({
    size: 20
}));
asteroids.name = "Asteroid Belt";
planets[solarSystemId].add(asteroids);

错误正是在这一行:

var asteroids = new THREE.Points(asteroidsGeometry, new THREE.PointsMaterial({
    size: 20
}));

这里是错误的堆栈:

updateMorphTargets file:///.../libraries/three.min.js:672
ac file:///.../libraries/three.min.js:216
createAsteroidBelt file:///.../main.js:363
init file:///.../main.js:478
<anonima> file:///.../main.js:612

我不明白这个错误的原因。

错误已解决 感谢@jeffld 解决了这个错误。 现在我对这个小行星带的形状有疑问。它具有方形而不是环形。这是一张照片: Asteroid belt shape

最终解决方案 我也解决了最后一个错误。问题是我为 coordX 和 coordY 生成了不同的 Angular ,而不是使用相同的 Angular 。 这是代码的正确部分:

var asteroidOrbit = dist + THREE.Math.randFloat(-10, 10);
var angle = THREE.Math.randFloat(0, 2*Math.PI);
var coord = new THREE.Vector3();
coord.x = Math.cos(angle) * asteroidOrbit;
coord.y = THREE.Math.randFloat(-2, 2);
coord.z = Math.sin(angle) * asteroidOrbit;
asteroidsGeometry.vertices.push(coord);

非常感谢大家的帮助:)。

最佳答案

这是 Three.js 中的一个未决问题。

该对象缺少 morphAttributes 对象(即使它是空的)。

您可以通过在推送后添加以下行来解决此问题:

asteroidsGeometry.vertices.push(coord);
asteroidsGeometry.morphAttributes = {};

关于javascript - 使用 THREE.Points() 时出现 TypeError : can't convert undefined to object in Three. js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56870759/

相关文章:

javascript - 在 PhantomJS 上我不能包含 jQuery 并且没有 jQuery 我不能发布表单数据

javascript - D3 格式天到年

javascript - 在 Internet Explorer 中旋转时钟指针

javascript - 如何在 Three.js 中对网格的绘制进行动画处理

javascript - swfobject.embedSWF 不工作?

javascript - jquery textarea 在带有自定义弹出窗口的文本中添加链接

javascript - 如何重置 three.js 时钟?

opengl-es - 使用 2D 纹理解决方法的 WebGL/three.js 中的 3D 纹理?

javascript - 三个JS——如何在Animation中设置当前时间

javascript - 使用 PointerLockControls 时禁用转义选项