ThreeJs實現簡單的動畫

上一節實現可用鼠標控制相機的方式實現動態效果,但很多時候是需要場景自己產恒動態效果,而不是通過鼠標拖動,此時引入一個requestAnimationFrame方法,它實際上是通過定時任務的方式,每隔一點時間改變場景中內容后重新渲染一遍,間隔時間短的話視覺上就顯示出連續的動畫效果,Js本身也自帶定時方法 setInterval,同樣可以實現動畫效果,但是性能上不如requestAnimationFrame,比如瀏覽器的當前窗口并非是threeJs頁面,setInterval會一直循環執行,但是?requestAnimationFrame會停止,直到瀏覽器的Tab標簽切換到threejs頁面才會繼續執行。下面的源碼展示了通過requestAnimationFrame的方式實現動畫效果。(mesh.rotation.x += 0.02是改變正方體網格的z軸旋轉角度),requestAnimationFrame每執行一次就會旋轉一次。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><!--引入three.js,這是使用three必須的js文件,此處引入的是外網提供的three文件,如果引入有問題可以到官網下載three文件后引入本地的theee.js文件--><script src="http://www.yanhuangxueyuan.com/versions/threejsR92/build/three.js"></script><script src="three/OrbitControls.js"></script>
</head><body>
<script>/*** 創建場景對象Scene*/var scene = new THREE.Scene();/*** 相機設置*///窗口寬度var width = window.innerWidth;//窗口高度var height = window.innerHeight;//窗口寬高比var k = width / height;//三維場景顯示范圍控制系數,系數越大,顯示的范圍越大var s = 200;//創建相機對象var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);//設置相機位置camera.position.set(200, 300, 200);//設置相機方向(指向的場景對象)camera.lookAt(scene.position);/*** 光源設置*///新建點光源(常用光源分為點光源和環境光,點光源的效果類似燈泡,環境光的效果類似白天的太陽光)var point = new THREE.PointLight(0xffffff);//設置點光源的位置point.position.set(400, 200, 300);//將點光源添加到場景中scene.add(point);/*** 創建網格模型,也就是3D模型*///創建一個立方體幾何對象Geometryvar geometry = new THREE.BoxGeometry(100, 100, 100);//給幾何體創建材質,這里是改為藍色,材質對象Materialvar material = new THREE.MeshLambertMaterial({color: 0x0000ff});//網格模型對象Meshvar mesh = new THREE.Mesh(geometry, material);//網格模型添加到場景中,每個模型最終都要添加到場景中才會被渲染scene.add(mesh);/*** 創建渲染器對象*///創建渲染器對象(渲染要等所有東西都加進去再渲染場景,創建和3D模型和光源沒有先后順序)var renderer = new THREE.WebGLRenderer();//設置渲染區域尺寸(設置的是整個屏幕的長度和寬度renderer.setSize(width, height);//設置渲染的背景色renderer.setClearColor(0xb9d3ff, 1);//body元素中插入canvas對象,也可以在頁面中添加div,并加上id,通過id指定在某個div中渲染document.body.appendChild(renderer.domElement);//循環渲染function render() {//執行渲染操作   指定場景、相機作為參數renderer.render(scene, camera);// 使用 requestAnimationFrame 函數安排下一次渲染requestAnimationFrame(render);//修改正方體網格的x軸旋轉角度mesh.rotation.x += 0.02}//執行渲染render()//創建鼠標控制器	//let controls = new THREE.OrbitControls(camera, renderer.domElement );//監聽控制器,每次拖動后重新渲染畫面//controls.addEventListener('change', function () {//	renderer.render(scene, camera); //執行渲染操作//});</script>
</body>
</html>

效果如下,這里是圖片,只是其中一幀的樣子,沒有動態效果。看到動態效果可以把上面的代碼復制到html文件中雙擊打開在瀏覽器中執行。

如果有疑問可以在評論里留言。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166969.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166969.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166969.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

筆記:如何搭建一套前端監控系統?(持續更新中)

