javascript - 在 Three.js 中拉伸(stretch)几何图形

标签 javascript svg three.js computational-geometry

我目前正在将 STL 对象加载到我的 Three.js 场景中。

出于某种原因,渲染/动画需要大量 GPU 资源,从而减慢整个场景的速度,因此我一直在考虑替代方案。

由于它是一个非常简单的形状,我想我可以使用创建 2D 形状并拉伸(stretch)它。

3D 形状是一个方形框架(它是一个相框),没有曲线或任何其他巧妙的几何形状。

最初,我考虑创建 4x 3D 椭圆形,将每个椭圆形旋转 90 度,并将它们恰好放置在场景中,使其看起来像一个框架 - 但这并不理想。

Here's a 2D shape  (it's perfectly square):

And here's a preview of the STL model

因此,作为将 STL 模型加载到场景中的替代方案,我如何在 Three.js 中创建此形状(中心有空白空间),然后挤压它以赋予其一定的深度?

最佳答案

基本挤压示例:Shape -> ExtrudeGeometry -> 网格

const { renderer, scene, camera } = initThree();


//Create a frame shape..
var frame = new THREE.Shape();
frame.moveTo(-4, -3);
frame.lineTo( 4, -3);
frame.lineTo( 4,  3);
frame.lineTo(-4,  3);

//..with a hole:
var hole = new THREE.Path();
hole.moveTo(-3, -2);
hole.lineTo( 3, -2);
hole.lineTo( 3,  2);
hole.lineTo(-3,  2);
frame.holes.push(hole);

//Extrude the shape into a geometry, and create a mesh from it:
var extrudeSettings = {
    steps: 1,
    depth: 1,
    bevelEnabled: false,
};
var geom = new THREE.ExtrudeGeometry(frame, extrudeSettings);
var mesh = new THREE.Mesh(geom, new THREE.MeshPhongMaterial({ color: 0xffaaaa }));


scene.add(mesh);
renderer.render(scene, camera);
body {
    margin: 0;
    overflow: hidden;
}
canvas {
    display: block;
}
<script src="//cdnjs.cloudflare.com/ajax/libs/three.js/102/three.min.js"></script>
<script src="//cdn.rawgit.com/Sphinxxxx/298702f070e34a5df30326cd9943260a/raw/16afc701da1ed8ed267a896907692d8acdce9b7d/init-three.js"></script>

关于javascript - 在 Three.js 中拉伸(stretch)几何图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55302470/

相关文章:

javascript - 在客户端JS中加密请求参数,在Java中解密请求参数(Spring Controller )

javascript - 在 AngularJS 中手动加载和卸载外部 javascript

.net - <%%> 之间的 JavaScript 参数

javascript - 无法更改用作 alphaMap 的纹理的偏移/重复

javascript - 使用变量作为类名

javascript - 是否可以在 SVG 元素内附加一个 div?

python - 鼠标悬停时显示文本 - 标题元素不一致,标题属性不执行任何操作

animation - SVG不在中心动画

javascript - 相对于点javascript放置对象

three.js - 如何将three.js旋转转换为 blender 旋转?