22. Three.js案例-創建旋轉的圓環面

22. Three.js案例-創建旋轉的圓環面

實現效果

效果

知識點

WebGLRenderer (WebGL渲染器)

THREE.WebGLRenderer 是Three.js中最常用的渲染器,用于將場景渲染到WebGL畫布上。

構造器

new THREE.WebGLRenderer(parameters)

參數類型描述
parametersObject可選參數對象,用于配置渲染器。

常用參數:

  • antialias:布爾值,是否開啟抗鋸齒,默認為 false
  • canvas:HTMLCanvasElement,指定渲染器使用的畫布,默認為自動創建。
  • context:WebGLRenderingContext,指定渲染器使用的WebGL上下文,默認為自動創建。
  • precision:字符串,指定著色器精度,可選值為 "low", "mediump", "highp",默認為 "mediump"
  • alpha:布爾值,是否透明,默認為 false
  • premultipliedAlpha:布爾值,是否使用預乘Alpha,默認為 true
  • preserveDrawingBuffer:布爾值,是否保留繪制緩沖區,默認為 false
  • depth:布爾值,是否啟用深度測試,默認為 true
  • stencil:布爾值,是否啟用模板測試,默認為 true
  • logarithmicDepthBuffer:布爾值,是否啟用對數深度緩沖,默認為 false
  • failIfMajorPerformanceCaveat:布爾值,如果性能不佳則失敗,默認為 false
方法
  • setSize(width, height, updateStyle):設置渲染器的尺寸。
  • setClearColor(color, alpha):設置渲染器的背景顏色。
  • render(scene, camera):渲染場景。

PerspectiveCamera (透視相機)

THREE.PerspectiveCamera 是Three.js中常用的透視相機,用于模擬人眼的透視效果。

構造器

new THREE.PerspectiveCamera(fov, aspect, near, far)

參數類型描述
fovNumber視野角度,以度為單位。
aspectNumber相機的寬高比。
nearNumber近裁剪面距離。
farNumber遠裁剪面距離。
方法
  • position.set(x, y, z):設置相機的位置。
  • lookAt(vector):使相機看向指定的點。

Scene (場景)

THREE.Scene 是Three.js中的場景對象,用于存儲所有的物體、光源和相機。

構造器

new THREE.Scene()

方法
  • add(object):將物體添加到場景中。
  • remove(object):從場景中移除物體。

AmbientLight (環境光)

THREE.AmbientLight 是Three.js中的環境光源,用于模擬環境光。

構造器

new THREE.AmbientLight(color, intensity)

參數類型描述
colorColor光源顏色。
intensityNumber光源強度,默認為 1

DirectionalLight (方向光)

THREE.DirectionalLight 是Three.js中的方向光源,用于模擬太陽光。

構造器

new THREE.DirectionalLight(color, intensity)

參數類型描述
colorColor光源顏色。
intensityNumber光源強度,默認為 1
方法
  • position.set(x, y, z):設置光源的位置。

TextureLoader (紋理加載器)

THREE.TextureLoader 用于加載紋理貼圖。

構造器

new THREE.TextureLoader(manager)

參數類型描述
managerLoadingManager加載管理器,默認為 DefaultLoadingManager
方法
  • load(url, onLoad, onProgress, onError):加載紋理貼圖。
  • setCrossOrigin(value):設置跨域請求標志。

MeshLambertMaterial (網格Lambert材質)

THREE.MeshLambertMaterial 是一種簡單的漫反射材質,適用于不帶鏡面反射的表面。

構造器

new THREE.MeshLambertMaterial(parameters)

參數類型描述
parametersObject可選參數對象,用于配置材質。

常用參數:

  • color:材質顏色。
  • map:紋理貼圖。
  • side:渲染面,默認為 THREE.FrontSide,可選值為 THREE.BackSideTHREE.DoubleSide

RingGeometry (圓環幾何體)

THREE.RingGeometry 用于創建一個圓環幾何體。

構造器

new THREE.RingGeometry(innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength)

參數類型描述
innerRadiusNumber內半徑。
outerRadiusNumber外半徑。
thetaSegmentsNumber圓周上的分段數。
phiSegmentsNumber半徑上的分段數。
thetaStartNumber開始角度,以弧度為單位。
thetaLengthNumber扇形的角度,以弧度為單位。

Mesh (網格)

THREE.Mesh 是Three.js中的網格對象,用于將幾何體和材質組合在一起。

構造器

new THREE.Mesh(geometry, material)

參數類型描述
geometryGeometry幾何體。
materialMaterial材質。
方法
  • position.set(x, y, z):設置網格的位置。
  • rotation.set(x, y, z):設置網格的旋轉角度。

動畫

requestAnimationFrame 用于請求瀏覽器在下一次重繪之前調用指定的函數。

方法
  • requestAnimationFrame(callback):請求瀏覽器在下一次重繪之前調用指定的函數。

