繁花如伊
使用thetaStart和thetaLength为半环设置动画。body{ overflow: hidden; margin: 0;}<script type="module">import * as THREE from "https://cdn.jsdelivr.net/npm/three@0.118.3/build/three.module.js";var scene = new THREE.Scene();var camera = new THREE.PerspectiveCamera(60, innerWidth / innerHeight, 1, 100);camera.position.set(0, 0, 10);var renderer = new THREE.WebGLRenderer({antialias: true});renderer.setSize(innerWidth, innerHeight);document.body.appendChild(renderer.domElement);var grid = new THREE.GridHelper(10, 10);grid.rotation.x = Math.PI * 0.5;scene.add(grid);var innerRadius = 1;var outerRadius = 2;// re-building geometryvar usualRingGeom = new THREE.RingBufferGeometry(innerRadius, outerRadius, 32, 1, 0, 1);var usualRingMat = new THREE.MeshBasicMaterial({color: 0xffff00});var usualRing = new THREE.Mesh(usualRingGeom, usualRingMat);scene.add(usualRing);var clock = new THREE.Clock();renderer.setAnimationLoop(()=>{ let t = clock.getElapsedTime(); // re-building geometry usualRingGeom = new THREE.RingBufferGeometry(innerRadius, outerRadius, 32, 1, 0, (Math.sin(t) * 0.5 + 0.5) * Math.PI); usualRing.geometry.dispose(); usualRing.geometry = usualRingGeom; renderer.render(scene, camera);});</script>PS 您也可以在不重新构建几何图形的情况下获得相同的结果。为此,您可以在 js(更改顶点)或着色器中弯曲平面 :)