使用simple_3dviz进行三维模型投影

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

更多算法总结请关注我的博客: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。        

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

0基础学习PyFlink——用户自定义函数之UDTAF

大纲 UDTAFTableAggregateFunction的实现累加器定义创建累加 返回类型计算 完整代码 在前面几篇文章中,我们分别介绍了UDF、UDTF和UDAF这三种用户自定义函数。本节我们将介绍最后一种函数:UDTAF——用户自定义表值聚合函数。 UDTAF UDTAF函数即具备了…

ATECLOUD如何进行电源模块各项性能指标的测试?

ATECLOUD平台进行电源模块各项性能指标的测试是通过以下步骤实现的: 连接测试设备:将测试设备与云计算服务器连接,实现数据采集和远程控制。测试设备包括示波器、电子负载、电源、万用表等,这些设备通过纳米BOX连接到云测试平台上…

【Java 进阶篇】深入理解 Java Response:从基础到高级

HTTP响应(Response)是Web开发中的一个关键概念,它是服务器向客户端(通常是浏览器)返回数据的方式。理解如何在Java中处理和构建HTTP响应是开发Web应用程序的重要一部分。本文将从基础知识到高级技巧,详细介…

【Linux】虚拟机部署与发布J2EE项目(Linux版本)

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《微信小程序开发实战》。🎯&#x1f3a…

Linux 命令|服务器相关

1. 在公共 linux 上创建 python 虚拟环境 【精选】在公共Linux服务器上创建自己的python虚拟环境_服务器创建自己的环境-CSDN博客 2. 查看现存的状态,看有没有程序在跑 nvidia-smi命令详解-CSDN博客 3. 上传本地文件到服务器 在本地 Mac 计算机的终端中&#x…

谷歌财报解读:基本盘守成有余,云业务进取不足?

科技巨头的AI之战持续上演,而财报季是一窥AI成色的重要窗口。 谷歌和微软这对在多个领域均正面对决的科技巨头,又在同一日发布了财报,而这次相比上季度,战局似乎迎来了反转。 上季度,谷歌不仅成功抵御了Bing联手ChatG…

HTML基本概念:

HTML简介: 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。 1)、HTML 是用来描述网页的一种语言。 2)、HTML 不是一种编程语言&am…

STM32:串口轮询模式、中断模式、DMA模式和接收不定长数据

一.串口轮询模式底层机制: 在STM32每个串口的内部都有两个寄存器:发送数据寄存器(TDR)/发送移位寄存器,当我们调用HAL_UART_Transmit 把数据发送出去时,CPU会将数据依次将数据发送到数据寄存器中,移位寄存器中的数据会根据我们设置…

应用于智慧矿山的皮带跑偏视频分析AI算法

一、引言 随着科技的发展,人工智能技术已经在各个领域得到广泛应用。而在智慧矿山领域,皮带跑偏视频分析是其中一个重要的应用方向。本文将详细介绍皮带跑偏视频分析AI算法的原理,以期为智慧矿山的发展提供有益的参考。 二、算法原理 1. 视…

Mac上具好用的屏幕录像工具(Omi录屏专家)Screen Recorder By Omi Mac 下载安装详细教程

Omi 录屏专家 是 Mac 上的一款出色的录音工具,它让您能够在Mac电脑上轻松录制和保存高质量音频。这款应用拥有简单直观的操作界面,无论我们水平如何,都可以轻松捕捉录制卓越的音质和录像视频。 该版本的 Omi 安装后可以直接支持最高 4K 60帧…

Django 尝试SSE报错 AssertionError: Hop-by-hop headers not allowed 的分析

情况描述 近期计划测试一下django对日志打印的支持,一般都是用websocket的方式,想测试一下SSE (Server-sent events)的服务端推送,发现过程中存在报错: Traceback (most recent call last):File "D:\Software\Anaconda3\li…

正点原子嵌入式linux驱动开发——Linux 音频驱动

音频是最常用到的功能,音频也是linux和安卓的重点应用场合。STM32MP1带有SAI接口,正点原子的STM32MP1开发板通过此接口外接了一个CS42L51音频DAC芯片,本章就来学习一下如何使能CS42L51驱动,并且CS42L51通过芯片来完成音乐播放与录…

3.5 队列的表示和操作的实现

思维导图: 3.5.1 队列类型 3.5.1 队列的类型定义 1. 简介 队列是一种特殊的线性表,它的特性是只能在表的一端进行插入操作,而在另一端进行删除操作。通常将允许插入操作的一端称为队尾,允许删除操作的一端称为队头。 2. 抽象…

秒级启动的集成测试框架

本文介绍了一种秒级启动的集成测试框架,使用该框架可以方便的修改和完善测试用例,使得测试用例成为测试过程的产物。 背景 传统的单元测试,测试的范围往往非常有限,常常覆盖的是一些工具类、静态方法或者较为底层纯粹的类实现&…

Shadingsphere proxy 启动报错 Windows

Exception in thread "main" java.lang.NoClassDefFoundError 本来打算在本地电脑测试一下proxy的功能,使用的二进制安装包,没想到怎么都启动不起来,一直报找不到某个类的错误。我还以为是自身的配置有问题,等我copy了…

【MySQL索引与优化篇】索引优化与查询优化

索引优化与查询优化 文章目录 索引优化与查询优化1. 概述2. 索引失效案例3. 关联查询优化3.1 Join语句原理3.2 Simple Nested-Loop Join(简单嵌套循环连接)3.3 Index Nested-Loop Join(索引嵌套循环连接)3.4 Block Nested-Loop Jo…

Pytorch L1,L2正则化

L1正则化和L2正则化是常用的正则化技术,用于在机器学习模型中控制过拟合。它们的主要区别在于正则化项的形式和对模型参数的影响。 L1正则化(Lasso正则化): 正则化项形式:L1正则化使用模型参数的绝对值之和作为正则化…

电源控制系统架构(PCSA)之电源管理软件

下图显示了电源管理软件栈的简化表示。该图说明了OS电源管理框架、具有直接从SCP请求操作功能的组件以及它们与SCP固件之间的关系。 一个重要的方面是,所有硬件电源管理操作都是由SCP代表这些请求者执行的。 这种OS电源管理(OSPM)的简化表示可以分为两部分&#xff…

什么是神经网络,它的原理是啥?(2)

参考:https://www.youtube.com/watch?vmlk0rddP3L4&listPLuhqtP7jdD8CftMk831qdE8BlIteSaNzD 视频3:什么是激活函数?为什么我们需要激活函数?它的类型有哪些? 为什么需要激活函数?如果没有激活函数&…

TDengine 受邀参加 CNCC 2023,大会现场展位前“人山人海”!

10 月 26 日-28 日,2023 年度中国计算机大会(CNCC 2023)在沈阳新世界博览馆成功举办,本届大会以“发展数字基础设施,支撑数字中国建设”作为会议主题,参会规模头一次达到上万人。本届 CNCC 组织了 19 个特邀…