示例代碼

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><script src="ThreeJS/three.js"></script><script src="ThreeJS/jquery.js"></script>
</head>
<body>
<center id="myContainer"></center>
<script>// 創建渲染器var myRenderer = new THREE.WebGLRenderer({antialias: true});myRenderer.setSize(window.innerWidth, window.innerHeight);myRenderer.setClearColor('white', 1.0);$("#myContainer").append(myRenderer.domElement);// 創建相機var myCamera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000);// 創建場景var myScene = new THREE.Scene();// 添加環境光myScene.add(new THREE.AmbientLight('yellow'));// 添加方向光var myLight = new THREE.DirectionalLight('white');myLight.position.set(0, 1, 0);myScene.add(myLight);// 加載紋理貼圖var myMap = new THREE.TextureLoader().load("images/img006.jpg");myMap.wrapS = myMap.wrapT = THREE.RepeatWrapping;myMap.anisotropy = 16;// 創建材質var myMaterial = new THREE.MeshLambertMaterial({map: myMap,side: THREE.DoubleSide});// 創建圓環幾何體var myGeometry = new THREE.RingGeometry(40, 180, 1000);// 創建網格var myMesh = new THREE.Mesh(myGeometry, myMaterial);myMesh.position.set(0, 0, 0);myScene.add(myMesh);// 渲染圓環面animate();function animate() {requestAnimationFrame(animate);var myTimer = Date.now() * 0.0001;myCamera.position.x = Math.cos(myTimer) * 400;myCamera.position.y = Math.cos(myTimer) * 400;myCamera.position.z = Math.sin(myTimer) * 400;myCamera.lookAt(myScene.position);myMesh.rotation.x = myTimer * 5;myMesh.rotation.y = myTimer * 3;myMesh.rotation.z = myTimer * 2;myRenderer.render(myScene, myCamera);}
</script>
</body>
</html>

演示鏈接

示例鏈接

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

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

相關文章

【D3.js in Action 3 精譯_044】5.1 餅圖和環形圖的創建(四):數據標簽的添加

當前內容所在位置&#xff1a; 第五章 餅圖布局與堆疊布局 ?? 5.1 餅圖和環形圖的創建 ?? 5.1.1 準備階段&#xff08;一&#xff09;5.1.2 餅圖布局生成器&#xff08;二&#xff09;5.1.3 圓弧的繪制&#xff08;三&#xff09; ??5.1.4 數據標簽的添加&#xff08;四&…

java全棧day13-后端Web實戰2

接上述查詢部門實現&#xff0c;完成后續要求 一、統一響應結果 1.1步驟 資料如下 對一開始的代碼修改如下 結果如下 1.2測試 指定請求方式 結果 小結 二、前后端聯調測試 資料如下&#xff1a; (不行&#xff0c;一定要不帶空格和不帶中文&#xff0c;要不然啟動不了試了半天…

AWS sdk for s3 - S3 client

背景 在產品環境上通過 http 的方式訪問 aws s3 是不安全的&#xff0c;需要使用aws sdk 提供的接口來訪問 技術實現 項目中使用的是java 1. 在gradel 中引用對應的aws 包 implementation ‘software.amazon.awssdk:s3:2.20.80’ // aws sdk implementation ‘software.am…

Android的SurfaceView和TextureView介紹

文章目錄 前言一、什么是SurfaceView &#xff1f;1.1 SurfaceView 使用示例1.2 SurfaceView 源碼概述1.3 SurfaceView 的構造與初始化1.4 SurfaceHolder.Callback 回調接口1.5 SurfaceView 渲染機制 二、什么是TextureView&#xff1f;2.1 TextureView 使用示例2.2 TextureVie…

vscode 排除文件夾搜索

排除的文件夾 node_modules/,dist/

優雅的@ObservedV2和@Trace裝飾器

Hello&#xff0c;大家好&#xff0c;我是 V 哥。在HarmonyOS NEXT開發中&#xff0c;ObservedV2裝飾器和Trace裝飾器是用于狀態管理的兩個裝飾器&#xff0c;它們在HarmonyOS應用開發中用于增強對類對象中屬性的觀測能力。如果你學過觀察者模式的原理&#xff0c;你會更容易理…

備戰藍橋第一天 驗證回文串 楊輝三角

LCR 018. 驗證回文串 - 力扣&#xff08;LeetCode&#xff09; 涉及的函數&#xff1a; int isalnum ( int c ); 檢查字符是否為字母數字 int tolower ( int c ); 將大寫字母轉換為小寫 void reverse (BidirectionalIterator first, BidirectionalIterator last); 反轉區域中…

【實戰】提升List性能方法有幾何

在內存中的 List<T> 上使用 LINQ 查詢時&#xff0c;加索引并不像數據庫那樣有內置支持&#xff0c;但可以通過以下方式提高查詢性能&#xff1a; 1. 手動構建索引 可以手動構建一個字典 (Dictionary<TKey, TValue>)&#xff0c;將需要查詢的字段作為鍵&#xff0…

一款免費、簡單、快速的JS打印插件,web 打印組件,基于JavaScript開發,支持數據分組,快速分頁批量預覽,打印,轉pdf,移動端,PC端

