【问题标题】:Three.js r125 BufferGeometry `vertices` does not existThree.js r125 BufferGeometry `vertices` 不存在
【发布时间】:2021-03-31 01:16:51
【问题描述】:

我正在更新 Three.js,我发现当我升级到 r125 时,由于缺少方法,尝试在 BufferGeometry 上设置 vertices 失败。它似乎也删除了verticesNeedUpdatemigration guide 似乎没有对此发出警告,changelog 似乎也没有从我所见的情况下解决它。

很遗憾,我没有编写原始代码,所以我不确定如何解决它。代码如下所示:

this.geometry.vertices[0].x = this.geometry.vertices[2].x = -this.canvas.width / 2;
this.geometry.vertices[1].x = this.geometry.vertices[3].x = this.canvas.width / 2;
this.geometry.vertices[0].y = this.geometry.vertices[1].y = this.canvas.height / 2;
this.geometry.vertices[2].y = this.geometry.vertices[3].y = -this.canvas.height / 2;
this.geometry.verticesNeedUpdate = true;

使用下方 Don 的回答进行更新

在应用 Don 建议的更改后,我们得出以下结论:

    const negativeWidth = -this.canvas.width / 2;
    const positiveWidth = this.canvas.width / 2;
    const positiveHeight = this.canvas.height / 2;
    const negativeHeight = -this.canvas.height / 2;

    this.geometry.attributes.position.setXY(0, negativeWidth, positiveHeight);
    this.geometry.attributes.position.setXY(1, positiveWidth, positiveHeight);
    this.geometry.attributes.position.setXY(2, negativeWidth, negativeHeight);
    this.geometry.attributes.position.setXY(3, positiveWidth, negativeHeight);
    this.geometry.attributes.position.needsUpdate = true;

【问题讨论】:

    标签: three.js


    【解决方案1】:

    three.js r125 的第一个变更日志条目是相关的:

    几何图形已从核心中移除。它现在位于examples/jsm/deprecated/Geometry.js

    THREE.Geometry 类已被弃用一段时间,但项目存储库之外的一些旧代码和示例仍然引用它。推荐的替换是THREE.BufferGeometry,它的性能更高。 BufferGeometry 类没有 .vertices 属性,因此这可能是您看到的特定错误的原因。相反,您可以像这样更新顶点:

    geometry.attributes.position.setXYZ( index, x, y, z );
    geometry.attributes.position.needsUpdate = true;
    

    【讨论】:

    • 这很完美!我正在更新我的问题以包含现代版本的代码。谢谢!
    • 我正忙着寻找这个 - 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 2018-10-09
    • 1970-01-01
    • 2016-07-26
    • 2017-09-22
    • 1970-01-01
    • 2016-08-08
    • 2013-12-16
    相关资源
    最近更新 更多