gpt4 book ai didi

javascript - 从 Three.js 几何体中删除重复的顶点

转载 作者:行者123 更新时间:2023-12-03 03:27:09 26 4
gpt4 key购买 nike

我在从 SphereGeomerty 中删除重复顶点时遇到问题。我想去掉几何体侧面的接缝,因为如果我更新顶点位置,它就不能很好地对齐。

问题是我无法使用过滤后的顶点位置列表创建新的几何图形,我得到一个

[.Offscreen-For-WebGL-000001B883B499D0]GL ERROR :GL_INVALID_OPERATION : glDrawElements: attempt to access out of range vertices in attribute 0

错误。

更奇怪的是,如果我将原始顶点列表放回 bufferGeometry 则不会渲染任何内容,但错误消失了:

let positions = sphere.attributes.position.array;
filteredGeometry.addAttribute( 'position', new BufferAttribute( positions, 3 ) );

我正在过滤这样的顶点:

function removeDuplicateVertices(vertices) {
var positionLookup = [];
var final = [];

for( let i = 0; i < vertices.length-3; i += 3 ) {
var index = vertices[i] + vertices[i + 1] + vertices[i + 2];

if( positionLookup.indexOf( index ) == -1 ) {
positionLookup.push( index );
final.push(vertices[i])
final.push(vertices[i+1])
final.push(vertices[i+2])
}
}
return final;
}

最佳答案

SphereBufferGeometry 使用索引属性。所以顶点数组不直接存储三 Angular 形,而只存储点。三 Angular 形由附加索引属性构造而成,其中包含每个三 Angular 形位置属性的三个索引。如果修改位置属性,则必须相应地更新索引属性。

或者您可以使用geometry.toNonIndexed()将“位置+索引”格式转换为“仅位置”格式。

另请查看 Geometry.mergeVertices()函数,它完全执行您正在做的事情,仅适用于常规(非缓冲区)几何图形。这个is also called当构建常规 SphereGeometry 时,也许这已经有帮助了?

关于javascript - 从 Three.js 几何体中删除重复的顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46267844/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com