THREE.ExtrudeBufferGeometry 的多边形很少
THREE.ExtrudeBufferGeometry has very few polygons
我有一个带有简单矩形的 SVG(虽然作为路径),我使用 THREE.SVGLoader 将其加载到我的应用程序中,如下所示:https://threejs.org/examples/#webgl_loader_svg,并使用此代码:
const paths = paths_.paths
const geometry = new THREE.Geometry()
for (let i = 0; i < paths.length; i++) {
const path = paths[i]
const shapes = path.toShapes(false)
for (let j = 0; j < shapes.length; j++) {
const shape = shapes[j]
const shape3d = new THREE.ExtrudeBufferGeometry(shape, {
depth: 0.1,
bevelThickness: 2,
bevelSize: 1.5,
bevelSegments: 5,
bevelEnabled: true
});
const edgeGeometry = new THREE.Geometry().fromBufferGeometry(shape3d)
geometry.merge(edgeGeometry)
}
}
geometry.computeFaceNormals()
geometry.mergeVertices()
geometry.computeVertexNormals()
geometry.center()
return geometry
我创建了一个几何体并从中创建了一个 3d 网格。
问题在于 ExtrudeBufferGeometry 使用(我认为)Earcut 三角剖分来创建构成路径形状的多边形,因此,在其顶面和底面上没有很多三角形我的网格。
我需要很多面,因为我想使用这个库 https://github.com/drawcall/threejs-mesh-modifiers 来弯曲网格,但是如果没有很多面,那将不会很好,如下图所示:
我尝试使用 SubdivisionModifier 添加多边形,但它没有用,因为它产生了奇怪的孔洞和人工制品(此库中有一条评论说修改器不能很好地处理锐边)。
我什至尝试使用 CSG 库,通过它我将这个挤压网格与具有许多段的 BoxGeometry 网格相交并且它有效但它也产生了孔和工件。
似乎 THREE.ExtrudeBufferGeometry 创建的几何体没有 100% 正确的法线。
总的来说,我尝试了很多东西,例如:标志、计算顶点法线、面法线、平面着色、平滑着色、更改了 ExtrudeBufferGeometry 的所有参数,但似乎没有任何效果。
非常感谢任何帮助!
使用此解决方案: I managed to use the manthrax version CSG library in order to intersect a specific box with my object and get back an object with added polygons on top and bottom :
我有一个带有简单矩形的 SVG(虽然作为路径),我使用 THREE.SVGLoader 将其加载到我的应用程序中,如下所示:https://threejs.org/examples/#webgl_loader_svg,并使用此代码:
const paths = paths_.paths
const geometry = new THREE.Geometry()
for (let i = 0; i < paths.length; i++) {
const path = paths[i]
const shapes = path.toShapes(false)
for (let j = 0; j < shapes.length; j++) {
const shape = shapes[j]
const shape3d = new THREE.ExtrudeBufferGeometry(shape, {
depth: 0.1,
bevelThickness: 2,
bevelSize: 1.5,
bevelSegments: 5,
bevelEnabled: true
});
const edgeGeometry = new THREE.Geometry().fromBufferGeometry(shape3d)
geometry.merge(edgeGeometry)
}
}
geometry.computeFaceNormals()
geometry.mergeVertices()
geometry.computeVertexNormals()
geometry.center()
return geometry
我创建了一个几何体并从中创建了一个 3d 网格。
问题在于 ExtrudeBufferGeometry 使用(我认为)Earcut 三角剖分来创建构成路径形状的多边形,因此,在其顶面和底面上没有很多三角形我的网格。
我需要很多面,因为我想使用这个库 https://github.com/drawcall/threejs-mesh-modifiers 来弯曲网格,但是如果没有很多面,那将不会很好,如下图所示:
我尝试使用 SubdivisionModifier 添加多边形,但它没有用,因为它产生了奇怪的孔洞和人工制品(此库中有一条评论说修改器不能很好地处理锐边)。
我什至尝试使用 CSG 库,通过它我将这个挤压网格与具有许多段的 BoxGeometry 网格相交并且它有效但它也产生了孔和工件。
似乎 THREE.ExtrudeBufferGeometry 创建的几何体没有 100% 正确的法线。
总的来说,我尝试了很多东西,例如:标志、计算顶点法线、面法线、平面着色、平滑着色、更改了 ExtrudeBufferGeometry 的所有参数,但似乎没有任何效果。
非常感谢任何帮助!
使用此解决方案: