想要用tween實現相機的移動,three.js渲染的canvas畫布上相機位置一點沒動,如何解決??

🏆本文收錄于「Bug調優」專欄,主要記錄項目實戰過程中的Bug之前因后果及提供真實有效的解決方案,希望能夠助你一臂之力,幫你早日登頂實現財富自由🚀;同時,歡迎大家關注&&收藏&&訂閱!持續更新中,up!up!up!!

問題描述

??這次問題應該簡單一點,就是我寫了個ts文件用hooks封裝了一下,然后在另一個ts文件中引入進來了第五行的相機camera,想要用tween實現相機的移動,但是這里出現個問題,打印的相機位置不斷地移動了,但是three.js渲染的canvas畫布上相機位置一點沒動,

import * as THREE from "three";
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";
import * as TWEEN from "@tweenjs/tween.js";
import { useThree } from "./useThree";
const { scene, camera, renderer, schedule } = useThree();interface CarModel {cameraMove: TWEEN.Tween<THREE.Vector3>;
}
export default async function car(): Promise<CarModel> {const loader = new GLTFLoader();let cameraMove: any;// let cameraMove=new TWEEN.Tween(camera.position).to({ x: 215, y: 1, z: 80 }, 20000);try {      cameraMove=new TWEEN.Tween(camera.position).to( new THREE.Vector3(215, 1, 80), 13000).onUpdate(() => {console.log('相機移動',camera.position);camera.updateProjectionMatrix();});} catch (error) {};   function animate() {requestAnimationFrame(animate);TWEEN.update(); renderer.render(scene, camera);}animate();return {cameraMove,};
}

如上問題有來自我自身項目開發,有的收集網站,有的來自讀者,如有侵權,立馬刪除。

解決方案

??如下是上述問題的解決方案,僅供參考:

??在Three.js中使用TWEEN.js來實現相機移動時,確保相機位置更新和渲染循環正確設置是非常重要的。從你提供的代碼來看,有幾個可能的問題點需要檢查:

  1. Tween 更新:確保TWEEN.update()在動畫幀中被調用,以便更新所有tween的狀態。

  2. 相機投影矩陣更新:在更新相機位置后,調用camera.updateProjectionMatrix()是正確的,但要確保它在每次渲染之前被調用。

  3. 渲染循環:渲染循環animate函數需要持續運行以重新渲染場景。

  4. Tween啟動:確保cameraMove tween已經被啟動,TWEEN.Tween實例需要調用.start()方法來開始動畫。

  5. 錯誤處理catch塊為空,如果try塊中拋出錯誤,將不會打印或處理錯誤信息。

  6. 返回 Tween 對象:你返回了cameraMove,但沒有在animate函數外部啟動它。

  7. useThree 鉤子:確保useThree鉤子正確設置并提供了scenecamerarendererschedule

根據你的代碼,這里有一些可能的解決方案:

  • 確保cameraMove.start()在創建tween后被調用,以啟動動畫。
cameraMove.start();
  • animate函數放置在組件的生命周期中,確保它在組件掛載后運行。

  • 檢查useThree鉤子是否正確設置,并且camera對象是Three.js中的PerspectiveCamera實例。

  • 檢查是否有其他JavaScript錯誤或Three.js場景設置問題,這可能會阻止場景正確渲染。

  • 確保沒有其他腳本或CSS樣式影響canvas元素。

  • 如果你使用的是React或類似的前端框架,請確保animate函數在組件卸載時被正確停止,以避免內存泄漏。

這是一個更新后的示例代碼,它包含了啟動tween和錯誤處理:

// ...其他代碼try {      cameraMove = new TWEEN.Tween(camera.position).to(new THREE.Vector3(215, 1, 80), 13000).onUpdate(() => {console.log('相機移動', camera.position);camera.updateProjectionMatrix();}).onComplete(() => {console.log('相機移動完成');}).start(); // 啟動tween
} catch (error) {console.error('相機移動初始化失敗:', error);
}// ...其他代碼

如果這些解決方案仍然無法解決問題,請檢查瀏覽器的開發者控制臺是否有任何錯誤信息,并確保Three.js和TWEEN.js庫被正確導入和使用。

??希望能夠幫到有需要的你。

??PS:如若遇到采納如下方案還是未解決的同學,希望不要抱怨&&急躁,畢竟影響因素眾多,我寫出來也是希望能夠盡最大努力幫助到同類似問題的小伙伴,即把你未解決或者產生新Bug黏貼在評論區,我們大家一起來努力,一起幫你看看,可以不咯。

??若有對當前Bug有與如下提供的方法不一致,有個不情之請,希望你能把你的新思路或新方法分享到評論區,一起學習,目的就是幫助更多所需要的同學,正所謂「贈人玫瑰,手留余香」。

??寫在最后

