Выдавливать геометрию в тройке - PullRequest
0 голосов
/ 22 марта 2019

В настоящее время я загружаю объект STL в мою сцену three.js.

По некоторым причинам требуется много ресурсов графического процессора для рендеринга / анимации, замедляя всю сцену, поэтому я рассматривал альтернативы.

Поскольку это довольно простая фигура, я подумал, что могу использовать создание 2D-фигуры и выдавливать ее.

3D-фигура представляет собой квадратную рамку ( это фоторамка ), без кривых или любой другой умной геометрии.

Первоначально я думал о создании 4х трехмерных продолговатых изображений, поворачивая каждый из них на 90 градусов и размещая их прямо в сцене, чтобы она выглядела как рамка - но это не идеально.

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

And here's a preview of the STL model

Итак, как альтернатива загрузке модели STL в сцену, как я могу создать эту фигуру в three.js ( с пустым пространством в центре ), а затем выдавить ее, чтобы придать ей некоторую глубину?

1 Ответ

1 голос
/ 23 марта 2019

Пример базовой экструзии: Shape -> ExtrudeGeometry -> Mesh

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>
...