65.Three.js案例-使用 MeshNormalMaterial 和 MeshDepthMaterial 創建 3D 圖形

65.Three.js案例-使用 MeshNormalMaterial 和 MeshDepthMaterial 創建 3D 圖形

實現效果

在該案例中,Three.js 被用來創建一個包含多個 3D 對象的場景。其中包括:

  • 圓環結(TorusKnot)
  • 立方體(Box)
  • 球體(Sphere)

這些對象使用 MeshNormalMaterial 來渲染,并且整個場景背景為白色,所有對象位于一個居中的容器中。

效果

知識點

WebGLRenderer (WebGL 渲染器)

構造器

THREE.WebGLRenderer(parameters)

參數類型描述
parametersObject包含渲染器選項的對象

常用參數:

  • antialias:布爾值,啟用抗鋸齒以獲得更平滑的渲染結果。
  • alpha:布爾值,是否支持透明背景(默認為黑色)。
  • precision:字符串,著色器精度 (highp, mediump, lowp)。
方法
setSize(width, height, updateStyle)

設置渲染器的尺寸。

  • width:渲染器的寬度(像素)。
  • height:渲染器的高度(像素)。
  • updateStyle:是否更新 canvas 的樣式尺寸(可選,默認為 true)。
setClearColor(color, opacity)

設置渲染器的清除顏色。

  • color:十六進制顏色值或 CSS 字符串表示的顏色。
  • opacity:透明度(0.0 到 1.0)。

PerspectiveCamera (透視相機)

構造器

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

參數類型描述
fovNumber視野角度(單位是度),即垂直視角范圍
aspectNumber渲染區域的寬高比(通常用窗口寬度除以高度)
nearNumber近裁剪面(相機視圖可見范圍的最近距離)
farNumber遠裁剪面(相機視圖可見范圍的最遠距離)
方法
position.set(x, y, z)

設置相機的位置坐標。

lookAt(vector)

讓相機朝向指定的三維坐標點。

Scene (場景)

構造器

THREE.Scene()

用于創建一個空的場景對象,之后可以將相機、燈光、幾何體等添加到場景中。

屬性
overrideMaterial : Material

如果被賦值,則場景中的所有物體都會使用這個材質進行渲染,常用于調試。

translateX(value)

沿 X 軸移動整個場景。

MeshNormalMaterial (法線材質)

構造器

THREE.MeshNormalMaterial(options)

參數類型描述
optionsObject可選參數對象

常見參數:

  • wireframe:布爾值,是否顯示線框模式。
  • flatShading:布爾值,是否使用平面著色。
  • visible:布爾值,控制材質是否可見。

說明:此材質會根據物體表面的法線方向映射成 RGB 顏色,用于調試模型的表面方向。

TorusKnotGeometry (圓環結幾何體)

構造器

THREE.TorusKnotGeometry(radius, tube, tubularSegments, radialSegments, p, q)

參數類型描述
radiusNumber圓環結的主半徑
tubeNumber管道的半徑
tubularSegmentsNumber管道分段數(越高越光滑)
radialSegmentsNumber徑向分段數(越高越光滑)
pNumber扭轉因子(控制打結的方式)
qNumber扭曲因子(控制打結的方式)

BoxGeometry (立方體幾何體)

構造器

THREE.BoxGeometry(width, height, depth, widthSegments, heightSegments, depthSegments)

參數類型描述
widthNumber立方體寬度
heightNumber立方體高度
depthNumber立方體深度
widthSegmentsNumber寬度方向上的分段數
heightSegmentsNumber高度方向上的分段數
depthSegmentsNumber深度方向上的分段數

SphereGeometry (球體幾何體)

構造器

THREE.SphereGeometry(radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength)

參數類型描述
radiusNumber球體半徑
widthSegmentsNumber經線數量(越高越光滑)
heightSegmentsNumber緯線數量(越高越光滑)
phiStartNumber起始經度角(弧度)
phiLengthNumber經度跨度(弧度)
thetaStartNumber起始緯度角(弧度)
thetaLengthNumber緯度跨度(弧度)

Mesh (網格模型)

構造器

THREE.Mesh(geometry, material)

參數類型描述
geometryGeometry幾何體對象
materialMaterial材質對象
方法
translateX(value)

沿 X 軸方向移動模型。

代碼

