3维格式转换(二)

基于python的三维模型演化可视化

本项目的主要内容为总结了3种不同的可视化方案( trimesh + matplotlib 库、 pyvista 库、 vedo 库),并通过案例对可视化效果进行展示,最终通过模型动态演化案例给出最佳效果的可视化方案

本期结构图为

project cover 本期博客结构图

0 环境搭建

项目开发对 anacondapycharm 的版本没有限制,按照站内的其他项目安装即可,此外,本项目中不包含任何只能在特定系统上才能顺利运行的库

在进行下面操作时,默认已安装了anaconda和pycharm,本次测试使用的是windows系统,但是ubuntu系统下的对应操作代码与ubuntu下的完全相同,mac系统下的操作代码会在之后更新

如果尚未安装anaconda,可参考往期博客

ubuntu 22.04服务器版本cuda、Anaconda、pytorch环境配置以及安装llama_factory-CSDN博客

此外,如果看过3维模型第一期的朋友也可以直接跳过anaconda构建环境的步骤,直接安装新的库

下面回到正题

首先,给项目创建虚拟环境,这里使用的是python 3.9.20,建议使用相同的环境以确保不会出现一些奇怪的错误。在windows系统下通过 win + r 并输入 cmd ,ubuntu系统下可通过 ctrl + alt + t 打开终端,现输入下列代码

conda create -n obj_viewer python==3.9 -y

虚拟环境的创建除了网络错误外,基本不会报错,继续进入下一步。

P.S. 如果网络出现错误的话,首先查看是否使用了梯子,如果开启了,就直接关闭,如果没有开启,就换成国内源,基本可解决问题

加载创建出的虚拟环境

conda activate obj_viewer

下面,将安装所有需要用到的库,即本次的主角, trimeshpyassimp

pip install trimes pyassimp trimesh matplotlib mpl_toolkits pyvista vedo

这里的库直接默认安装即可,无特殊版本需求。这里安装无报错,就可以关闭 cmd 窗口(windows)或 终端(ubuntu),主要的代码执行和环境加载,我们会在 pycharm 中进行,作为专业的IDE平台, pycharm 具有诸多好用的小功能,感兴趣的小伙伴可以查阅其 官网 ,或者在站内搜索哈 😄。

接下来在合适的磁盘中,创建文件夹,此处使用的是 F盘 中的 demo 文件夹,及存储有演化模型数据的 evolution_test 文件夹接着在 pycharm 中打开该文件夹,并创建本次需要测试的文件 demo_visualize_trimesh.pydemo_visualize_pyvista.pydemo_visualize_vedo.py 如下图所示

P.S. 忽略 transfer_results 文件夹 和 trasfer_test.py 文件,这俩是在上一篇博客中使用的程序😋😋😋

project cover pycharm创建项目文件夹

这里的各种 evol_*.obj 是从开源网站上下载的,比较推荐的是著名的 free 3D

链接为 free 3D官网

接下来,要通过 设置 选项,来设置当前项目的编译器,即之前创建的环境 obj_viewer 。首先在 文件 - 设置 如下图所示

project cover pycharm加载编译器1

接下来,找到 Python 解释器 并点击 添加解释器 按钮,以及 添加本地解释器 按钮,如下图所示

project cover pycharm加载编译器2

然后,通过在 添加Python 解释器 选项卡中,索引到刚才创建 anaconda 环境的文件夹中,并找到 python.exe 。我的电脑是在 D:\anaconda\envs\interface_tester\python.exe ,最后点击确定。需要注意的是,这里的 .exe 文件,一个字母都不能不能差,要不会在之后的程序运行部分疯狂报错,或者干脆加载编译器失败。

project cover pycharm加载编译器3

此时这个界面也会显示出编译器的具体名称,之后一路确定即可。最后在设置界面就会看到已经加载好的环境,如果前几步成功,这一步加载的库应该与下图中完全相同,此时点击右下角 应用 即可

project cover pycharm加载编译器4

然后点击 Pycharm 下方的 终端 选项卡,可看到 obj_viewer 环境已经加载成功,并可供调用,且当前的运行文件夹为 ....\demo

project cover pycharm加载编译器6

接下来将代码复制到对应的文件即可:

