为了账号安全,请及时绑定邮箱和手机立即绑定

Three.js – 创建半个环并为其设置动画

Three.js – 创建半个环并为其设置动画

一只萌萌小番薯 2022-10-27 16:02:37
我已经创建了一个环,并且希望只拥有它的一半。在那之后,它的动画,它建立自己从 0 到一半。var geometry = new THREE.RingGeometry(10, 9, 32);var material = new THREE.MeshBasicMaterial({  color: 0xffff00,  side: THREE.DoubleSide,});var mesh = new THREE.Mesh(geometry, material);scene.add(mesh);我该如何存档?我是three.js 的新手。
查看完整描述

1 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

使用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 geometry

var 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(更改顶点)或着色器中弯曲平面 :)



查看完整回答
反对 回复 2022-10-27
  • 1 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信