28. Three.js案例-創建圓角矩形并進行拉伸

28. Three.js案例-創建圓角矩形并進行拉伸

實現效果

效果

知識點

WebGLRenderer (WebGL渲染器)

WebGLRenderer 是 Three.js 中用于渲染 3D 場景的主要渲染器。

構造器

WebGLRenderer( parameters : Object )

參數類型描述
parametersObject渲染器的配置參數,可選。

常用參數:

  • antialias:布爾值,是否開啟抗鋸齒,默認為 false
  • alpha:布爾值,是否允許透明,默認為 false
  • precision:字符串,指定著色器的精度,可選值為 low, medium, high
方法
  • setSize(width, height): 設置渲染器的尺寸。
  • setClearColor(color, alpha): 設置渲染器的背景顏色和透明度。

PerspectiveCamera (透視相機)

PerspectiveCamera 是 Three.js 中用于創建透視投影相機的對象。

構造器

PerspectiveCamera(fov, aspect, near, far)

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

Scene (場景)

Scene 是 Three.js 中用于存儲和管理所有 3D 對象的容器。

構造器

Scene()

方法
  • add(object): 向場景中添加對象。
  • remove(object): 從場景中移除對象。

PointLight (點光源)

PointLight 是 Three.js 中用于創建點光源的對象。

構造器

PointLight(color, intensity, distance, decay)

參數類型描述
colorColor光源的顏色。
intensityNumber光源的強度,默認為 1
distanceNumber光源的最大影響距離,默認為 0,表示無限遠。
decayNumber光源的衰減系數,默認為 1
方法
  • position.set(x, y, z): 設置光源的位置。

Shape (形狀)

Shape 是 Three.js 中用于創建自定義 2D 形狀的對象。

構造器

Shape(points)

參數類型描述
pointsArray一系列 Vector2 點,用于定義形狀的輪廓。
方法
  • moveTo(x, y): 移動到指定點。
  • lineTo(x, y): 從當前點畫直線到指定點。
  • quadraticCurveTo(cpx, cpy, x, y): 從當前點畫二次貝塞爾曲線到指定點。

ExtrudeGeometry (拉伸幾何體)

ExtrudeGeometry 是 Three.js 中用于創建拉伸幾何體的對象。

構造器

ExtrudeGeometry(shape, options)

參數類型描述
shapeShape要拉伸的 2D 形狀。
optionsObject拉伸選項,可選。

常用選項:

  • depth: 拉伸深度,默認為 100
  • bevelEnabled: 是否啟用倒角,默認為 true
  • bevelThickness: 倒角厚度,默認為 6
  • bevelSize: 倒角大小,默認為 1
  • bevelOffset: 倒角偏移,默認為 0
  • bevelSegments: 倒角段數,默認為 1
  • extrudePath: 拉伸路徑,可以是一個 Curve 對象。

Mesh (網格)

Mesh 是 Three.js 中用于創建網格對象的類。

構造器

Mesh(geometry, material)

參數類型描述
geometryGeometry網格的幾何體。
materialMaterial網格的材質。
方法
  • translateX(amount): 沿 X 軸移動指定距離。
  • translateY(amount): 沿 Y 軸移動指定距離。
  • translateZ(amount): 沿 Z 軸移動指定距離。
  • scale.set(x, y, z): 設置網格的縮放比例。

MeshPhongMaterial (網格Phong材質)

MeshPhongMaterial 是 Three.js 中用于創建 Phong 著色材質的對象。

構造器

MeshPhongMaterial(parameters)

參數類型描述
parametersObject材質的配置參數,可選。

常用參數:

  • color: 材質的顏色。
  • specular: 高光顏色,默認為 0x111111
  • shininess: 高光強度,默認為 30

OrbitControls (軌道控制器)

OrbitControls 是 Three.js 中用于控制相機旋轉、縮放和平移的控制器。

構造器

OrbitControls(camera, domElement)

參數類型描述
cameraCamera控制的相機對象。
domElementDOMElement控制器綁定的 DOM 元素。
方法
  • update(): 更新控制器狀態。