數據敏感處理 數據加密&#xff0c;對涉及用戶隱私的數據做到加密防護 獨立部署&#xff0c;不和其它應用共享監控系統 不采集具體數據&#xff0c;只采集用戶操作數據 錯誤采集 Runtime Error: JS運行錯誤&#xff0c;可通過error監聽器捕獲 load Error: 資源加載錯誤&#x…

Ant Design Vue 樹形表格計算盈收金額

樹形表格計算 一、盈收金額計算1、根據需要輸入的子級位置&#xff0c;修改數據2、獲取兄弟節點數據&#xff0c;并計算兄弟節點的金額合計3、金額合計&#xff0c;遍歷給所有的父級 一、盈收金額計算 1、根據需要輸入的子級位置&#xff0c;修改數據 2、獲取兄弟節點數據&am…

銷售管理系統的實用性怎么樣?

銷售管理系統好用嗎&#xff1f;好用&#xff0c;銷售管理系統可以管理銷售流程、自動化大量重復性工作&#xff0c;讓銷售人員從瑣碎的任務中掙脫出來&#xff0c;投入到客戶跟進和維護客戶關系之中。那么&#xff0c;CRM系統的好用體現在哪些方面&#xff1f; 1.加速銷售流程…

react中的state

沒想到hooks中也有state這一說法 看下面的兩個案例 1、無state變化不會執行父子函數 2、有state更改執行父子函數

CDN加速在網站搭建中的必要性與優勢分析

隨著互聯網的快速發展&#xff0c;網站已經成為企業展示和用戶交互的主要平臺。在構建一個高性能、用戶體驗良好的網站時&#xff0c;CDN&#xff08;內容分發網絡&#xff09;的應用變得愈發重要。本文將從網站搭建的角度出發&#xff0c;深入分析CDN加速的必要性以及在提升網…

深度學習之六(自編碼器--Autoencoder)

概念 自編碼器(Autoencoder)是一種神經網絡架構,用于無監督學習和數據的降維表示。它由兩部分組成:編碼器(Encoder)和解碼器(Decoder)。 結構: 編碼器(Encoder): 接收輸入數據并將其壓縮為潛在表示(latent representation),通常比輸入數據的維度要低。編碼器的…

最詳細的軟件測試面試題整理與分析

前言 時光荏苒&#xff0c;一轉眼到了2023年末尾&#xff0c;2024年也快要來了&#xff0c;人員就業市場以往的寒冬也貌似有了轉暖的跡象&#xff0c;身邊大批的就業人員也開始了緊張的備戰之中。 近幾周也和多家合作公司的HR進行了溝通&#xff0c;發現雖然崗位就業情況較去年…

vue3中引入svg矢量圖

vue3中引入svg矢量圖 1、前言2、安裝SVG依賴插件3、在vite.config.ts 中配置插件4、main.ts入口文件導入5、使用svg5.1 在src/assets/icons文件夾下引入svg矢量圖5.2 在src/components目錄下創建一個SvgIcon組件5.3 封裝成全局組件&#xff0c;在src文件夾下創建plugin/index.t…

SQLserver 數據庫導入MySQL的方法

原文&#xff1a; https://blog.csdn.net/lht631935612/article/details/132086172#httpspanbaiducoms1TlLiRI9stxqTcwBJ5p6UAE993BEE68EA5EFBC9Ahttpspanbaiducoms1TlLiRI9stxqTcwBJ5p6UA2020E68F90E58F96E7A081EFBC9Av6d5_font_colordd0000v6d5font_8 下載鏈接&#xff1a;…

使用openfeign調用下載流的文件不完整的替代方案

OpenFeign是一種聲明式的Web服務客戶端&#xff0c;它使得編寫HTTP客戶端變得更加簡單和直觀。它使用了注解方式來描述HTTP API&#xff0c;使得開發者可以使用Java接口來調用遠程HTTP服務。 OpenFeign的核心特點包括&#xff1a; 聲明式API: 您可以使用注解聲明要調用的遠程AP…

一鍵創新 | 拓世法寶AI智能直播一體機激發房產自媒體創造力

