學習threejs,THREE.CircleGeometry 二維平面圓形幾何體

👨??? 主頁: gis分享者
👨??? 感謝各位大佬 點贊👍 收藏? 留言📝 加關注?!
👨??? 收錄于專欄:threejs gis工程師

文章目錄

  • 一、🍀前言
    • 1.1 ??THREE.CircleGeometry 圓形幾何體
  • 二、🍀創建THREE.CircleGeometry 二維平面圓形幾何體
    • 1. ??實現思路
    • 2. ??代碼樣例


一、🍀前言

本文詳細介紹如何基于threejs在三維場景中創建THREE.CircleGeometry 二維平面圓形幾何體,親測可用。希望能幫助到您。一起學習,加油!加油!

1.1 ??THREE.CircleGeometry 圓形幾何體

THREE.CircleGeometry是歐式幾何的一個簡單形狀,它由圍繞著一個中心點的三角分段的數量所構造,由給定的半徑來延展。 同時它也可以用于創建規則多邊形,其分段數量取決于該規則多邊形的邊數。
構造函數:
CircleGeometry(radius : Float, segments : Integer, thetaStart : Float, thetaLength : Float)
radius — 圓形的半徑,默認值為1
segments — 分段(三角面)的數量,最小值為3,默認值為8。
thetaStart — 第一個分段的起始角度,默認為0。(three o’clock position)
thetaLength — 圓形扇區的中心角,通常被稱為“θ”(西塔)。默認值是2*Pi,這使其成為一個完整的圓。
屬性:
.parameters : Object
一個包含著構造函數中每個參數的對象。在對象實例化之后,對該屬性的任何修改都不會改變這個幾何體。

二、🍀創建THREE.CircleGeometry 二維平面圓形幾何體

1. ??實現思路

  • 1、初始化renderer渲染器
  • 2、初始化Scene三維場景scene。
  • 3、初始化PerspectiveCamera透視相機camera,定義相機位置 camera.position,設置相機方向camera.lookAt。
  • 4、初始化THREE.SpotLight聚光燈光源spotLight,設置spotLight的位置信息,場景scene中添加spotLight。
  • 5、加載幾何模型:創建THREE.MeshNormalMaterial法向量材質meshMaterial,創建THREE.MeshBasicMaterial基礎材質wireFrameMat,設置wireFrameMat基礎材質的線框wireframe為true,通過THREE.SceneUtils.createMultiMaterialObject方法傳入THREE.CircleGeometry圓形幾何體geom和meshMaterial、wireFrameMat材質等參數創建平面幾何體網格組circle,scene場景中添加circle。具體代碼參考代碼樣例。
  • 6、加入gui控制,控制創建的圓形幾何體半徑、分段數、起始角度、圓形扇區的中心角。加入stats監控器,監控幀數信息。

2. ??代碼樣例

<!DOCTYPE html><html><head><title>THREE.CircleGeometry 二維平面圓形幾何體</title><script type="text/javascript" src="../libs/three.js"></script><script type="text/javascript" src="../libs/stats.js"></script><script type="text/javascript" src="../libs/dat.gui.js"></script><style>body {/* set margin to 0 and overflow to hidden, to go fullscreen */margin: 0;overflow: hidden;}</style>
</head>
<body><div id="Stats-output">
</div>
<!-- Div which will hold the Output -->
<div id="WebGL-output">
</div><!-- Javascript code that runs our Three.js examples -->
<script type="text/javascript">// once everything is loaded, we run our Three.js stuff.function init() {var stats = initStats();// create a scene, that will hold all our elements such as objects, cameras and lights.var scene = new THREE.Scene();// create a camera, which defines where we're looking at.var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);// create a render and set the sizevar webGLRenderer = new THREE.WebGLRenderer();webGLRenderer.setClearColor(new THREE.Color(0xEEEEEE, 1.0));webGLRenderer.setSize(window.innerWidth, window.innerHeight);webGLRenderer.shadowMapEnabled = true;var circle = createMesh(new THREE.CircleGeometry(4, 10, 0.3 * Math.PI * 2, 0.3 * Math.PI * 2));// add the sphere to the scenescene.add(circle);// position and point the camera to the center of the scenecamera.position.x = -20;camera.position.y = 30;camera.position.z = 40;camera.lookAt(new THREE.Vector3(10, 0, 0));// add spotlight for the shadowsvar spotLight = new THREE.SpotLight(0xffffff);spotLight.position.set(-40, 60, -10);scene.add(spotLight);// add the output of the renderer to the html elementdocument.getElementById("WebGL-output").appendChild(webGLRenderer.domElement);// call the render functionvar step = 0;// setup the control guivar controls = new function () {// we need the first child, since it's a multimaterialthis.radius = 4;this.thetaStart = 0.3 * Math.PI * 2;this.thetaLength = 0.3 * Math.PI * 2;this.segments = 10;this.redraw = function () {// remove the old planescene.remove(circle);// create a new onecircle = createMesh(new THREE.CircleGeometry(controls.radius, controls.segments, controls.thetaStart, controls.thetaLength));// add it to the scene.scene.add(circle);};};var gui = new dat.GUI();gui.add(controls, 'radius', 0, 40).onChange(controls.redraw);gui.add(controls, 'segments', 0, 40).onChange(controls.redraw);gui.add(controls, 'thetaStart', 0, 2 * Math.PI).onChange(controls.redraw);gui.add(controls, 'thetaLength', 0, 2 * Math.PI).onChange(controls.redraw);render();function createMesh(geom) {// assign two materialsvar meshMaterial = new THREE.MeshNormalMaterial();meshMaterial.side = THREE.DoubleSide;var wireFrameMat = new THREE.MeshBasicMaterial();wireFrameMat.wireframe = true;// create a multimaterialvar mesh = THREE.SceneUtils.createMultiMaterialObject(geom, [meshMaterial, wireFrameMat]);return mesh;}function render() {stats.update();circle.rotation.y = step += 0.01;// render using requestAnimationFramerequestAnimationFrame(render);webGLRenderer.render(scene, camera);}function initStats() {var stats = new Stats();stats.setMode(0); // 0: fps, 1: ms// Align top-leftstats.domElement.style.position = 'absolute';stats.domElement.style.left = '0px';stats.domElement.style.top = '0px';document.getElementById("Stats-output").appendChild(stats.domElement);return stats;}}window.onload = init;
</script>
</body>
</html>

