亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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/[email protected]/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 關注
  • 182 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號