<!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 type="text/javascript">// 創建渲染器并開啟抗鋸齒var myRenderer = new THREE.WebGLRenderer({antialias: true});myRenderer.setSize(window.innerWidth, window.innerHeight);myRenderer.setClearColor('white', 1.0);$('#myContainer')[0].appendChild(myRenderer.domElement);// 創建透視相機var myCamera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 30, 1000);myCamera.position.set(-76.03, 30.40, -48.87);myCamera.lookAt(new THREE.Vector3(0, 0, 0));// 創建場景var myScene = new THREE.Scene();myScene.overrideMaterial = new THREE.MeshDepthMaterial();myScene.translateX(30);// 創建法向量材質var myMaterial = new THREE.MeshNormalMaterial();// 創建圓環結var myTorusKnotGeometry = new THREE.TorusKnotGeometry(8, 3, 200, 60);var myTorusKnotMesh = new THREE.Mesh(myTorusKnotGeometry, myMaterial);myTorusKnotMesh.translateX(-62);myScene.add(myTorusKnotMesh);// 創建立方體var myBoxGeometry = new THREE.BoxGeometry(20, 20, 20);var myBoxMesh = new THREE.Mesh(myBoxGeometry, myMaterial);myBoxMesh.translateX(-20);myScene.add(myBoxMesh);// 創建球體var mySphereGeometry = new THREE.SphereGeometry(20, 60, 60);var mySphereMesh = new THREE.Mesh(mySphereGeometry, myMaterial);mySphereMesh.translateX(70);myScene.add(mySphereMesh);// 渲染場景myRenderer.render(myScene, myCamera);
</script>
</body>
</html>

演示鏈接

演示效果

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

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

相關文章

Python學習筆記--Django的安裝和簡單使用(一)

一.簡介 Django 是一個用于構建 Web 應用程序的高級 Python Web 框架。Django 提供了一套強大的工具和約定&#xff0c;使得開發者能夠快速構建功能齊全且易于維護的網站。Django 遵守 BSD 版權&#xff0c;初次發布于 2005 年 7 月, 并于 2008 年 9 月發布了第一個正式版本 1…

《汽車噪聲控制》復習重點

題型 選擇 填空 分析 計算 第一章 噪聲定義 不需要的聲音&#xff0c;妨礙正常工作、學習、生活&#xff0c;危害身體健康的聲音&#xff0c;統稱為噪聲 噪聲污染 與大氣污染、水污染并稱現代社會三大公害 聲波基本概念 定義 媒質質點的機械振動由近及遠傳播&am…

冒泡排序的原理

冒泡排序是一種簡單的排序算法&#xff0c;它通過重復地遍歷待排序的列表&#xff0c;比較相鄰的元素并交換它們的位置來實現排序。具體原理如下&#xff1a; 冒泡排序的基本思想 冒泡排序的核心思想是通過相鄰元素的比較和交換&#xff0c;將較大的元素逐步“冒泡”到列表的…

前端npm包發布流程:從準備到上線的完整指南

無論是使用第三方庫還是創建和分享自己的工具&#xff0c;npm都為我們提供了一個強大而便捷的平臺&#xff0c;然而很多開發者在將自己的代碼發布到npm上時往往面臨各種困惑和挑戰&#xff0c;本篇文章將從準備工作到發布上線&#xff0c;探討如何讓npm包更易發布及避免常見的坑…

使用 CDN 在國內加載本地 PDF 文件并處理批注:PDF.js 5.x 實戰指南

PDF.js 是一個強大的開源 JavaScript 庫&#xff0c;用于在 Web 瀏覽器中渲染 PDF 文件。它由 Mozilla 開發&#xff0c;能夠將 PDF 文檔繪制到 HTML5 Canvas 或 SVG 上&#xff0c;無需任何本機代碼或瀏覽器插件。對于許多需要在網頁中展示 PDF 內容的應用場景來說&#xff0c…

網絡化:DevOps 工程的必要基礎(Networking: The Essential Foundation for DevOps Engineering)

李升偉 編譯 理解網絡化基礎知識 你是否曾想過是什么真正讓卓越的DevOps工程師與眾人區別開來&#xff1f;答案是網絡化。是的&#xff0c;對網絡的基本理解不僅僅是有幫助的——它是絕對必要的。在當今以微服務、容器和分布式系統為主宰的互聯互通世界中&#xff0c;對網絡原…

C++基本知識 —— 缺省參數·函數重載·引用

C基本知識 —— 缺省參數函數重載引用 1. 缺省參數2. 函數重載3. 引用3.1 引用的基礎知識3.2 引用的作用3.3 const 引用3.4 指針與引用的關系 1. 缺省參數 什么是缺省參數&#xff1f;缺省參數是聲明或定義函數時為函數的參數指定一個缺省值。在調用該函數的時候&#xff0c;如…

Rust 官方文檔:人話版翻譯指南

鑒于大部分翻譯文檔都不太會說人話&#xff0c;本專欄主要內容為 rust 程序設計語言、rust 參考手冊、std 庫 等官方文檔的中譯中。

FlySecAgent:——MCP全自動AI Agent的實戰利器

