Three.js教程:访问几何体对象的数据

news2025/1/9 15:10:42
推荐:将 NSDT场景编辑器 加入你的3D工具链
其他系列工具: NSDT简石数字孪生

访问几何体对象的数据

实际开发项目的时候,可能会加载外部模型,有些时候需要获取模型几何体的顶点数据,如果想获取几何体的顶点数据首先要熟悉three.js几何体BoxGeometryBufferGeometry的结构。

访问几何体顶点数据其实很简单,刚开始学习不用刻意记忆,直接查看threejs文档,就像访问javascript对象的属性一样。

测试BoxGeometry

调用BoxGeometry创建一个立方体,执行THREE.BoxGeometry构造函数会自动生成几何体对象的顶点位置坐标、顶点法向量等数据。

你可以通过执行下面代码,然后查看浏览器控制台打印的数据

var geometry = new THREE.BoxGeometry(100, 100, 100); //创建一个立方体几何对象Geometry
console.log(geometry);
console.log('几何体顶点位置数据',geometry.vertices);
console.log('三角行面数据',geometry.faces);

BoxGeometryPlaneGeometrySphereGeometry等几何体类的基类是Geometry,所以访问这些几何体的顶点数据,不知道具体属性名称,可以查问threejs文档Geometry

测试PlaneBufferGeometry

PlaneBufferGeometry表示一个矩形平面几何体,执行下面代码,你可以查看该几何体的相关顶点数据。

//创建一个矩形平面几何体
var geometry = new THREE.PlaneBufferGeometry(100, 100);
console.log(geometry);
console.log('几何体顶点位置数据',geometry.attributes.position);
console.log('几何体索引数据',geometry.index);

BoxBufferGeometryPlaneBufferGeometrySphereBufferGeometry等几何体类的基类是BufferGeometry,所以访问这些几何体的顶点数据,不知道具体属性名称,可以查问threejs文档BufferGeometry

案例

通过下面代码修改BoxGeometry的三角形顶点颜色的数据,可以渲染出来如下效果。

var geometry = new THREE.BoxGeometry(100, 100, 100); //创建一个立方体几何对象Geometry
// 遍历几何体的face属性
geometry.faces.forEach(face => {
  // 设置三角面face三个顶点的颜色
  face.vertexColors = [
    new THREE.Color(0xffff00),
    new THREE.Color(0xff00ff),
    new THREE.Color(0x00ffff),
  ]
});
var material = new THREE.MeshBasicMaterial({
  // color: 0x0000ff,
  vertexColors: THREE.FaceColors,
  // wireframe:true,//线框模式渲染
}); //材质对象Material

案例

你可以通过下面代码删除立方体部分三角形面,测试删除效果。

var geometry = new THREE.BoxGeometry(100, 100, 100); //创建一个立方体几何对象Geometry
// pop():删除数组的最后一个元素   shift:删除数组的第一个元素
geometry.faces.pop();
geometry.faces.pop();
geometry.faces.shift();
geometry.faces.shift();
var material = new THREE.MeshLambertMaterial({
  color: 0x0000ff,
  side: THREE.DoubleSide, //两面可见
}); //材质对象Material

访问外部模型几何体顶点数据

Threejs加载外部模型的时候,会把几何体解析为缓冲类型几何体BufferGeometry,所以访问外部模型几何体顶点数据,可以查看文档BufferGeometry。关于外部模型加载的讲解可以查看课程第14章。

3D建模学习工作室

上一篇:Three.js教程:Face3对象定义Geometry的三角形面 (mvrlink.com)

下一篇:Three.js教程:几何体旋转、缩放、平移变换 (mvrlink.com)

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++拷贝构造函数---理解(配图文代码)

序: 说实话,博主卡了一天,哎,老了。。。。理解能力不行。有时候还想着先跳过把,结果下班后,还在纠结是不是自己打开的方式不对,这不,刚理解了点,回来写下笔记&#xff0c…

Vue+TS开发定长虚拟列表

1.定长虚拟列表 定义:虚拟列表也有叫无限滚动的,创建一个滚动列表来渲染大量数据 使用场景有大量数据需要渲染时。 **解决了什么问题?**大量数据需要渲染,例如Vue传统使用V-for遍历会创建大量Node节点,对于内存和渲染…

【AI 导航网站】为了更好的收集 AI 资源,我开发了一个 AI 导航网站

AI 导航网站 目前 AI 应用正呈迸发式增长,然而一个人获取资源的途径有限,对于目前存在的AI工具不能很好的收集总结,所以基于此,我开发了这个一个AI导航网站,希望通过它,收集出目前存在的热门的AI应用&…

(一)Springcloud-OpenFeign原理之集成改造原生Openfeign与简单使用

文章目录 1.和原生Openfeign的关系2.Springcloud-Openfeign的改造2.1 改造目标2.2 改造内容2.2.1 集成到Spring2.2.2 替换构造组件 2.3 初步集成使用2.4 支持的扩展点 文章将会介绍Springcloud-Openfeign对原生Openfeign的改造原因及方式,最后提供简单的使用案例及扩…

实验一 进程管理与进程同步