??ok,以上就是我這期的Bug修復內容啦,如果還想查找更多解決方案,你可以看看我專門收集Bug及提供解決方案的專欄「Bug調優」,都是實戰中碰到的Bug,希望對你有所幫助。到此,咱們下期拜拜。

碼字不易,如果這篇文章對你有所幫助,幫忙給bugj菌來個一鍵三連(關注、點贊、收藏) ,您的支持就是我堅持寫作分享知識點傳播技術的最大動力。

同時也推薦大家關注我的硬核公眾號:「猿圈奇妙屋」 ;以第一手學習bug菌的首發干貨,不僅能學習更多技術硬貨,還可白嫖最新BAT大廠面試真題、4000G Pdf技術書籍、萬份簡歷/PPT模板、技術文章Markdown文檔等海量資料,你想要的我都有!

📣關于我

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 華為云 | 阿里云 | 騰訊云 等社區博客專家,C站博客之星Top30,華為云2023年度十佳博主,掘金多年度人氣作者Top40,51CTO年度博主Top12,掘金/InfoQ/51CTO等社區優質創作者;全網粉絲合計 20w+;硬核微信公眾號「猿圈奇妙屋」,歡迎你的加入!免費白嫖最新BAT互聯網公司面試真題、4000G PDF電子書籍、簡歷模板等海量資料,你想要的我都有,關鍵是你不來拿。


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

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

相關文章

linux 批量mv批量cp | 批量復制粘貼剪切

一、【問題描述】 cp 和 mv這種基本命令&#xff0c;多對一是可以做的 比如 cp /conf/* /despath mv /conf/* /path/bak/ 但是一對多會報錯&#xff0c;加-r參數也會報錯&#xff0c;而且會有問題&#xff0c;不建議這么做&#xff0c;找一臺測試機器你會發現加了-r甚至復制…

每日新聞掌握【2024年6月26日 星期三】

2024年6月26日 星期三 農歷五月廿一 大公司/大事件 OpenAI將終止對中國提供API服務 從6月24日晚間開始&#xff0c;已有多名用戶收到了來自OpenAI的郵件。該郵件表示&#xff0c;“我們的數據顯示您的組織來自OpenAI目前不支持的地區的API流量。”郵件進一步表示&#xff0c;…

高內聚低耦合【代碼:ShoppingCart(一個類中提供多種操作購物車的方法體現高內聚)支付方式接口(信用卡類、微信支付類實現支付接口 體現低耦合)】

高內聚低耦合 ?內聚指的是&#xff1a;?個模塊中各個元素之間的聯系的緊密程度&#xff0c;如果各個元素(語句、程序段)之間的聯系程度越?&#xff0c;則內聚性越?&#xff0c;即 “?內聚”。 低耦合指的是&#xff1a;軟件中各個層、模塊之間的依賴關聯程序越低越好。修…

第1章 物聯網模式簡介---獨特要求和體系結構原則

物聯網用例的獨特要求 物聯網用例往往在功耗、帶寬、分析等方面具有非常獨特的要求。此外&#xff0c;物聯網實施的固有復雜性&#xff08;一端的現場設備在計算上受到挑戰&#xff0c;另一端的云容量幾乎無限&#xff09;迫使架構師做出艱難的架構決策和實施選擇。可用實現技…

【自動調參】年化29.3%,最大回撤18.5%?:lightGBM的參數優化

原創文章第570篇&#xff0c;專注“AI量化投資、世界運行的規律、個人成長與財富自由"。 研報復現繼續&#xff1a;【研報復現】年化27.1%&#xff0c;人工智能多因子大類資產配置策略之benchmark 昨天調了一版參數&#xff0c;主要是lambda_l1, lambda_l2&#xff0c;防…

Vmvare12安裝CentOS7.6

Vmvare12安裝 注意事項 安裝完成以后有這兩個虛擬網卡。 CentOS官網鏡像地址 https://www.centos.org/download/mirrors/Vmvare安裝CentOS7.6 創建虛擬機 安裝CentOS7.6 選擇桌面版 磁盤分區 上述是確認使用自動分區。 設置密碼 設置license information 歡迎頁面 CentOS7…

使用Python實現網頁數據獲取與處理:以財經新聞為例

在現代數據驅動的世界中&#xff0c;獲取并處理豐富的網頁數據是非常重要的技能。本文將介紹如何使用Python編寫一個程序&#xff0c;自動獲取財經新聞數據并進行處理。這不僅可以幫助我們快速獲取最新的財經信息&#xff0c;還可以為后續的數據分析和研究提供支持。 環境準備…

寶蘭德受邀出席華為開發者大會2024,攜手共繪基礎軟件新篇章

6月21日-23日&#xff0c;華為開發者大會&#xff08;HDC 2024&#xff09;在東莞松山湖舉行&#xff0c;作為全球開發者的年度盛會&#xff0c;本次大會匯聚了眾多業界精英與前沿技術。華為分享了HarmonyOS、盤古大模型、昇騰AI云服務、GaussDB數據庫、自研倉頡編程語言等最新…