前言 在數字化辦公時代&#xff0c;打印需求呈現多樣化和復雜化的趨勢。現有的打印軟件往往存在cao作繁瑣、兼容性差、功能單一等問題&#xff0c;難以滿足現代企業高效、靈活的打印需求。 為了解決這些痛點&#xff0c;一款簡單、高效、多功能的打印插件成為了迫切需求。 介…

Python pywin32庫詳解

一、引言 在Python編程中&#xff0c;有時候需要與Windows操作系統進行交互&#xff0c;執行一些特定的系統操作或操作 Windows 應用程序。這時&#xff0c;pywin32庫就成為了一個非常強大的工具。pywin32庫提供了對Windows API的訪問&#xff0c;使得Python開發者能夠在Windo…

Uniapp的vue、nvue、uvue后綴名區別

在 UniApp 中&#xff0c;.vue、.nvue 和 .uvue 是不同的文件后綴名&#xff0c;每個文件格式的使用場景和兼容性略有不同。下面是每個文件后綴的詳細解釋以及它們的兼容性&#xff1a; 1. .vue 文件 定義&#xff1a;.vue 是標準的 Vue 單文件組件格式&#xff0c;主要用于基…

TCP/IP雜記

TCP三次握手、四次揮手 從應用角度&#xff0c;不用多考慮為什么有三次&#xff0c;遵循標準即可。 ubuntu 下 wireshark安裝&#xff1a; sudo add-apt-repository universe sudo apt install wireshark 三次握手實證&#xff1a; 第一次握手的情況如下&#xff1a;&#…

Vue前端開發-接收跳轉參數

路由攜帶參數跳轉到目標頁面后&#xff0c;頁面組件可以接收到攜帶傳入的參數&#xff0c;接收的方式與攜帶的方式相關&#xff0c;如果是采用查詢字符串方式攜帶&#xff0c;那么可以通過路由中的query對象獲取到參數&#xff0c;如果是其他方式&#xff0c;通常都是通過路由中…

力扣--LCR 177.撞色搭配

題目 整數數組 sockets 記錄了一個襪子禮盒的顏色分布情況&#xff0c;其中 sockets[i] 表示該襪子的顏色編號。禮盒中除了一款撞色搭配的襪子&#xff0c;每種顏色的襪子均有兩只。請設計一個程序&#xff0c;在時間復雜度 O(n)&#xff0c;空間復雜度O(1) 內找到這雙撞色搭配…

[ComfyUI]批量生成圖片的節點:輸入一個prompt列表批量生成圖像

文章目錄 1.參考資料2.兩個節點的部署FizzNodes節點comfyui-mixlab-nodes 生成的結果展示 1.參考資料 如何使用ComfyUI一次批量生成不同內容的圖片 ComfyUI工作流】隨機提示詞批量出圖&#xff0c;懶人刷圖福音&#xff0c;根據提示 2.兩個節點的部署 FizzNodes節點 fizzn…

【實操GPT-SoVits】聲音克隆模型圖文版教程

項目github地址&#xff1a;https://github.com/RVC-Boss/GPT-SoVITS.git官方教程&#xff1a;https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/tkemqe8vzhadfpeu本文旨在迅速實操GPT-SoVits項目&#xff0c;不闡述技術原理&#xff08;后期如果有時間研究&#…

5G模組AT命令腳本-關閉模組的IP過濾功能

關閉模組的IP過濾功能 關閉模組的IP過濾功能 5G 模組通常使用nat方式為 下掛設備或上位機提供上網服務&#xff0c;默認情況&#xff0c;不做NAt的包無法經由 模組轉發&#xff0c;如果禁掉這個限制 &#xff0c;可使用本文中的配置命令本腳本用于關閉模組的IP過濾功能&#xf…

JAVA (Springboot) i18n國際化語言配置

JAVA i18n國際化語言配置 一、簡介二、功能三、Java配置國際化步驟四、Java國際化配置工具類五、Spring Boot配置六、測試 一、簡介 在Java中&#xff0c;國際化&#xff08;Internationalization&#xff0c;通常簡稱為i18n&#xff09;是一個過程&#xff0c;它允許應用程…

如何創建基于udp的客戶端和服務端

1.先創建好udpServer.hpp、udpServer.cc、udpClient.hpp、udpClient.cc的框架。 #pragma once #include <string> #include <iostream> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #include <cerrno> #include…

【上線文檔】系統上線方案模板,計算機系統上線保障計劃,系統運維信息系統運行保障方案,系統上線方案模板(Word原件)

一、項目背景和目標 二、項目需求分析 2.1 功能需求 2.2 非功能需求 三、系統設計 3.1 系統架構設計 3.2 數據庫設計 3.3 接口設計 3.4 用戶界面設計 四、系統開發 4.1 開發環境搭建 4.2 業務邏輯開發 4.3 數據庫實現 4.4 接口實現 4.5 用戶界面實現 五、系統測…