<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
"version": "0.142.0",
"version": "^3.0.0"
"version": "14.18.2"
思路主要是:
效果如下
// 擴散動畫 this.group2.scale.x = this.group2.scale.x + 0.1 this.group2.scale.y = this.group2.scale.y - 0.01 this.group2.scale.z = this.group2.scale.z + 0.1 if(this.group2.scale.x > 10){ this.group2.scale.x = 1 this.group2.scale.y = 1 this.group2.scale.z = 1 }
// 上下抖動 const time = Date.now() * 0.005 this.group4.position.y = Math.cos( time ) * 1.75 + 2.25
import * as THREE from "three"; import { OBJLoader } from "three/examples/jsm/loaders/OBJLoader.js"; import { MTLLoader } from "three/examples/jsm/loaders/MTLLoader.js"; import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js"; import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js"; import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader.js"; export default class ThreeD { private cylinderRadius: any; // 圓柱體半徑 private cylinderOpacity: any; // 圓柱體透明度 private cylinderMesh: any; // 圓柱網格 private scene: any; // 場景 private camera: any; // 相機 private renderer: any; // 渲染器 private group: any; // 新的組物件,控制模型 private group2: any; // 圓柱體模組 private group3: any; // 圓柱體模組-普通點 private group4: any; // 點位模型 private controls: any; // 建立控制元件物件 private path: any; // 路徑 private objName: any; // 模型 private mtlName: any; // 材質 private cameraX: Number; // 相機x private cameraY: Number; // 相機y private cameraZ: Number; // 相機z private objSize: Number; // 模型倍數 private modelSpeed: Number; // 旋轉速度 private screenWidth: Number; // 旋轉速度 private screenHeight: Number; // 旋轉速度 constructor( cameraX: Number, cameraY: Number, cameraZ: Number, objSize: Number, modelSpeed: number ) { // this.path = path; // this.objName = objName; // this.mtlName = mtlName || null; this.cameraX = cameraX; this.cameraY = cameraY; this.cameraZ = cameraZ; this.objSize = objSize; this.screenWidth = 0 this.screenHeight = 0 } /** * 初始化 * @param instance 容器dom */ initThree(instance: HTMLElement | null) { // 場景寬高 const width: any = instance && instance.clientWidth; const height: any = instance && instance.clientHeight; this.screenWidth = width; this.screenHeight = height; // 1. 建立場景物件Scene this.scene = new THREE.Scene(); // 2. 建立相機物件fov 代表視角aspect 寬高比near 最近看到far 最遠看到 this.camera = new THREE.PerspectiveCamera(50, width / height, 0.1, 200000); // 設定相機位置(眼睛位置或者說相機篇拍照位置x,y,z) this.camera.position.set(600, 300, 100); // 設定相機視角的角度 this.camera.lookAt(0, 0, 0); // 3.建立組和模型 this.group2 = new THREE.Group() // 組-總光圈 this.group4 = new THREE.Group() // 組-遊標 // 建立光圈-總的 this.loadGlbCylinder('Cylinder2.glb', '0', true,10,0,0,0); // 標註點 this.loadGlbPoint('biaozhi.glb', '0', true,20); // 把group物件新增到場景中 this.scene.add(this.group); this.scene.add(this.group2); this.scene.add(this.group3); this.scene.add(this.group4); // 4. 建立光源 this.createPoint(); // 5. 建立渲染器物件 this.renderer = new THREE.WebGLRenderer(); // 設定渲染器的大小 this.renderer.setSize(Number(width), Number(height)); // 增加背景顏色 this.renderer.setClearColor(0xeeeeee, 0); // 將渲染器新增到div中 instance && instance.append(this.renderer.domElement); // 7. 動畫旋轉 this.animate(); } // 建立glb模型-圓柱體 /** * * @param obj 檔案名字 * @param name 模型名字 * @param showFlag 是否展示 * @param scale 放大倍數 * @param x * @param y * @param z */ loadGlbCylinder(obj:string, name:string, showFlag:any, scale:number, x:number, y:number, z:number) { const dracoLoader = new DRACOLoader(); dracoLoader.setDecoderPath("three/js/libs/draco/gltf/"); const loader = new GLTFLoader(); loader.setDRACOLoader(dracoLoader); loader.load( `model/${obj}`, (gltf) => { const model = gltf.scene; model.position.set(x, y, z); // 模型座標偏移量xyz model.scale.set(scale, scale, scale); model.name = name; model.visible = showFlag; model.traverse((object:any) => { if (object.isMesh) { // 開啟透明度 object.material.transparent = true;//開啟透明 object.material.opacity = 0.3;//設定透明度 } }) this.group2.add(model); }, undefined, function (e) { console.error(e); } ); } /** * 建立glb模型-圓柱體-普通 * @param obj 檔案名字 * @param name 模型名字 * @param showFlag 是否展示 * @param scale 放大倍數 * @param x * @param y * @param z */ loadGlbPoint(obj:string, name:string, showFlag:any, scale:number) { const dracoLoader = new DRACOLoader(); dracoLoader.setDecoderPath("three/js/libs/draco/gltf/"); const loader = new GLTFLoader(); loader.setDRACOLoader(dracoLoader); loader.load( `model/${obj}`, (gltf) => { const model = gltf.scene; model.position.set(0, 0, 0); // 模型座標偏移量xyz model.scale.set(scale, scale, scale); model.name = name; model.visible = showFlag; model.traverse((object:any) => { if (object.isMesh) { // 開啟透明度 object.material.transparent = true;//開啟透明 object.material.opacity = 1;//設定透明度 } }) this.group4.add(model); }, undefined, function (e) { console.error(e); } ); } // 建立光源 createPoint() { //環境光 const ambientLight = new THREE.AmbientLight(0xffffff, 1); // ambientLight.position.set(400, 200, 300); this.scene.add(ambientLight); } // 動畫效果 animate() { const clock = new THREE.Clock(); // 渲染 const renderEvent = () => { // const spt = clock.getDelta() * 1000; // 毫秒 // console.log("一幀的時間:毫秒", spt); // console.log("影格率FPS", 1000 / spt); //迴圈呼叫函數,請求再次執行渲染函數render,渲染下一幀 requestAnimationFrame(renderEvent); // 將場景和攝像機傳入到渲染器中 this.renderer.render(this.scene, this.camera); // 圍繞物體y軸自轉 // this.group.rotation.y -= 0.002; // 圓柱體擴散動畫 this.group2.scale.x = this.group2.scale.x + 0.5 this.group2.scale.y = this.group2.scale.y - 0.01 this.group2.scale.z = this.group2.scale.z + 0.5 if(this.group2.scale.x > 50){ this.group2.scale.x = 1 this.group2.scale.y = 1 this.group2.scale.z = 1 } // 上下移動 const time = Date.now() * 0.005 this.group4.position.y = Math.cos( time ) * 1.75 + 2.25 }; renderEvent(); } }
<div class="zong-model" ref="dom"></div>
import ThreeD from "@/utils/threeD_fixed";
threeObj = new ThreeD(8, 50, 60, 1, 2); dom.value && threeObj.initThree(dom.value);
以上就是threeJs實現波紋擴散及遊標浮動效果詳解的詳細內容,更多關於threeJs波紋擴散遊標浮動的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45