效果如下:
在這里插入圖片描述

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

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

相關文章

【微服務】SpringBoot 自定義消息轉換器使用詳解

目錄 一、前言 二、SpringBoot 內容協商介紹 2.1 什么是內容協商 2.2 內容協商機制深入理解 2.2.1 內容協商產生的場景 2.3 內容協商實現的常用方式 2.3.1 前置準備 2.3.2 通過HTTP請求頭 2.3.2.1 操作示例 2.3.3 通過請求參數 三、SpringBoot 消息轉換器介紹 3.1 H…

深入理解Composer自動加載機制

Composer是PHP生態系統中最常用的依賴管理工具之一&#xff0c;它不僅能夠幫助開發者管理項目的依賴關系&#xff0c;還能夠自動加載這些依賴項。自動加載機制是Composer的核心功能之一&#xff0c;通過自動加載&#xff0c;開發者可以在運行時按需加載所需的類和文件&#xff…

【游戲設計原理】35 - 委員會設計

一、 分析并總結 核心內容 定義&#xff1a;委員會設計&#xff08;Design by Committee&#xff09;是指游戲開發團隊通過集體協作完成設計&#xff0c;這種模式結合了多樣化的創意和個體專長&#xff0c;但也可能因缺乏一致性而導致設計的混亂。優勢&#xff1a;多樣性帶來…

【Java】IO流練習

IO流練習 題干&#xff1a; 根據指定要求&#xff0c;完成電話記錄、 注冊、登錄 注冊 題干&#xff1a; 完成【注冊】功能&#xff1a; 要求&#xff1a; 用戶輸入用戶名、密碼存入users.txt文件中 若users.txt文件不存在&#xff0c;創建該文件若users.txt文件存在 輸入…

內網學習:工作組用戶與權限

目錄 一、本地用戶組介紹本地工作組介紹用戶與組的關系 二、四種用戶類型及權限比較本地系統最高權限&#xff08;System賬戶&#xff09;特性Administrator與System賬戶的區別 本地最高管理員&#xff08;Administrator用戶&#xff09;特性 本地普通管理員特性 本地普通用戶特…

SpringMVC核心、兩種視圖解析方法、過濾器攔截器 “ / “ 的意義

SpringMVC的執行流程 1. Spring MVC 的視圖解析機制 Spring MVC 的核心職責之一是將數據綁定到視圖并呈現給用戶。它通過 視圖解析器&#xff08;View Resolver&#xff09; 來將邏輯視圖名稱解析為具體的視圖文件&#xff08;如 HTML、JSP&#xff09;。 核心流程 Controlle…

抽象類和接口的區別是什么?

抽象類和接口在編程中都是用來定義對象的公共行為的重要概念&#xff0c;但兩者之間存在顯著的區別。以下是對抽象類和接口的詳細比較&#xff1a; 一、定義與關鍵字 抽象類&#xff1a;使用abstract關鍵字定義&#xff0c;表示該類是抽象的&#xff0c;不能被實例化。抽象類…

html+css+js網頁設計 美食 美拾9個頁面

htmlcssjs網頁設計 美食 美拾9個頁面 網頁作品代碼簡單&#xff0c;可使用任意HTML輯軟件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html編輯軟件進行運行及修改編輯等操作&#xff09;。 獲取源碼 1&#xff0…

Linux下PostgreSQL-12.0安裝部署詳細步驟

