three.js - 如何在 Three.js 中创建带圆角的架子?
问题描述
有人知道如何在three.js中创建一个带圆角的架子吗?我只能通过使用 CylinderGeometry https://threejs.org/docs/#api/en/geometries/CylinderGeometry将圆形架子创建为四分之一圆,如下图(上图)所示,但我不知道了解如何创建一个带有圆角的架子,如下图所示(下图)。
解决方案
您可以创建一个形状并拉伸它:
body{
overflow: hidden;
margin: 0;
}
<script type="module">
import * as THREE from "https://cdn.jsdelivr.net/npm/three@0.125.2/build/three.module.js"
import {OrbitControls} from "https://cdn.jsdelivr.net/npm/three@0.125.2/examples/jsm/controls/OrbitControls.js";
let scene = new THREE.Scene();
let camera = new THREE.PerspectiveCamera(60, innerWidth / innerHeight, 1, 100);
camera.position.set(-10, 5, 10).setLength(6);
let renderer = new THREE.WebGLRenderer();
renderer.setSize(innerWidth, innerHeight);
document.body.appendChild(renderer.domElement);
let controls = new OrbitControls(camera, renderer.domElement);
let light = new THREE.DirectionalLight(0xffffff, 1);
light.position.setScalar(10);
scene.add(light, new THREE.AmbientLight(0xffffff, 0.5));
let sizeX = 5;
let sizeY = 3;
let radius = 0.5;
let halfX = sizeX * 0.5 - radius;
let halfY = sizeY * 0.5 - radius;
let baseAngle = Math.PI * 0.5;
let shape = new THREE.Shape();
shape.absarc(halfX, halfY, radius, baseAngle * 0, baseAngle * 0 + baseAngle);
shape.absarc(-halfX, halfY, radius, baseAngle * 1, baseAngle * 1 + baseAngle);
shape.absarc(-halfX, -halfY, radius, baseAngle * 2, baseAngle * 2 + baseAngle);
shape.absarc(halfX, -halfY, radius, baseAngle * 3, baseAngle * 3 + baseAngle);
let shelfGeom = new THREE.ExtrudeGeometry(shape, {bevelEnabled: false, depth: 1});
let shelfMat = new THREE.MeshLambertMaterial({color: 0xFACE8D});
let shelf = new THREE.Mesh(shelfGeom, shelfMat);
scene.add(shelf);
renderer.setAnimationLoop( _ => {
renderer.render(scene, camera);
});
</script>
推荐阅读
- excel - 在 Excel 中使用 Randbetween 函数查找给定范围之间的随机时间
- c# - 中继器 ItemDataBound NullReferenceException
- python - 将特定字符串值映射到 matplotlib.pyplot.imshow() 中的特定颜色
- python - 通过匹配Python / Pandas中的列名和行名将列与行相乘
- python - 执行命令时 pymysql.err.ProgrammingError 1064
- javascript - 获取 src 类型的 img 或视频标签(不是扩展名)?
- python - 使用 seaborn 进行分类绘图会引发 ValueError:不支持对象数组
- scala - 在执行 ChainBuilder 时访问会话值
- javascript - 如何将普通的 javascript 助手类导入 React?
- css - 电子商务;如何CSS右对齐价格?