代碼

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><script src="ThreeJS/three.js"></script><script src="ThreeJS/jquery.js"></script><script src="ThreeJS/OrbitControls.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, 1, 1, 1000);myCamera.position.set(200, 200, 200);myCamera.lookAt({x: 0, y: 0, z: 0});// 創建場景var myScene = new THREE.Scene();// 創建點光源var myPointLight = new THREE.PointLight('white');myPointLight.position.set(320, 200, 400);myScene.add(myPointLight);// 創建圓角矩形var myShape = new THREE.Shape();var x = 0, y = 0, myWidth = 30, myHeight = 40, myRadius = 6;myShape.moveTo(x, y + myRadius);myShape.lineTo(x, y + myHeight - myRadius);myShape.quadraticCurveTo(x, y + myHeight, x + myRadius, y + myHeight);myShape.lineTo(x + myWidth - myRadius, y + myHeight);myShape.quadraticCurveTo(x + myWidth, y + myHeight, x + myWidth, y + myHeight - myRadius);myShape.lineTo(x + myWidth, y + myRadius);myShape.quadraticCurveTo(x + myWidth, y, x + myWidth - myRadius, y);myShape.lineTo(x + myRadius, y);myShape.quadraticCurveTo(x, y, x, y + myRadius);// 設置拉伸圓角矩形的路徑var myCurve = new THREE.CatmullRomCurve3([new THREE.Vector3(0, 0, 0), new THREE.Vector3(0, 30, 0)]);// 創建拉伸之后的圓角矩形var myGeometry = new THREE.ExtrudeGeometry(myShape, {extrudePath: myCurve});var myMaterial = new THREE.MeshPhongMaterial({color: 'cyan'});var myMesh = new THREE.Mesh(myGeometry, myMaterial);myMesh.translateX(100);myMesh.translateZ(100);myMesh.translateY(0);myScene.add(myMesh);// 渲染圓角矩形animate();var step = 0;function animate() {myRenderer.render(myScene, myCamera);step = step + 0.01;var myScale = 2 * Math.sin(step) + 2;myMesh.scale.y = myScale;myMesh.scale.x = 2;myMesh.scale.z = 2;requestAnimationFrame(animate);}// 創建軌道控制器var myOrbitControls = new THREE.OrbitControls(myCamera);
</script>
</body>
</html>

演示鏈接

示例鏈接

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

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

相關文章

開源Java快速自測工具,可以調用系統內任意一個方法

java快速測試框架&#xff0c;可以調到系統內任意一個方法&#xff0c;告別寫單測和controller的困擾。 開源地址&#xff1a;https://gitee.com/missyouch/Easy-JTest 我們在開發時很多時候想要測試下自己的代碼&#xff0c;特別是service層或者是更底層的代碼&#xff0c;就…

004 QT常用控件Qwidget_上

文章目錄 前言控件概述QWidgetenable屬性geometry屬性windowTitle屬性windowlcon屬性 小結 前言 本文將會向你介紹常用的Qwidget屬性 控件概述 Widget 是 Qt 中的核心概念. 英文原義是 “?部件”, 我們此處把它翻譯為 “控件” . 控件是構成?個圖形化界面的基本要素. QWi…

Android 好的開源庫

1. 權限請求框架 GitHub - getActivity/XXPermissions: Android 權限請求框架&#xff0c;已適配 Android 14 2. 下載框架 GitHub - lingochamp/okdownload: A Reliable, Flexible, Fast and Powerful download engine.

Flash語音芯片相比OTP語音芯片的優勢

Flash語音芯片和OTP語音芯片是兩種常見的語音解決方案&#xff0c;在各自的應用領域中發揮著重要作用。本文?將介紹Flash語音芯片相比OTP(One-Time Programmable)語音芯片的顯著優勢?。 1?.可重復擦寫?&#xff1a;Flash語音芯片的最大特點是支持多次編程和擦除&#xff0c…

Android命令行工具--dumpsys

dumpsys 是一種在 Android 設備上運行的工具&#xff0c;可提供有關系統服務的信息。可以使用 Android 調試橋 (adb) 從命令行調用 dumpsys&#xff0c;獲取在連接的設備上運行的所有系統服務的診斷輸出。 此輸出通常比您想要的更詳細&#xff0c;因此請使用此頁面上的命令行選…

【深度學習】深刻理解Swin Transformer

Swin Transformer 是一種基于 Transformer 的視覺模型&#xff0c;由 Microsoft 研究團隊提出&#xff0c;旨在解決傳統 Transformer 模型在計算機視覺任務中的高計算復雜度問題。其全稱是 Shifted Window Transformer&#xff0c;通過引入分層架構和滑動窗口機制&#xff0c;S…

從零開始學習 sg200x 多核開發之 sophpi 編譯生成 fip.bin 流程梳理

本文主要介紹 sophpi 編譯生成 fip.bin 流程。 1、編譯前準備 sophpi 的基本編譯流程如下&#xff1a; $ source build/cvisetup.sh $ defconfig sg2002_wevb_riscv64_sd $ clean_all $ build_all $ pack_burn_image注&#xff1a; 需要在 bash 下運行clean_all 非必要可以不…

mysql客戶端命令

目錄 結束符 ; \g \G 中斷輸入 ctrl c 查看命令列表 help ? (\?) connect (\r) status (\s) delimiter (\d) exit (\q) quit (\q) tee (\T) ?編輯 notee (\t) prompt (\R) source (\.) system (\!) ?編輯 use (\u) help contents 結束符 ; \g \G 當我…

scala隱式函數