一、安裝環境 postgresql-12.0 CentOS-7.6 注意&#xff1a;確認linux系統可以正常連接網絡&#xff0c;因為在后面需要添加依賴包。 二、pg數據庫安裝包下載 下載地址&#xff1a;PostgreSQL: File Browser 選擇要安裝的版本進行下載&#xff1a; 三、安裝依賴包 在要安…

『VUE』vue-quill-editor設置內容不可編輯(詳細圖文注釋)

目錄 預覽思路調用代碼借助Props添加isDisable屬性控制 是否內容可編輯總結 歡迎關注 『VUE』 專欄&#xff0c;持續更新中 歡迎關注 『VUE』 專欄&#xff0c;持續更新中 預覽 思路 禁用焦點事件和內容改變事件 調用代碼 <quillEditorclass"editor":class"…

python 和go 語法對比

Python 和 Go 是兩種設計哲學和應用場景有所不同的編程語言&#xff0c;它們在語法、類型系統、并發模型等方面存在顯著差異。以下是 Python 和 Go 語法特點的詳細對比&#xff1a; 語法簡潔性與結構 Python 的語法以其簡潔易讀而著稱。它使用縮進來表示代碼塊的層次結構&…

我們來學activiti -- bpmn

bpmn 題記bpmn結余 題記 在《Activiti很難學》提到學習知識點需要面對的思想鋼印問題 按常見步驟&#xff0c;先展示下官方的客套話 BPMN&#xff08;Business Process Model and Notation&#xff09;是一種業務流程建模符號&#xff0c; 它是一種圖形化的語言&#xff0c;用…

【MuJoCo和PhysX】

MuJoCo 與 Unity 的 PhysX 引擎的主要區別 應用領域&#xff1a; MuJoCo&#xff1a;主要用于機器人學、強化學習、生物力學等領域&#xff0c;擅長處理多自由度、復雜動力學問題&#xff0c;尤其適合進行高精度的物理仿真。 Unity PhysX&#xff1a;主要用于游戲開發、虛擬現…

LeetCode:257. 二叉樹的所有路徑

跟著carl學算法&#xff0c;本系列博客僅做個人記錄&#xff0c;建議大家都去看carl本人的博客&#xff0c;寫的真的很好的&#xff01; 代碼隨想錄 LeetCode&#xff1a;257. 二叉樹的所有路徑 給你一個二叉樹的根節點 root &#xff0c;按 任意順序 &#xff0c;返回所有從根…

十二月第五周python

第一個程序&#xff0c;熟悉轉換器&#xff0c;把加法計算器變成exe# // 1,制作加法計算器&#xff0c; # 輸入兩個數字得到相加結果并輸出aint(input("輸入數字&#xff1a;"))#int()是把輸入的內容轉換成整數&#xff0c; bint(input("輸入數字&#xff1a;&…

FFmpeg 的常用API

FFmpeg 的常用API 附錄&#xff1a;FFmpeg庫介紹 庫介紹libavcodec音視頻編解碼核心庫編碼 (avcodec_send_frame, avcodec_receive_packet)。解碼 (avcodec_send_packet, avcodec_receive_frame)。libavformat提供了音視頻流的解析和封裝功能&#xff0c;多種多媒體封裝格式&…

關于最新MySQL9.0.1版本zip自配(通用)版下載、安裝、環境配置

一、下載 從MySQL官網進行下載MySQL最新版本&#xff0c;滑到頁面最下面點擊社區免費版&#xff0c;&#xff08;不是企業版&#xff09; 點擊完成后選擇自己想要下載的版本&#xff0c;選擇下載zip壓縮&#xff0c;不用debug和其他的東西。 下載完成后進入解壓&#xff0c;注…

vulnhub靶場 Empire LupinOne

使用命令查看靶機ip,訪問ip arp-scan -l 使用御劍掃描一下子域名&#xff0c;但是沒有獲取到什么有用的信息 這是一個Apache文檔&#xff0c;沒有什么用 緊接著我們嘗試暴力破解&#xff0c;這里推薦使用ffuf工具暴力破解目錄&#xff0c;kali自帶的ffuf掃描速度賊快 參數解釋…

Kubernetes# Helm工具使用

目錄 概念 核心組件 Helm客戶端 Tiller Chart Repository Release Helm安裝 Helm使用 創建Helm Chart 定義Chart元數據 定義Template模板 定義values參數 打包和部署 Helm Chart 推送到遠程倉庫 Helm常用命令 概念 Helm 是一個 Kubernetes 的包管理工具&#…

Mirror網絡框架-從入門到精通之Mirror簡介

前言 在現代游戲開發中&#xff0c;網絡功能日益成為提升游戲體驗的關鍵組成部分。Mirror是一個用于Unity的開源網絡框架&#xff0c;專為多人游戲開發設計。它使得開發者能夠輕松實現網絡連接、數據同步和游戲狀態管理。本文將深入介紹Mirror的基本概念、如何與其他網絡框架進…