最近&#xff0c;出于對人工智能在網絡安全領域應用潛力的濃厚興趣&#xff0c;我利用閑暇時間進行了深入研究&#xff0c;并成功開發了一款小型輕量化的AI Agent安全客戶端FlySecAgent。 什么是 FlySecAgent&#xff1f; 這是一個基于大語言模型和MCP&#xff08;Model-Contr…

實戰項目5(08)

目錄 任務場景一 【r1配置】 【r2配置】 【r3配置】 ???????任務場景二 【r1配置】 【r2配置】 ???????任務場景一 按照下圖完成網絡拓撲搭建和配置 任務要求&#xff1a; 通過在路由器R1、R2和R3上配置靜態路由&#xff0c;實現網絡中各終端PC能夠正常…

基于Kubernetes的Apache Pulsar云原生架構解析與集群部署指南(下)

文章目錄 k8s安裝部署Pulsar集群前期準備版本要求 安裝 Pulsar Helm chart管理pulsarClustersBrokersTopic k8s安裝部署Pulsar集群 前期準備 版本要求 Kubernetes 集群&#xff0c;版本 1.14 或更高版本Helm v3&#xff08;3.0.2 或更高版本&#xff09;數據持久化&#xff…

C35-數組和函數開發初見

一 數組作為函數的參數 用于傳遞數組中的某一個元素→意義不大 數組名當做函數實際參數 示例 代碼 #include <stdio.h>//封裝函數PrintArr void PrintArr(int arr[3]){int i;for(i0;i<3;i){printf("%d ",arr[i]);}putchar(\n);}//主函數 int main() { …

【小沐學GIS】基于C++繪制二維瓦片地圖2D Map(QT、OpenGL、GIS)

&#x1f37a;三維數字地球系列相關文章如下&#x1f37a;&#xff1a;1【小沐學GIS】基于C繪制三維數字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐學GIS】基于C繪制三維數字地球Earth&#xff08;OpenGL、glfw、glut、GIS&#xff09;第二期3【小沐學…

idea左側項目資源管理器不見了處理

使用idea誤觸導致&#xff0c;側邊欄和功能欄沒了&#xff0c;如何打開&#xff1f; 1.打開文件&#xff08;File&#xff09; 2. 打開設置&#xff08;Settings&#xff09; 3.選擇Appearance&Behavior--->Appearance劃到最下面&#xff0c;開啟顯示工具欄和左側并排布…

[Java實戰]Spring Boot 靜態資源配置(十三)

[Java實戰]Spring Boot 靜態資源配置&#xff08;十三&#xff09; 引言 靜態資源&#xff08;如 HTML、CSS、JavaScript、圖片等&#xff09;是 Web 應用的基石。Spring Boot 通過自動化配置簡化了靜態資源管理&#xff0c;但面對復雜場景&#xff08;如多模塊項目、CDN 集成…

多模態大語言模型arxiv論文略讀(六十九)

Prompt-Aware Adapter: Towards Learning Adaptive Visual Tokens for Multimodal Large Language Models ?? 論文標題&#xff1a;Prompt-Aware Adapter: Towards Learning Adaptive Visual Tokens for Multimodal Large Language Models ?? 論文作者&#xff1a;Yue Zha…

Python 基礎語法與數據類型(七) - 函數的定義與調用 (def, return)

文章目錄 為什么要使用函數&#xff1f;函數的定義 (def)函數的調用函數參數 (Parameters vs Arguments)返回值 (return)變量作用域 (簡要了解)總結練習題練習題答案 **創作不易&#xff0c;請大家點贊加收藏&#xff0c;關注我&#xff0c;持續更新教程&#xff01;** 到目前為…

華為配置篇-RSTP/MSTP實驗

MSTP 一、簡介二、常用命令總結三、實驗 一、簡介 RSTP&#xff08;快速生成樹協議&#xff09;? RSTP&#xff08;Rapid Spanning Tree Protocol&#xff09;是 STP 的改進版本&#xff0c;基于 ??IEEE 802.1w 標準??&#xff0c;核心目標是解決傳統 STP 收斂速度慢的問…

Docker Compose 完全指南:從入門到生產實踐

Docker Compose 完全指南&#xff1a;從入門到生產實踐 1. Docker Compose 簡介與核心價值 Docker Compose 是一個用于定義和運行多容器 Docker 應用程序的工具。通過一個 YAML 文件來配置應用的服務&#xff0c;只需簡單命令就能創建和啟動所有服務。 核心優勢&#xff1a;…

Linux 離線安裝 Docker 和 Docker Compose 最新版 的完整指南

一、準備工作 1. 下載安裝包?&#xff08;需在有網絡的機器操作&#xff09;&#xff1a; Docker 引擎&#xff1a;從官方倉庫下載最新二進制包 wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.6.tgz?Docker Compose&#xff1a;下載最新二進制…