• 【3D入门-指标篇上】3D 网格重建评估指标详解与通俗比喻
  • 【3D入门-指标篇下】 3D重建评估指标对比-附实现代码
  • 【3D 入门-3】常见 3D 格式对比,.glb / .obj / .stl / .ply

Mesh 数据结构解析

1. Vertices(顶点)

original_vertices = mesh_full.vertices
定义:
  • vertices 是3D空间中的点坐标
  • 每个顶点用 (x, y, z) 坐标表示
  • 形状:[N, 3],其中 N 是顶点数量
示例:
vertices = [[0.0, 0.0, 0.0],    # 顶点0:原点[1.0, 0.0, 0.0],    # 顶点1:x轴上的点[0.0, 1.0, 0.0],    # 顶点2:y轴上的点[0.0, 0.0, 1.0],    # 顶点3:z轴上的点
]

2. Faces(面片)

original_faces = mesh_full.faces
定义:
  • faces 是由顶点索引组成的三角形面片
  • 每个面片由3个顶点索引定义
  • 形状:[M, 3],其中 M 是面片数量
示例:
faces = [[0, 1, 2],    # 面片0:由顶点0、1、2组成[0, 2, 3],    # 面片1:由顶点0、2、3组成[0, 3, 1],    # 面片2:由顶点0、3、1组成[1, 3, 2],    # 面片3:由顶点1、3、2组成
]

3. 顶点和面片的关系

索引对应:
# 面片 [0, 1, 2] 表示:
# - 第0个顶点:(0.0, 0.0, 0.0)
# - 第1个顶点:(1.0, 0.0, 0.0)  
# - 第2个顶点:(0.0, 1.0, 0.0)# 这三个顶点连接形成一个三角形面片
可视化理解:
顶点索引: 0 → 1 → 2 → 0
坐标:    (0,0,0) → (1,0,0) → (0,1,0) → (0,0,0)形成一个三角形面片

4. 为什么这样设计?

内存效率:
# 不重复存储顶点坐标
vertices = [[x1,y1,z1], [x2,y2,z2], ...]  # 存储一次# 面片只存储索引
faces = [[0,1,2], [0,2,3], ...]  # 引用顶点索引
拓扑结构:
# 面片定义了网格的拓扑关系
# 哪些顶点相连
# 哪些面片相邻
# 网格的连通性

5. 在代码中的具体应用

网格分割:
origin_num = mesh_full.faces.shape[0]  # 获取面片总数# 分割面片
mesh = trimesh.Trimesh(vertices=original_vertices,           # 所有顶点faces=original_faces[:origin_num]    # 前origin_num个面片
)mesh_fill = trimesh.Trimesh(vertices=original_vertices,          # 相同的顶点faces=original_faces[origin_num:]    # 剩余的面片
)
为什么顶点不分割?
# 顶点是共享的,不需要分割
# 面片定义了不同的几何体
# 一个顶点可能被多个面片使用

6. 实际例子:立方体

# 立方体的8个顶点
vertices = [[0,0,0], [1,0,0], [1,1,0], [0,1,0],  # 底面4个顶点[0,0,1], [1,0,1], [1,1,1], [0,1,1]   # 顶面4个顶点
]# 立方体的12个三角形面片(每个面2个三角形)
faces = [# 底面[0,1,2], [0,2,3],# 顶面  [4,6,5], [4,7,6],# 侧面[0,4,1], [1,4,5],[1,5,2], [2,5,6],[2,6,3], [3,6,7],[3,7,0], [0,7,4]
]

7. 在3D处理中的重要性

几何计算:
# 法线计算
face_normal = compute_face_normal(vertices[faces[0]])# 面积计算  
face_area = compute_triangle_area(vertices[faces[0]])# 体积计算
volume = compute_mesh_volume(vertices, faces)
渲染和可视化:
# GPU渲染
# 顶点着色器处理顶点
# 片段着色器处理面片

总结

