二、几何体BufferGeometry顶点笔记

news/2025/2/20 23:37:02/

一、几何体顶点位置数据和点模型

1、缓冲类型几何体BufferGeometry

threejs的长方体BoxGeometry、球体SphereGeometry等几何体都是基于BufferGeometry类构建的,BufferGeometry是一个没有任何形状的空几何体,你可以通过BufferGeometry自定义任何几何形状,具体一点说就是定义顶点数据

//创建一个空的几何体对象
const geometry = new THREE.BufferGeometry(); 

2、BufferAttribute定义几何体顶点数据

通过javascript类型化数组 Float32Array创建一组xyz坐标数据用来表示几何体的顶点坐标。

//类型化数组创建顶点数据
const vertices = new Float32Array([0, 0, 0, //顶点1坐标50, 0, 0, //顶点2坐标0, 100, 0, //顶点3坐标0, 0, 10, //顶点4坐标0, 0, 100, //顶点5坐标50, 0, 10, //顶点6坐标
]);

通过threejs的属性缓冲区对象BufferAttribute 表示threejs几何体顶点数据。

// 创建属性缓冲区对象
//3个为一组,表示一个顶点的xyz坐标
const attribue = new THREE.BufferAttribute(vertices, 3); 

3、设置几何体顶点.attributes.position

通过geometry.attributes.position设置几何体顶点位置属性的值BufferAttribute。赋值给几何体,把几何体绑定起来。

// 设置几何体attributes属性的位置属性
geometry.attributes.position = attribue;

4、点模型Points

点模型Points和网格模型Mesh一样,都是threejs的一种模型对象,只是大部分情况下都是用Mesh表示物体。

网格模型Mesh有自己对应的网格材质,同样点模型Points有自己对应的点材质PointsMaterial

// 点渲染模式
const material = new THREE.PointsMaterial({color: 0xffff00,size: 10.0 //点对象像素尺寸
}); 

 几何体geometry作为点模型Points参数,会把几何体渲染为点,把几何体作为Mesh的参数会把几何体渲染为面。

const points = new THREE.Points(geometry, material); //点模型对象

5、全部代码

import * as THREE from 'three'//创建一个空的几何体对象
const geometry = new THREE.BufferGeometry();
//类型化数组创建顶点数据
const vertices = new Float32Array([0, 0, 0, //顶点1坐标50, 0, 0, //顶点2坐标0, 100, 0, //顶点3坐标0, 0, 10, //顶点4坐标0, 0, 100, //顶点5坐标50, 0, 10, //顶点6坐标
])
// 创建属性缓冲区对象
//3个为一组,表示一个顶点的xyz坐标
const attribue = new THREE.BufferAttribute(vertices, 3)
//绑定几何体
geometry.attributes.position = attribue;
// 点渲染模式
const material = new THREE.PointsMaterial({color: 'green',size: 20,
})
const points = new THREE.Points(geometry, material)export default points
import cube from './model.js'const scene = new THREE.Scene();
scene.add(cube);

二、线模型对象 

1、线模型Line渲染顶点数据 

下面代码是把几何体作为线模型Line 的参数,你会发现渲染效果是从第一个点开始到最后一个点,依次连成线。

// 线材质对象
const material = new THREE.LineBasicMaterial({color: '#fff'
})
// 创建线模型对象
const Line = new THREE.Line(geometry,material)

 

2、线模型LineLoop

连续闭合

// 线材质对象
const material = new THREE.LineBasicMaterial({color: '#fff'
})
// 创建线模型对象
const Line = new THREE.LineLoop(geometry,material)

3、 线模型LineSegments

一段一段的

// 线材质对象
const material = new THREE.LineBasicMaterial({color: '#fff'
})
// 创建线模型对象
const Line = new THREE.LineSegments(geometry,material)

三、网格模型(三角形概念)

 

 


http://www.ppmy.cn/news/1573378.html

相关文章

C语言之easyX

目录 概要 easyX整体架构 图形绘制 画布宽高 圆形 图片的贴图 加载图像 游戏框架 概要 easyX是一个轻量级的图形库,用于在Windows平台上进行简单的2D图形绘制。它提供了一组简单易用的函数,可以方便地绘制基本的图形元素,如线条、矩形、圆形…

.Net9.0访问MSSQL数据库读取表中数据行

1.表结构与表中数据 查询记录语句: SELECT TOP (1000) [StatusName],[StatusValue],[StatusString],[StatusTip],[StatusDescription],[SortID]FROM [WHQJAccountsDB].[dbo].[SystemStatusInfo] 查询总记录数语句: select count(SortID) as row_count f…

Ubuntu下mysql主从复制搭建

本文介绍mysql 8.4主从集群的搭建,从单个机器安装到集群的配置,整体走了一遍,希望对大家有帮助。mysql 8.4和之前的版本命令上有些变化,大家用来参考。 0、环境 ubuntu: 22.04mysql:8.4 1、安装mysql 1…

2025年AI免费大战:从DeepSeek到GPT-5的商业逻辑与行业变革

引言:人工智能行业的2025年重大转折 2025年伊始,人工智能行业的竞争格局发生了深刻变化,尤其是以DeepSeek为代表的新兴力量,通过低成本开源策略迅速崛起,迫使OpenAI、百度文心一言等人工智能巨头纷纷调整策略&#xf…

AWS Lambda自动化部署流程指南

本文详细介绍从代码开发到AWS Lambda部署的完整自动化流程。 一、流程概览 © ivwdcwso (ID: u012172506) 1.1 流程图 #mermaid-svg-K7NI3p8n1wqwExc1 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-K7NI3p8…

Spring Boot(8)深入理解 @Autowired 注解:使用场景与实战示例

搞个引言 在 Spring 框架的开发中,依赖注入(Dependency Injection,简称 DI)是它的一个核心特性,它能够让代码更加模块化、可测试,并且易于维护。而 Autowired 注解作为 Spring 实现依赖注入的关键工具&…

相亲说shell运行原理和操作系统初涉及

shell命令以及运行原理 shell概念: 我们所学习的Linux操作系统广义上其实分为两个部分:Linux内核和外壳程序 Linux内核:也被称为狭义上的操作系统 外壳程序:就是对我们写的命令行向Linux内核进行翻译,也叫做shell(…

2025 年 1 月公链行业研报:比特币主导地位强化

2025 年 1 月公链行业研报 作者:Stella L (stellafootprint.network) 数据来源:Footprint Analytics 公链研究页面 2025 年 1 月,加密市场总市值增长 7.2% 至 2.8 万亿美元,主要区块链平台表现分化。在新的监管政策与人工智能基…