THREE.js学习笔记6——Geometries

news/2025/1/15 19:46:18/文章来源:https://www.cnblogs.com/xxxiCJQ/p/18673146

这一小节学习THREE.js中的物理模型。
什么是geometry?(英文解释,翻译为中文就看不懂了,直接看英语吧)

  • Composed of vertices (point coordinates in 3D spaces)and faces
  • (triangles that join those vertices to create a surface)
  • Can be used for meshes but also for particles
  • Can store more data than the positions(UV coordinates,normals,colors or anything we want)

所有的Geometry都继承于BufferGeometry,这个类包含了很多内置的方法,例如.translate,.rotateX .normalize

探索其他Geometry

BoxGeometry
PlaneGeometry
CapsuleGeometry
CircleGeometry
ConeGeometry
CylinderGeometry
DodecahedronGeometry
RingGeometry
TorusGeometry
TorusKnotGeometry

深入BoxGeometry
BoxGeometry有六个参数。
width — X 轴上面的宽度,默认值为 1。
height — Y 轴上面的高度,默认值为 1。
depth — Z 轴上面的深度,默认值为 1。
widthSegments — (可选)宽度的分段数,默认值是 1。
heightSegments — (可选)高度的分段数,默认值是 1。
depthSegments — (可选)深度的分段数,默认值是 1。
分段数(细分)对应于构成一个面的三角形的数量。
1 = 每面2个三角形,2 = 每面8个三角形

const BoxGeometry = new THREE.BoxGeometry( 1, 1, 1 ); 
const BoxGeometry = new THREE.BoxGeometry( 1, 1, 1 , 2 , 2 , 2 ); 

在材质中,可以将线框模式打开

const cubeMaterial = new THREE.MeshBasicMaterial({color: 0xff0000,wireframe: true
});

然后渲染结果是

CREATING YOUR OWN BUFFER GEOMETRY

在创建几何体之前,我们需要了解几何数据是如何存储缓冲区,我们将使用[Float32Array](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Float32Array),`Float32Array`具有以下特点 * 是数组形式 * 只能缓存浮点类型数据 * 更容易被电脑所处理

使用Float32Array创建一个三角形,因为三角形有三个顶点,每个顶点有x,y,z三个坐标值,所以总共有九个值

//Float32Array
const positionsArray = new Float32Array(9);
//第一个顶点 First vertice
positionsArray[0] = 0
positionsArray[1] = 0
positionsArray[2] = 0//第二个顶点
positionsArray[3] = 0
positionsArray[4] = 1
positionsArray[5] = 0//第三个顶点
positionsArray[5] = 1
positionsArray[6] = 0
positionsArray[7] = 0//也可以这样写
const positionsArray = new Float32Array([0, 0, 0,0, 1, 0,1, 0, 0,
]);

然后我们可以将Float32Array转换为BufferProperty,其中3这个参数对应于构成一个顶点的值的数量

const positionsAttribute = new THREE.BufferAttribute(positionsArray, 3);

通过.setAttribute(...)BufferAttribute添加到BufferGeometry
position is the name that will be used in the shaders
position是将在材质球中使用的名称

const geometry = new THREE.BufferGeometry()
geometry.setAttribute('position', positionsAttribute);

创建一个新的网格模型,并且添加到场景中

geometry.setAttribute('position', positionsAttribute);const trangle = new THREE.Mesh(geometry, material);
scene.add(trangle)

渲染成功!

创建一大堆三角形,(Math.random() - 0.5)是为了让渲染的三角形堆居中显示。
某些几何体的面共享公共顶点
创建BufferGeometry的时候,我们可以指定一堆顶点,然后用于创建面并多次重复使用顶点的索引

const geometry = new THREE.BufferGeometry()const count = 50
const positionsArray = new Float32Array(count * 3 * 3)
for (let i = 0; i < count * 3 * 3; i++) {positionsArray[i] = (Math.random() - 0.5)
}const positionsAttribute = new THREE.BufferAttribute(positionsArray, 3)
geometry.setAttribute('position', positionsAttribute)const material = new THREE.MeshBasicMaterial({color: 0xff0000,wireframe: true
});
const trangles = new THREE.Mesh(geometry, material);
scene.add(trangles)