您的理解完全正确:

  1. Vertices(顶点):3D空间中的点坐标 [x, y, z]
  2. Faces(面片):由顶点索引组成的三角形 [v1, v2, v3]
  3. 关系:面片通过索引引用顶点,形成完整的3D网格
  4. 优势:避免重复存储,支持复杂的拓扑结构

这种设计是3D图形学中的标准做法,既高效又灵活!

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

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

相关文章

无需服务器,免费、快捷的一键部署前端 vue React代码--PinMe

作为前端的开发,有时候想部署一个项目真的是很“受气”,要不就是找运维,或者后端,看别人的时间,或者走流程。 现在,有这么一个神器PinMe, 以前部署项目:自己买服务器?域名、 SSL、N…

【LeetCode_26】删除有序数组中的重复项

刷爆LeetCode系列LeetCode26题:github地址前言题目描述题目与思路分析代码实现算法代码优化LeetCode26题: github地址 有梦想的电信狗 前言 本文介绍用C实现leetCode第26题题目链接:https://leetcode-cn.com/problems/remove-duplicates-…

CMake构建学习笔记23-SQLite库的构建

1. 构建思路 在前文中构建了大量的库包程序(参看CMake构建学习笔记-目录)之后,可以总结一下在Windows下使用脚本构建程序的办法: 使用CMake构建。这是目前最通用最流行的构建方式,大部分C/C程序都在逐渐向这个方向转…

Watt Toolkit下载安装并加速GitHub

一、下载 官方地址:(Steam++官网) - Watt Toolkit Gitee下载地址:https://gitee.com/rmbgame/SteamTools/releases/tag/3.0.0-rc.16

DevOps运维与开发一体化及Kubernetes运维核心详解

前言: 在云原生时代,技术的融合与流程的重构已成为驱动业务创新的核心引擎。Kubernetes作为容器编排的事实标准,其稳定的运维能力是业务应用的基石;而DevOps所倡导的开发与运维一体化文化,则是实现快速交付和价值流动的…

HQX SELinux 权限问题分析与解决

Google自Android 5.0起强制实施的SELinux安全子系统,通过最小权限原则显著提升了系统安全性,但这也导致开发过程中频繁出现权限拒绝问题。值得注意的是,即便设备已获取root权限,SELinux的强制访问控制机制仍会限制部分敏感操作。 …

SpringBoot集成Kafka实战应用

目录 使用Kafka-Client实现消息收发 引入依赖 发送端: 消费端: SpringBoot集成 引入maven依赖 消费端 在上一篇我们深度解析了Kafka的运行操作原理以及集群消息消费机制等,请点击下方链接获取 Kafka消息队列深度解析与实战指南 本篇我…

单元测试总结2

1、重载和重写的区别01、定义不同:重载是在同一个类中定义多个方法名相同但参数列表不同的方法;重写是子类对父类中同名同参数列表的方法进行重新实现02、范围不同:重载发生在同一个类中,重写发生在子类和父类中03、参数要求不同&…

Wi-Fi技术——MAC特性

有线和无线网络在数据链路层的特性存在差异,具体为: CSMA/CD 用于有线网络,通过检测和处理冲突来维持网络的稳定性。CSMA/CA 用于无线网络,强调冲突的预防,以应对无线信道共享的挑战 1 有线网 CSMA/CD 有线网 CSMA/…

OpenHarmony 分布式感知中枢深度拆解:MSDP 框架从 0 到 1 的实战指南

MSDP设备状态感知框架技术开发文档 1. 系统概述 1.1 框架定位 MSDP (Multi-Sensor Data Processing) 设备状态感知框架是OpenHarmony系统中负责设备状态识别和分发的核心服务,基于多传感器融合技术,为系统应用提供设备状态感知能力。 1.2 核心功能 静止状态识别:基于加速…

图像 OSD层数据 显示--OSD LOGO单色黑色显示,按区域大小申请MMZ内存的优缺点分析

