【问题标题】:ThreeJS Cut the corners of the depth of an ExtrudeGeometry shapeThreeJS切割ExtrudeGeometry形状深度的角落
【发布时间】:2020-06-23 07:08:50
【问题描述】:

我在 Threejs 中使用一些顶点创建了一个 3D 形状 (THREE.Shape)。然后我使用 ExtrudeGeometry 使其成为 3D看形状。我需要这个边缘切割成 45 度的形状。但主要问题是我必须切割几何图形的拉伸部分的边缘。我无法在任何地方找到任何单一的解决方案。 我会尽力让您了解真正的需求。

我想剪切挤出部分的边缘而不是面部。您可以查看下图以供参考

所以记住这不是形状的脸。没有拉伸部分的简单形状看起来像这样

谁能帮我解决这个问题?如果他能帮助我解决这个问题,他将非常感激。

【问题讨论】:

  • 45 度的概念是一个等腰直角三角形,这是我在回答中提供的。这是来自学校的几何课程。

标签: javascript three.js geometry


【解决方案1】:

你如何做的一个选项:

var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(60, innerWidth / innerHeight, 1, 100);
camera.position.set(0, 0, 20);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(innerWidth, innerHeight);
document.body.appendChild(renderer.domElement);

var controls = new THREE.OrbitControls(camera, renderer.domElement);

var w = 1;
var h = 3;
var d = 10;

var pts = [
  new THREE.Vector2(-w, h),
  new THREE.Vector2(-w, -h),
  new THREE.Vector2(w, -w),
  new THREE.Vector2(w, w)
]

var shape = new THREE.Shape(pts);
var shapeGeom = new THREE.ExtrudeBufferGeometry(shape, {
  depth: d * 2,
  bevelEnabled: false
});
shapeGeom.center();
shapeGeom.rotateY(-Math.PI * 0.5);

// 45 deg cut
var pos = shapeGeom.getAttribute("position");
var temp = new THREE.Vector3();
for (let i = 0; i < pos.count; i++) {
  temp.fromBufferAttribute(pos, i);
  let signX = Math.sign(temp.x);
  let shift = h - temp.y;
  pos.setX(i, temp.x - (shift * signX));
}
pos.needsUpdate = true;

var shapeMat = new THREE.MeshBasicMaterial({
  color: "aqua",
  wireframe: true
});
var mesh = new THREE.Mesh(shapeGeom, shapeMat);
scene.add(mesh);




renderer.setAnimationLoop(() => {
  renderer.render(scene, camera)
});
body {
  overflow: hidden;
  margin: 0;
}
<script src="https://threejs.org/build/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>

【讨论】:

  • 这仍然不适合我的形状。你能下载我项目的vertex data 并尝试一下吗?您可以使用此文件中的顶点来创建形状。创建形状后,您可以在拉伸设置中添加 10 之类的深度,然后我想要 45 度曲线在那里
  • @USMANHEART 我什至不知道你的数据是什么,你没有提供如何使用它的代码。
  • 这是我的简单Test Project,你可以看看。有一个函数名TestShape。我只添加了一个简单的形状。我希望形状边缘像我提到的那样切成 45 度
猜你喜欢
  • 1970-01-01
  • 2017-07-20
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2021-03-06
相关资源
最近更新 更多