微信小程序錄音

微信小程序的錄音功能通過一組API來實現&#xff0c;主要涉及錄音管理器&#xff08;RecorderManager&#xff09;的使用。下面是詳細的實現步驟和代碼示例&#xff1a; 初始化錄音管理器 首先需要獲取錄音管理器的實例&#xff0c;可以通過 wx.getRecorderManager() 方法來獲…

【IM即時通信 功能介紹】客戶端用戶在線狀態訂閱

本文檔旨在介紹客戶端用戶在線狀態訂閱功能&#xff0c;該功能允許開發者通過 SDK 接口實時監控和接收指定用戶的在線或離線狀態變更通知。這一功能對于需要實時交流、狀態同步或用戶活動監控的應用場景至關重要。 功能特點 實時狀態通知 跨平臺通知&#xff1a;訂閱成功后&…

使用 MediaPipe 實現實時手部追蹤和手勢識別 | Rerun展示

點擊下方卡片&#xff0c;關注“小白玩轉Python”公眾號 在本文中&#xff0c;我將展示一個使用 MediaPipe Python 和 Rerun SDK 進行手部追蹤和手勢識別的示例。如果您有興趣深入了解并擴展您的知識&#xff0c;我將指導您如何安裝 MediaPipe Python 和 Rerun SDK 來進行手部追…

深入Scala的變量聲明與類型推斷:語法糖下的智能推導

Scala是一種靜態類型語言&#xff0c;以其強大的類型推斷系統而聞名。變量聲明和類型推斷是Scala編程中的基礎概念&#xff0c;它們共同簡化了代碼的編寫并提高了開發效率。本文將深入探討Scala中變量聲明的語法規則和類型推斷的工作原理。 1. Scala靜態類型的優越性 靜態類型…

深入理解Python中的*和**在函數參數與調用中的奧秘

深入理解Python中的*和**在函數參數與調用中的奧秘 在Python編程中&#xff0c;*和**這兩個操作符在函數參數和函數調用中扮演著特殊的角色。它們分別用于處理位置參數&#xff08;positional arguments&#xff09;和關鍵字參數&#xff08;keyword arguments&#xff09;&am…

Linux部署SVN

一.下載與安裝 &#xff08;1&#xff09;yum安裝 yum install subversion &#xff08;2&#xff09;源文件編譯安裝 ①下載svn源文件 subversion-xxx.tar.gz&#xff08;subversion 源文件&#xff09; subversion-deps-xxx.tar.gz&#xff08;subversion依賴文件&…

RAG項目工期

工期 第一期&#xff0c;基于term的檢索&#xff0c;大模型生成 第二期&#xff0c;搭建前端界面&#xff0c;落地 上傳pdf&#xff0c;一鍵解析&#xff0c;上傳多個pdf 提問 第三期&#xff0c;使用向量檢索&#xff0c;向量數據庫選型 第四期&#xff0c;優化排序。 te…

BatchNorm和LayerNorm

參考鏈接 參考鏈接 參考鏈接

項目四 OpenStack身份管理

任務一 理解身份服務 1.1 ?Keystone的基本概念 ? 認證 &#xff08; Authentication &#xff09; —— 確認用戶身份的過程 &#xff0c;又稱身份驗證 。 ? 憑證 &#xff08; Credentials &#xff09; —— 又 稱憑據&#xff0c;是用于 確認用戶身份的數據 。 ? 令牌…

短視頻最佳時長:成都柏煜文化傳媒有限公司

探索時間與內容之間的完美平衡 成都柏煜文化傳媒有限公司 在數字媒體日益繁榮的今天&#xff0c;短視頻已成為人們獲取信息、娛樂休閑的重要形式。然而&#xff0c;關于短視頻的最佳時長&#xff0c;一直是一個備受爭議的話題。本文將探討短視頻時長的各種考量因素&#xff0…

MySQL報錯Duplicate entry ‘0‘ for key ‘PRIMARY‘

報錯現場 現象解釋 因為你在插入時沒有給 Customer.Id 賦值&#xff0c;MySQL 會傾向于賦值為 NULL。但是主鍵不能為 NULL&#xff0c;所以 MySQL 幫了你一個忙&#xff0c;將值轉換為 0。這樣&#xff0c;在第二次插入時就會出現沖突&#xff08;如果已經有一條記錄為 0&…

微服務——服務治理

目錄 1 什么是服務治理&#xff1f;2 為什么需要服務治理&#xff1f;3 服務治理的關鍵點3.1 服務注冊與發現3.2 負載均衡3.3 容錯與熔斷3.4 服務監控與告警3.5 服務配置管理 4 示例說明5 總結 1 什么是服務治理&#xff1f; 簡單來說&#xff0c;服務治理就是對微服務架構中的…