实验一 进程管理与进程同步 实验目的: 了解进程管理的实现方法,理解和掌握处理进程同步问题的方法。 实验内容: 实现银行家算法、进程调度过程的模拟、读者-写者问题的写者优先算法。 实验步骤: 1.银行家算法流程图 &…

Springboot +Flowable,任务认领和回退(一)

一.简介 有的时候,一个任务节点会存在多个候选人,例如:张三提交一个任务,这个任务即可以由李四处理,又可以由王五处理,那么针对这种多个任务候选人的情况,该如何处理? 二.绘制流程…

Java线程池及其实现原理

线程池概述 线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。 线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机…

Spark任务提交流程

1. yarn-client Driver在任务提交的本地机器上运行,Driver启动后会和ResourceManager通讯,申请启动ApplicationMaster; 随后ResourceManager分配Container,在合适的NodeManager上启动ApplicationMaster,此时的ApplicationMaster的…

华为网络设备+WinRadius 实现用户统一管理设备

一、直接贴配置 ###配置VTY用户界面所支持的协议、验证方式 user-interface vty 0 4 protocol inbound telnet authentication-mode aaa quit ###配置RADIUS认证 ###(1)配置RADIUS服务器模板,指定服务器的IP地址与端口号、共享密钥 radius-s…

Supervisor离线安装(python3.7.8)

Background supervisor是用Python语言开发的一套通用的进程管理程序,可以将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时可以自动拉起;可在大多数unix系统上使用,不能在windows上运行;目…

学Python常逛的10个网站

这里写目录标题 一、Python官方文档二、牛客网三、Github四、w3school五、Chatgpt六、kaggle七、realpython八、medium九、stackoverflow十、geeksforgeeks 一、Python官方文档 最全面的Python学习网站非官方文档莫属,它不仅提供了下载安装教程、基础语法教程、标准…

编写UDP版本的客户-服务器程序(echo server 和 echo client)

目录 前言概要 关于数据报流的关键方法签名 UDP协议传输案例 服务端(接收端) 服务端完整代码 客户端(发送端) 客户端完整代码 创作不易多多支持😶‍🌫️😘 前言概要 我们首先来了解一下, 什么是网络编程. 网络编程…

认识系统总线

目录 一、总线的基本概念 1.总线的定义 二、总线的分类 1.片内总线 2.系统总线 2.1数据总线 2.2地址总线 2.3控制总线 3.通信总线(通信总线) 三、总线特性及性能指标 1.总线特征 2.性能标准 2.1总线的传输周期(总线周期) 2.2总线时钟周期 2.3总线的工作频率 2.4…

vim编辑器命令模式——撤销与时间旅行

Vi介绍 Vi 编辑器是所有 Unix 及 Linux 系统下标准的编辑器,类似于 windows 系统下的 notepad (记事本)编辑器,由于在 Unix 及 Linux 系统的任何版本,Vi 编辑器是完全相同的,因此可以在其他任何介绍 vi 的地…

小红书数据,如何在垂类赛道中脱颖而出!

导语 近年来,泛娱乐内容在小红书平台盛行,面临流量见顶的情况。这时候,垂类账号的优势就显现出来,不仅可以规避激烈的竞争,还能去获取更精准的流量。 作为一个经久不衰的创作方向,美食赛道分化出教程、测…

webpack plugin原理以及自定义plugin

通过插件我们可以拓展webpack,加入自定义的构建行为,使webpack可以执行更广泛的任务。 plugin工作原理: webpack工作就像是生产流水线,要通过一系列处理流程后才能将源文件转为输出结果,在不同阶段做不同的事&#x…

核磁机器学习 | 基于机器学习的fMRI分类

导读 本文通过提取最显著的特征,将大脑图像分类为正常和异常,并对大脑各种状态的磁共振成像(MRI)进行了研究。本文描述了一种基于小波变换的方法,首先对图像进行分解,然后使用各种特征选择算法从MRI图像中提取最显著的大脑特征。…

[Netty] 面试问题 1 (十八)

文章目录 1.Netty的特点2.Netty应用场景3. Netty核心组件4.Netty的线程模型5. EventloopGroup和EventLoop6.Netty 的零拷贝7.Netty 长连接和心跳机制8.Netty 服务端和客户端的启动过程9.Netty 的 Channel 和 EventLoop10.Netty 的 ChannelPipeline11.Netty 中的 ByteBuf12.Nett…

数据分析01——Anaconda安装/Anaconda中的pip换源/jupyter配置

0、前言: 数据分析三大模块知识:numpy(数组计算)、pandas(基于numpy开发,用于数据清洗和数据分析)、matplotlib(实现数据可视化) 1、Anaconda安装: 安装Ana…

Spring常见面试题总结(2023最新版)

文章目录 1、谈谈你对Spring的理解?1.1 发展历程1.2 Spirng的组成1.3 Spring的好处 2、Autowired和Resource的区别2.1 共同点:2.2 Autowired2.3 Resource2.3.1 Resource的装配顺序 3、Spring常用注解3.1、给容器中注入组件3.1.1 包扫描组件标注注解3.1.2…