1 定義 通常我們所說的隱式函數也稱為 隱式轉換&#xff0c;是使用 implicit 修飾的函數 作用&#xff1a; 可以通過一個隱式函數將一種類型轉變為另一種類型 隱式轉換有兩種應用場景&#xff1a; 類型轉換&#xff0c;隱式轉換為期望類型 類型增強 2 示例 ①&#xff1a;類…

Tomcat原理(4)——嘗試手動Servlet的實現

目錄 一、什么是Servlet 1.servlet的定義 2.servlet的結構 二、實現servlet的流程圖 三、具體實現代碼 1、server 2.實體類request&response 3.HttpServlet抽象類 4.再定義三個servlet進行測試 Tomcat原理&#xff08;3&#xff09;——靜&動態資源以及運行項…

Node.js內置模塊

1.內置模塊 Node.js的中文網參考手冊:https://nodejs.cn//api 幫助文檔 API文檔:查看對應的模塊,左邊是模塊,右邊是模塊的成員 源碼:https://github.com/nodejs/node/tree/main/lib 查看 例如: http.js 創建web服務器的模塊 -->進入源碼中,搜索…

【RAG實戰】RAG與大模型應用

1.1 大模型應用的方向&#xff1a;RAG 1.1.1 什么是RAG 1. 生成式AI 一種能夠生成各類內容的技術&#xff0c;包括文本、圖像、音頻和合成數據。自2022年底ChatGPT在全球范圍內推廣以來&#xff0c;基于Transformer解碼器結構的大模型已能在短時間內為用戶生成高質量的文本、…

基于DeepSpeed Chat詳解 PPO 算法中的actor_loss_fn及其核心參數

詳解 PPO 算法中的 actor_loss_fn 及其核心參數 1. 引言 在強化學習中&#xff0c;PPO&#xff08;Proximal Policy Optimization&#xff0c;近端策略優化&#xff09;算法是一種經典且高效的策略優化方法。它通過重要性采樣&#xff08;Importance Sampling&#xff09;和策…

D3 基礎1

D3 D3.js (Data-Driven Documents) 是一個基于 JavaScript 的庫&#xff0c;用于生成動態、交互式數據可視化。它通過操作文檔對象模型 (DOM) 來生成數據驅動的圖形。官方網站是 https://d3js.org/ <!DOCTYPE html> <html lang"en"><head><me…

基線檢查:Windows安全基線.【手動 || 自動】

基線定義 基線通常指配置和管理系統的詳細描述&#xff0c;或者說是最低的安全要求&#xff0c;它包括服務和應用程序設置、操作系統組件的配置、權限和權利分配、管理規則等。 基線檢查內容 主要包括賬號配置安全、口令配置安全、授權配置、日志配置、IP通信配置等方面內容&…

Python -- Linux中的Matplotlib圖中無法顯示中文 (中文為方框)

目的 用matplotlib生成的圖中文無法正常顯示 方法 主要原因: 沒找到字體 進入windows系統的C:\Windows\Fonts目錄, 復制自己想要的字體 粘貼到Linux服務器中對應python文件所處的文件夾內 設置字體: 設置好字體文件的路徑在需要對字體設置的地方設置字體 效果 中文正常顯…

快速理解類的加載過程

當程序主動使用某個類時&#xff0c;如果該類還未加載到內存中&#xff0c;則系統會通過如下三個步驟來對該類進行初始化&#xff1a; 1.加載&#xff1a;將class文件字節碼內容加載到內存中&#xff0c;并將這些靜態數據轉換成方法區的運行時數據結構&#xff0c;然后生成一個…

搭建 Elasticsearch 集群:完整教程

本文將詳細介紹如何在 Linux 環境下搭建一個 Elasticsearch 集群&#xff0c;涵蓋環境準備、配置優化、服務啟動等多個環節。 一、環境準備 創建安裝目錄 mkdir /es cd /es解壓 Elasticsearch 安裝包 tar -xzf elasticsearch-7.10.1-linux-x86_64.tar.gz -C /es配置環境變量 編…

寶塔-docker拉取寶塔鏡像,并運行寶塔鏡像

寶塔-拉取寶塔鏡像&#xff0c;并運行鏡像 第1步&#xff1a;查詢 docker search btpanel/baota此docker鏡像由堡塔安全官方發布&#xff0c;鏡像版本為寶塔面板9.2.0正式版和9.0.0_lts 穩定版&#xff0c;鏡像會隨著寶塔面板更新。 目前支持x86_64和arm架構可供下載使用 版本…

使用 Valgrind 檢測 C 程序中的內存問題 -基礎教程

內存泄漏是許多 C 語言程序中的常見問題&#xff0c;它不僅會導致程序性能下降&#xff0c;甚至可能讓系統崩潰。為了檢測和修復這些問題&#xff0c;Valgrind 是一個非常強大的工具&#xff0c;它可以幫助我們分析 C 程序中的內存使用情況&#xff0c;檢測內存泄漏、越界訪問、…