vue+threeJs 繪制3D圓形

? ? ? ? 嗨,我是小路。今天主要和大家分享的主題是“vue+threeJs 繪制圓形”。? ? ? ??

今天找到一個用three.js繪制圖形的項目,主要是用來繪制各種形狀。

項目案例示意圖

1.THREE.ShapeGeometry

定義:是 Three.js 中用于從 2D 路徑形狀(Shape)生成 3D 幾何體的類。它非常適合用來創建復雜的 2.5D 或拉伸形狀的幾何體

2.啟用 Wireframe

定義:"wireframe" 是一種渲染模式,以線框的形式顯示幾何體的邊,而不是填充面。這在可視化模型結構、調試復雜幾何體或創建特定視覺效果時非常有用。

3.THREE.ExtrudeGeometry

定義:用于將?2D 形狀?擠壓成?3D 幾何體。原來的二位圖如下:

參數說明

steps

分層數

depth

拉伸深度

bevelEnabled

是否倒角

bevelThickness

控制倒角的厚度

bevelSize

0 無倒角 ?0.5 小倒角 ?1 標準倒角 ?2.0+ 強烈倒角

bevelSegments

倒角細分段數

二、實例代碼

<!--繪制各種圖形-->
<template><div class="pageBox"><div class="leftBox" ref="leftRef"></div></div></template>
<script setup>
import { onMounted, onUnmounted, reactive, ref } from 'vue';
import * as THREE from 'three';
// 引入軌道控制器擴展庫OrbitControls.js
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
import { getRandomColor, createLight } from '../utils/commonThree';
const leftRef = ref();
// 定義相機輸出畫布的尺寸(單位:像素px)
let width = window.innerWidth; //寬度
let height = window.innerHeight; //高度
// 創建3D場景對象Scene
const scene = new THREE.Scene();
//設置背景色
scene.background = new THREE.Color(0x646d59);const camera = new THREE.PerspectiveCamera(75, width / height, 0.1, 1000);
//三角形縮放過大時,會形成多種三角形形成的背景圖
camera.position.z = 100;// 創建渲染器對象
const renderer = new THREE.WebGLRenderer();let material;const createCircle = (color = 0xff0000, x = 0, y = 0, z = 0, rx = 0, ry = 0, rz = 0, s = 1) => {const circleRadius = 50;const shape = new THREE.Shape();shape.moveTo(0, circleRadius);shape.quadraticCurveTo(circleRadius, circleRadius, circleRadius, 0);shape.quadraticCurveTo(circleRadius, -circleRadius, 0, -circleRadius);shape.quadraticCurveTo(-circleRadius, -circleRadius, -circleRadius, 0);shape.quadraticCurveTo(-circleRadius, circleRadius, 0, circleRadius);// const geometry = new THREE.ShapeGeometry(shape,10000);const extrudeSettings = {steps: 2,           // 分層數depth: 10,           // 拉伸深度bevelEnabled: true,// 是否倒角bevelThickness: 1,//控制倒角的厚度bevelSize: 0.5,//0 無倒角  0.5 小倒角  1 標準倒角  2.0+ 強烈倒角bevelSegments: 3 //倒角細分段數};const geometry = new THREE.ExtrudeGeometry(shape, extrudeSettings);material = new THREE.MeshPhongMaterial({ color: color, side: THREE.DoubleSide, wireframe: true });// material = new THREE.MeshStandardMaterial({ color: color, side: THREE.DoubleSide, wireframe: true })const circle = new THREE.Mesh(geometry, material);circle.scale.set(s, s, s);return circle;
}onMounted(() => {initData()//添加相機空間const controls = new OrbitControls(camera, renderer.domElement);controls.enableDamping = true; // 開啟阻尼controls.dampingFactor = 0.02; // 設置阻尼系數controls.autoRotate = true; // 開啟自動旋轉// 如果OrbitControls改變了相機參數,重新調用渲染器渲染三維場景controls.addEventListener('change', function () {renderer.render(scene, camera); //執行渲染操作});//監聽鼠標、鍵盤事件renderer.setSize(width, height); //設置three.js渲染區域的尺寸(像素px)//將innerHTML置空,避免append重復添加渲染leftRef.value.innerHTML = ''leftRef.value.append(renderer.domElement);})const initData = () => {createLight(scene);const circle = createCircle(0x00f000, 120, 250, 0, 0, 0, 0, 1);scene.add(circle);render();
}
function render() {requestAnimationFrame(render);renderer.render(scene, camera);
}
onUnmounted(() => {//釋放內存renderer.dispose();
})</script>
<style scoped lang="less">
.pageBox {width: 100%;height: 100vh;padding: 0;margin: 0;position: fixed;top: 0;left: 0;display: flex;justify-content: space-between;align-items: center;.rightBox {width: 100%;height: 100%;}
}
</style>

三、總結

? ? ? ?持續的刻意練習,感覺每天都有新的收獲!不僅學會了如何繪制圓形,還初步掌握,如何將2D圖形拉伸成3D效果。

都看到這里了,記得【點贊】+【關注】喲。

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

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

相關文章

macOS燒錄stm32程序初步成功

完整總結&#xff1a;STM32H7 項目編譯與燒錄流程&#xff08;macOS OpenOCD/GDB&#xff09; 1?? 編譯工程 在項目目錄下執行 make&#xff0c;生成 ELF 文件&#xff08;如 Blink.elf&#xff09;&#xff1a; cd /Users/code/Stm32code/Blink/build make clean # 可選…

正則表達式的修飾符

修飾符 修飾符不寫在正則表達式里&#xff0c;標記位于表達式之外 /正則表達式/修飾符gglobal - 全局匹配 查找所有的匹配項。 i i (ignore case) - 忽略大小寫 示例&#xff1a;/abc/i 可以匹配 "abc", "Abc", "ABC" 等

JS浮點數精度問題

在JavaScript開發中&#xff0c;浮點數精度問題是一個常見的陷阱。本文將深入探討JavaScript中浮點數精度問題的原因、影響以及解決方案。 一、浮點數精度常見問題 &#xff08;一&#xff09;加法運算 console.log(0.1 0.2); // 0.30000000000000004 console.log(0.7 0.1…

本地Markdown開源知識庫選型指南

本地Markdown開源知識庫選型指南 以下是幾款優秀的本地Markdown開源知識庫解決方案&#xff0c;適合不同需求場景&#xff1a; 1. Obsidian (非完全開源但免費) 特點&#xff1a;基于Markdown的本地優先知識管理&#xff0c;豐富的插件生態優勢&#xff1a;雙向鏈接、圖形視…

蘇州SAP代理公司排名:工業園區企業推薦的服務商

目錄 一、SAP實施商選擇標準體系 1、行業經驗維度 2、實施方法論維度 3、資質認證維度 4、團隊實力維度 二、SAP蘇州實施商工博科技 1、SAP雙重認證&#xff0c;高等院校支持 2、以SAP ERP為核心&#xff0c;助力企業數字化轉型 三、蘇州使用SAP的企業 蘇州是中國工業…

springboot項目下面的單元測試注入的RedisConnectionFactory類redisConnectionFactory值為什么為空呢?

你遇到的問題是&#xff1a; RedisConnectionFactory redisConnectionFactory 在單元測試中為 null 這是 Spring Boot 單元測試中非常常見的問題&#xff0c;根本原因是你的測試類沒有啟用 Spring 容器上下文&#xff0c;導致 Resource 注解無法注入 Bean。 ? 正確做法&…

光電學、計算機科學及算法國際會議(OCSA 2025)征稿啟事?

在科技浪潮奔涌向前的當下&#xff0c;光電學、計算機科學及算法領域的創新成果不斷涌現&#xff0c;持續重塑著各個行業的格局&#xff0c;深刻影響著我們的生活。為了進一步促進該領域的學術交流與合作&#xff0c;匯聚全球智慧&#xff0c;光電學、計算機科學及算法國際會議…

小樣本分類新突破:QPT技術詳解

問題導向式提示調優(QPT) 這篇論文主要講了一個針對小樣本(數據量少)文本分類問題的新方法,叫問題導向式提示調優(QPT)。 核心思路是讓預訓練語言模型(比如BERT的升級版RoBERTa)在少量標注數據下,通過設計特定的“提問式模板”和“標簽詞擴展技術”來提升分類效果。…

Oracle EBS 12.1 處理ISG 發布的wsdl 被請求時遇到500錯誤

Oracle 12.1.3 通過ISG 發布了一個服務&#xff0c;該服務在被頻繁調用的時候&#xff0c;出現500 錯誤&#xff0c;臨時解決方案是可以通過重啟oafm組件解決&#xff0c;但是需要定位原因。 排查日志路徑 $INST_TOP/logs/ora/10.1.3/opmn/default_group~oafm~default_group~1…

shadcn/ui

文章目錄 前言? 核心特點&#x1f4e6; 支持組件&#xff08;常用&#xff09;&#x1f680; 安裝使用&#xff08;框架支持&#xff09;初始化&#xff08;Next.js 項目為例&#xff09;添加一個組件 &#x1f9e0; 對比其他組件庫&#x1f4d8; 官方資源? 總結? 功能特性&…

力扣每日一題——找到離給定兩個節點最近的節點

目錄 題目鏈接&#xff1a;2359. 找到離給定兩個節點最近的節點 - 力扣&#xff08;LeetCode&#xff09; 題目描述 解法一&#xff1a;雙指針路徑交匯法? 基本思路 關鍵步驟 為什么這樣可行呢我請問了&#xff1f; 舉個例子 特殊情況 Java寫法&#xff1a; C寫法&a…

Termux可用中間人網絡測試工具Xerosploit

Termux可用中間人網絡測試工具Xerosploit。 Xerosploit 是一款基于 MITM 的本地網絡滲透測試工具包。 食用方法&#xff1a; git clone https://github.com/LionSec/xerosploit cd xerosploit sudo python3 install.py 運行&#xff1a; sudo xerosploit 使用備注&#xff1…

vue3 導出excel

需求&#xff1a;導出自帶格式的excel表格 1.自定義二維數組格式 導出 全部代碼&#xff1a; <el-button click"exportExcel">導出</el-button> const exportExcel () > {const data [[商品, 單價, 數量, 總價],[A, 100, 1.55, { t: n, f: B2*C2…

【SQL】關鍵字

ORDER BY ORDER BY(排序) 語句可以按照一個或多個列的值進行升序&#xff08;ASC&#xff09;或降序&#xff08;DESC&#xff09;排序。 MAX / MIN MAX() 函數返回一組值中的最大值。這個函數常用于數字字段&#xff0c;但也可以用于文本字段來找出按字典順序最后的元素。 …

深度學習篇---OC-SORT實際應用效果

OC-SORT 算法在實際應用中的效果可從準確性、魯棒性、效率三個核心維度評估,其表現與傳統多目標跟蹤算法(如 SORT、DeepSORT)相比有顯著提升,尤其在復雜場景中優勢突出。以下是具體分析: 一、準確性:目標關聯更可靠 1. 遮擋場景下的 ID 保持能力 優勢表現: 傳統算法(…

處理知識庫文件_編寫powershell腳本文件_批量轉換其他格式文件到pdf文件---人工智能工作筆記0249

最近在做部門知識庫&#xff0c;選用的dify&#xff0c;作為rag的工具&#xff0c;但是經過多個對比&#xff0c;最后發現&#xff0c; 比較好用的是&#xff0c;納米搜索&#xff0c;但是可惜納米搜索無法在內網使用&#xff0c;無法把知識庫放到本地&#xff0c;導致 有信息…

NSSCTF [NISACTF 2022]ezheap

2058.[NISACTF 2022]ezheap(堆溢出) [NISACTF 2022]ezheap 1.準備 2.ida分析 main函數 int __cdecl main(int argc, const char **argv, const char **envp) {char *command; // [esp8h] [ebp-10h]char *s; // [espCh] [ebp-Ch]setbuf(stdin, 0);setbuf(stdout, 0);s (cha…

微信小店推客系統達人用戶管理的數據支持和便利

達人粉絲畫像關聯&#xff1a;系統通過技術手段&#xff0c;一定程度上獲取達人粉絲的畫像數據&#xff0c;如年齡分布、性別比例、地域分布、消費偏好等。運營者可以根據這些粉絲畫像&#xff0c;為達人匹配更符合其粉絲需求的商品。例如&#xff0c;若某達人的粉絲以年輕女性…

LeetCode 215:數組中的第K個最大元素 - 兩種高效解法詳解

文章目錄 問題描述解法一&#xff1a;快速選擇算法&#xff08;QuickSelect&#xff09;算法思想算法步驟Java實現復雜度分析算法特點 解法二&#xff1a;最小堆&#xff08;優先隊列&#xff09;算法思想算法步驟Java實現復雜度分析算法特點 兩種解法比較測試示例總結 在算法面…

視頻壓制(Video Encoding/Compression)

視頻壓制是指通過特定的算法和技術&#xff0c;將原始視頻文件轉換為更小體積或更適合傳播的格式的過程。其核心目的是在盡量保持畫質的前提下&#xff0c;減少視頻的文件大小&#xff0c;或適配不同播放設備、網絡環境的需求。 --- ### **關鍵概念解析** 1. **為什么需要壓制…