在监控摄像机、嵌入式显示设备等场景中,OSD(On-Screen Display,屏幕显示)LOGO 常需单色黑色显示,且按区域大小申请 MMZ(Multi-Media Zone,多媒体专用内存)内存,该方案的优缺点需结合硬件资源、显示效率、功能适配性等维度综合分析,具体如下: 一、核心优势:针对性优…

徐真妍最新杂志封面大片曝光,探索镜头下的多面魅力

近日,青年演员徐真妍拍摄的一组大片正式曝光。这组以 “森林系” 为主题的大片,登上时尚杂志《慵懒LAZY DAYS》8-9月刊封面。融合了优雅与现代先锋感,展现了徐真妍甜美温婉的表现力。镜头前的她,在多种风格间自如切换,…

广度优先搜索(BFS, Breadth-First Search)

好的,我给你讲 广度优先搜索(BFS, Breadth-First Search),并配一个直观例子。1️⃣ 什么是广度优先广度优先搜索的特点:按层访问:先访问根节点,然后访问它的直接子节点,再访问子节点…

GD32入门到实战22--红外NEC通信协议

ir_drv.c红外传输协议地位在前&#xff0c;所以我们可以这样保存数据到数组假使接收到1就>>1再|0x80&#xff0c;如果接收到0就>>1新建红外驱动层代码ir_drv.c#include <stdio.h> #include "gd32f30x.h" #include <stdbool.h> static voi…

zkML-JOLT——更快的ZK隐私机器学习:Sumcheck +Lookup

1. 引言 ICME团队开源的zkML项目&#xff1a; https://github.com/ICME-Lab/jolt-atlas&#xff08;Rust&#xff09; zkML-JOLT&#xff08;JOLT ‘Atlas’&#xff09;构建在a16z Crypto团队的JOLT研究和实现基础上&#xff0c;其性能比其他zkML项目快了3到7倍。 a16z Cr…

【大模型记忆-Mem0详解-2】系统架构

概述 Mem0 实现了双架构系统&#xff0c;通过两种主要部署模型为 AI 应用提供智能内存能力&#xff1a; 托管平台 &#xff1a;通过 MemoryClient 和 AsyncMemoryClient 类访问的托管服务开源 &#xff1a;以 Memory 类为中心的自托管组件&#xff0c;具有可插拔提供程序 此架构…

[Java]PTA:jmu-Java-01入门-取数字浮点数

本题目要求读入若干以回车结束的字符串表示的整数或者浮点数&#xff0c;然后将每个数中的所有数字全部加总求和。输入格式:每行一个整数或者浮点数。保证在浮点数范围内。输出格式:整数或者浮点数中的数字之和。题目保证和在整型范围内。输入样例:-123.01 234输出样例:7 9代码…

FFmpeg音视频处理解决方案

核心组件&#xff1a; ffmpeg&#xff1a;主要的命令行工具&#xff0c;用于转码、转换格式等 ffprobe&#xff1a;用于分析多媒体文件信息的工具 ffplay&#xff1a;简单的媒体播放器 主要功能&#xff1a; ✅ 格式转换&#xff08;转码&#xff09; ✅ 视频裁剪、合并 ✅ 调整…

机器学习回顾——决策树详解

决策树基础概念与应用详解1. 决策树基础概念1.1 什么是决策树决策树是一种树形结构的预测模型&#xff0c;其核心思想是通过一系列规则对数据进行递归划分。它模拟人类决策过程&#xff0c;广泛应用于分类和回归任务。具体结构包括&#xff1a;内部节点&#xff1a;表示对某个特…

Linux开发必备:yum/vim/gcc/make全攻略

目录 1.学习yum、apt⼯具&#xff0c;进⾏软件安装 1-1 什么是软件包 1-2 yum/apt具体操作 2. 编辑器Vim 2-1 Linux编辑器-vim的引入 2-2 vim的基本概念 2-3 vim的基本操作 2-4 vim正常模式命令集 2-5 vim末⾏模式命令集 3. 编译器gcc/g 3-1 背景知识 3-2 gcc编译选…