demo_visualize_trimesh.py 对应代码:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
import trimesh"""
3D 模型文件可视化,可直接读取.obj文件,并进行可视化参数:input_file (str): 输入文件路径(支持 obj, ply, glb, stl 等格式)。output_file (str): 输出文件路径(目标文件格式根据扩展名自动确定)。
"""# 加载 .obj 文件
obj_file = 'evolution_test/evol_0.obj'  # 替换为你的 .obj 文件路径
mesh = trimesh.load(obj_file)# 获取顶点和面
vertices = mesh.vertices
faces = mesh.faces# 创建绘图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 绘制三维模型
ax.add_collection3d(Poly3DCollection(vertices[faces],facecolor=[0.8, 0.8, 0.8],edgecolor='none'))# 设置比例和视角
ax.set_box_aspect([1, 1, 1])  # 保持三维比例
ax.view_init(elev=20, azim=30)  # 设置视角# 调整坐标范围
max_range = (vertices.max(axis=0) - vertices.min(axis=0)).max() / 2
mid = vertices.

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

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

相关文章

docker导出image再导入到其它docker中

导出image docker save -o gxc_tenant.tar vue_tenant:1.0 eitc_tenant:1.0 redis:latest docker.io/mysql:8.0 minio/minio导入image docker load -i gxc_tenant.tar

Spring-IOC部分

Spring-IOC部分 1.SpringBean的配置详解(Bean标签) (1)scope 默认情况下,单纯的Spring环境Bean的作用范围有两个:Singleton和Prototype singleton:单例,默认值,Spring…

人工智能爬虫导致维基共享资源带宽需求激增 50%

2025 年 4 月 1 日,维基媒体基金会在博文中表示,自 2024 年 1 月以来,维基共享资源下载多媒体的带宽消耗激增 50%,这一变化趋势主要由用于 AI 训练数据集的网络爬虫导致。以下是具体分析1: 爬虫流量特征与数据存储模式…

2007-2019年各省地方财政交通运输支出数据

2007-2019年各省地方财政交通运输支出数据 1、时间:2007-2019年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区、年份、地方财政交通运输支出 4、范围:31省 5、指标说明:地方财政交通运输支出是指地方…

【爬虫开发】爬虫开发从0到1全知识教程第14篇:scrapy爬虫框架,介绍【附代码文档】

本教程的知识点为:爬虫概要 爬虫基础 爬虫概述 知识点: 1. 爬虫的概念 requests模块 requests模块 知识点: 1. requests模块介绍 1.1 requests模块的作用: 数据提取概要 数据提取概述 知识点 1. 响应内容的分类 知识点&#xff1a…

【CMake】《CMake构建实战:项目开发卷》笔记-Chapter8-生成器表达式

第8章 生成器表达式 生成器表达式(generator expression)是由CMake生成器进行解析的表达式,因此,这些表达式只有在CMake的生成阶段才被解析为具体的值。 CMake在生成阶段,能够根据具体选用的构建系统生成器生成特定…

Docker安装、配置Mysql5.7

1.创建必要的目录 # 创建目录 mkdir -p ~/docker/software/mysql/{conf,log,data} 2.如果没有docker-compose.yml文件的话,先创建docker-compose.yml 配置文件一般长这个样子 version: 3services:mysql:image: mysql:5.7.36container_name: mysqlports:- "…

【C++学习笔记】十三、速通笔记

完整的C编程教程 目录 开发环境配置C知识体系现代C特性设计模式数据结构CMake项目构建调试技巧进阶主题学习资源 1. 开发环境配置 1.1 安装编译器 sudo apt-get install g build-essential1.2 安装构建工具 sudo apt-get install cmake1.3 VS Code配置 安装C扩展配置调试…

网络运维学习笔记(DeepSeek优化版)027 OSPF外部路由计算

文章目录 OSPF外部路由计算1. 实验拓扑与基础配置2. 关键配置命令2.1 引入静态路由2.2 查看路由表 3. LSA生成与传播分析3.1 ASBR角色通告(1类LSA)3.2 外部路由通告(5类LSA)3.3 外部路由引入过程 4. 5类LSA关键字段解析5. 外部路由…