渲染结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/869757.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第三节 回归实战

数据处理超参:人为指定不能改变测试数据只有x没有标签y 训练数据拆分,82开,作训练集和验证集(验证模型好坏),模型训练不是一路上升的过程,训练几次验证一次,最好的模型save下来 one-hot独热编码 猪(1 0 0) 狗(0 1 0) 猫(0 0 1) def get_feature_importance(feature_data, label…

Windows git bash 文字显示/斜杠开头数字

前言全局说明Windows git bash 文字显示/斜杠开头数字一、说明 详细介绍:https://zhuanlan.zhihu.com/p/133706032二、问题三、解决方法 git config --global core.quotepath false免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。参考、来源: h…

DDR 带宽的计算与监控

DDR 带宽(Double Data Rate Bandwidth)是指 DDR 内存在一秒内可以传输的数据量,通常以 GB/s(Gigabytes per second) 为单位。它是衡量内存系统性能的重要指标,直接影响系统的数据吞吐能力。 1.如何计算 DDR 带宽 计算 DDR 理论带宽的公式为: DDR主频 * 位宽 = 理论带宽其…

1.15

尽力了,之前的粗心导致现在要改很多以前的坑,明天再继续

中考英语优秀范文-热点话题-传统文化-006 Welcome to Chinese Summer Camp 欢迎参加中国夏令营

1 写作要求 假定你是李华,你校今年暑假将为外国学生举办一场汉语夏令营活动(Chinese Summer Camp)。请你根据下面海报的内容,用英语给你的笔友David写一封电子邮件,介绍本次活动并邀请他参加。词数80左右。 Welcome to Chinese Summer Camp Time:July 18th—July 28th, 2…

机器人

本文来自博客园,作者:Traktorea,转载请注明原文链接:https://www.cnblogs.com/kdsmyhome/p/18673586

使用Nginx实现前端映射到公网IP后端内网不映射公网.250115

一、场景: 系统移动端需要映射到公网,但是后端地址不能映射出去 qbpm.xxxx.cn 系统解析内网IP qmbpm.xxxx.cn 移动端解析公网IP 二、思路: 移动端前端公网端口放出80 443端口 移动端后端映射到内网后端地址qbpm.xxxx.cn:8443 三、解决方法: vim nginx.confserver {listen 8…

Qml 中实现任意角为圆角的矩形

在 Qml 中,矩形(Rectangle)是最常用的元素之一。 然而,标准的矩形元素仅允许设置统一的圆角半径。 在实际开发中,我们经常需要更灵活的圆角设置,例如只对某些角进行圆角处理,或者设置不同角的圆角半径。 本文将介绍如何通过自定义 Qml 元素实现一个任意角可为圆角的矩形…

【附源码】JAVA在线投票系统源码+SpringBoot+VUE+前后端分离

学弟,学妹好,我是爱学习的学姐,今天带来一款优秀的项目:在线投票系统源码 。 本文介绍了系统功能与部署安装步骤,如果您有任何问题,也请联系学姐,偶现在是经验丰富的程序员! 一. 系统演示 系统测试截图系统视频演示https://githubs.xyz/show/340.mp4二. 系统概述【 系统…

Python Playwright学习笔记(一)

一、简介 1.1Playwright 是什么? 它是微软在 2020 年初开源的新一代自动化测试工具,其功能和 selenium 类似,都可以驱动浏览器进行各种自动化操作。 1.2、特点是什么支持当前所有的主流浏览器,包括 chrome、edge、firefox、safari; 支持跨平台多语言:支持Windows、Linux、…

智能驾驶数据采集回注测评工具 - ARS

在数据驱动智能驾驶的时代背景下,开发者们总结了一条适用于智能驾驶的数据闭环开发流程,这条开发线路大致包括实车数据采集->数据存储->数据处理->数据分析->数据标注->模型训练->仿真测试->实车测试->部署发布等关键环节,通过不断开发迭代,逐步完…

2025.1.15 学习

2025.1.15 学习 api开放平台 我们希望在后端使用Http请求调用接口,应该怎么做呢 可以用Hutool工具库中的Http请求工具类,使用如下: public class ApiClient {public String getNameByGet(String name){HashMap<String, Object> paramMap = new HashMap<>();para…