在數字化時代&#xff0c;房產銷售已然不再是傳統的模式。隨著社交媒體和自媒體的興起&#xff0c;短視頻直播成為房產自媒體營銷的新風口。然而&#xff0c;行業也面臨著諸多挑戰&#xff0c;如何更好地利用新媒體拓展市場&#xff0c;提升自媒體效果成為擺在業內人士面前的難…

JMeter測試報錯422 Unprocessable Entity

添加HTTP信息頭&#xff1a; ? HTTP請求-》添加-〉配置元件-》HTTP信息頭管理器 ? 如果需要送json&#xff0c;需要添加Content-Type:application/json&#xff0c;否則會報【422 Unprocessable Entity】

好用的CRM系統到底有多重要?怎么選?

我們都知道&#xff0c;CRM軟件可以讓企業效率加倍。但如果選錯了CRM&#xff0c;企業損失點錢是小&#xff0c;客戶轉化率下降才是大。下面我們就來說說&#xff0c;市面上有哪些好用的CRM&#xff1f;以及好用的CRM軟件的重要性。 好用的CRM軟件的重要性&#xff1a; 客戶管…

Qt 軟件調試(一) Log日志調試

終于這段時間閑下來了&#xff0c;可以系統的編寫Qt軟件調試的整個系列。前面零零星星的也有部分輸出&#xff0c;但終究沒有形成體系。借此機會&#xff0c;做一下系統的總結。慎獨、精進~ 日志是有效幫助我們快速定位&#xff0c;找到程序異常點的實用方法。但是好的日志才能…

百度 文心一言 sdk 試用

JMaven Central: com.baidu.aip:java-sdk (sonatype.com) Java sdk地址如上&#xff1a; 文心一言開發者 文心一言 (baidu.com) ERNIE Bot SDK https://yiyan.baidu.com/developer/doc#Fllzznonw ERNIE Bot SDK提供便捷易用的接口&#xff0c;可以調用文心一言的能力&#…

口袋參謀:如何避免寶貝被降權?這招屢試屢爽!

?至少99.99999%的店鋪在今年都被降權過&#xff01;各家店鋪被降權的原因&#xff0c;無非就一個原因&#xff0c;那就是s單&#xff01; s單的風險也就兩種&#xff0c;一是操作問題&#xff0c;二是賬號問題。 操作問題被降權&#xff0c;這個大家都心知肚明&#xff0c;s…

5大原因,設備校準為什么是實驗室搬遷后的首要任務?

實驗室搬遷是一個復雜而緊張的過程。要考慮的事情太多&#xff0c;很容易忽視您最重要的任務之一——檢查設備在新環境中的性能。 校準對于確保設備安全運行和遵守監管標準至關重要。 1.保持合規性并遵守法律要求 生物技術和制藥等行業有特定的校準要求&#xff0c;實驗室必…

Java詳解之I/O[BIO、NIO、AIO使用方法和示范代碼]

前言&#xff1a; 小弟能力不足&#xff0c;認知有限&#xff0c;難免考慮不全面&#xff0c;希望大佬能給出更好的建議&#xff0c;指出存在的問題和不足&#xff0c;在此跪謝。 IO發展史 Java中對于I/O能力的支持主要分為三個比較關鍵的階段&#xff1a; BIO 第一個階段…

淺談安科瑞直流電表在印尼某基站的應用

摘要&#xff1a;本文介紹了安科瑞直流電表在印尼的應用。主要用于印尼某基站的電流電壓電能的計量&#xff0c;配合霍爾傳感器對基站進行計量。 Abstract: This article introduces the application of Acrel DC meters in base station in Indonesia.The device is measuri…

【此時不應有 \anaconda3\envs\ blenderproc \Library\ssl\cacert.pem】問題已解決

conda 創建新環境后&#xff0c;使用conda activate blenderproc命令激活環境時出現以下錯誤&#xff1a; 此時不應有 \anaconda3\envs\ blenderproc \Library\ssl\cacert.pem 其他博客里面https://blog.csdn.net/weixin_46599926/article/details/132576960解釋這個是因為co…