【Python使用】嘿马推荐系统全知识和项目开发教程第2篇:1.4 案例--基于协同过滤的电影推荐,1.5 推荐系统评估【附代码

教程总体简介:1.1 推荐系统简介 学习目标 1 推荐系统概念及产生背景 2 推荐系统的工作原理及作用 3 推荐系统和Web项目的区别 1.3 推荐算法 1 推荐模型构建流程 2 最经典的推荐算法:协同过滤推荐算法(Collaborative Filtering) 3 …

运算放大器(五)电压比较器

比较器在最常用的简单集成电路中排名第二,仅次于排名第一的运算放大器。 电压比较器是一种用来比较输入信号电压与参考电压大小,并将比较结果以高电平或低电平形式输出的一种信号处理电路,广泛应用于各种非正弦波的产生和变换电路中&#xf…

Java面试黄金宝典34

1. 主键索引底层的实现原理 定义 主键索引是数据库中用于唯一标识表中每一行记录的索引,常见的底层实现是 B 树结构。B 树是一种平衡的多路搜索树,由内部节点和叶子节点组成。内部节点只存储索引键和指向下一层节点的指针,不存储实际数据&am…

Educational Codeforces Round 177 (Rated for Div. 2)

Educational Codeforces Round 177 (Rated for Div. 2) A. Cloudberry Jam 思路&#xff1a; 1千克果子能生产2/3千克果酱&#xff0c;生产3千克果酱则需要2千克果酱&#xff0c;所以*2即可 code: void solve() { int x; cin >> x;cout << 2 * x << e…

ARM-外部中断,ADC模数转换器

根据您提供的图片&#xff0c;我们可以看到一个S3C2440微控制器的中断处理流程图。这个流程图展示了从中断请求源到CPU的整个中断处理过程。以下是流程图中各个部分与您提供的寄存器之间的关系&#xff1a; 请求源&#xff08;带sub寄存器&#xff09;&#xff1a; 这些是具体的…

23种设计模式-行为型模式-迭代器

文章目录 简介问题解决代码设计关键点&#xff1a; 总结 简介 迭代器是一种行为设计模式&#xff0c;让你能在不暴露集合底层表现形式(列表、栈和树等)的情况下遍历集合中所有的元素。 问题 集合是编程中最常使用的数据类型之一。 大部分集合使用简单列表存储元素。但有些集…

Python 布尔类型

Python 布尔类型(Boolean) 布尔类型是Python中的基本数据类型之一&#xff0c;用于表示逻辑值。它只有两个值&#xff1a; True - 表示真False - 表示假 1. 布尔值的基本使用 # 定义布尔变量 is_active True is_admin Falseprint(is_active) # 输出: True print(is_admi…

人工智能在前端开发中的应用探索

一、人工智能在前端开发中的应用场景 人工智能&#xff08;AI&#xff09;技术的快速发展为前端开发带来了新的机遇和挑战。AI在前端开发中的应用主要集中在以下几个方面&#xff1a;智能代码生成、自动化测试、个性化推荐、智能交互设计以及性能优化。这些应用场景不仅提高了…

三维扫描助力文化遗产数字化保护

当下&#xff0c;三维扫描技术以其独特的优势&#xff0c;正逐渐成为文化遗产数字化保护的重要工具&#xff0c;让珍贵的文物得以“永生”。 三维扫描在文物数字化方面的应用&#xff1a; 高精度文物存档&#xff1a;三维扫描技术能够实现对文物的快速、无损扫描&#xff0c;…

如何将生活场景转换为数据模型模型仿真?

从家到公司有31公里&#xff0c;其中有一个2车道右转立交桥汇入另外一条路&#xff0c;每次都是那个堵车&#xff0c;导致路上的行程在45分钟到70分钟左右&#xff1f;前面或后面路段都是3-4车道&#xff0c;足够通行。如何解决这个难题&#xff0c;是否可搭建数学模型实现可视…

Java学习总结-io流-练习案例

将文档的内容排序&#xff1a; public static void main(String[] args) throws IOException {File dir new File("J:\\360downloads\\wpcache\\srvsetwp\\xxx\\test.txt");BufferedReader br new BufferedReader(new FileReader(dir));//把按行读取到的内容&#…