三维仿真对模型要求

科研、教学、工程的三维视景仿真往往使用实际产品、实际物体或建筑、管道、机械装置、车辆等复杂的三维模型展示模拟的物理运动和动力学过程。因此VPython内置的基础模型难以满足三维仿真对模型复杂度的要求。研究如何将UG、SolidWorks、CATIA、3DMax等建模软件中设计的复杂模型导入VPython中是利用VPython开发三维仿真软件的重要一步,这一步不能实现,就不能使用VPython进行三维仿真。

复杂模型导入VPython的原理

建模软件中设计的复杂模型往往由数万甚至数百万的三角片面组成模型表面,先从建模软件中将这些三角片面的顶点坐标和片面向量数据导出到文本文件或二进制数据文件中,在Python中读入文件数据,根据数据利用VPython的三角面基础模型triangle重现数据中的三角片面,注意三角片面的向量都是指向模型物体外侧,才能完成光照计算使该三角片面可见,否则该片面只能从模型内部空间看到,外部看该片面成为一个“洞”。

模型数据文件导出

在三维设计软件中设计图1所示飞机模型,以UG导出模型数据到STL文件为例讲解导出步骤:

图1
在UG中执行“文件>导出>STL”,如图2,输出类型可以选择二进制或文本,为了观察导出的数据,本例选择文本,实际使用可选择二进制减小模型文件大小。三角形公差和相邻公差不易设置太小,太小使三角形数量太多,增加模型加载时间和资源占用。本例中三角形公差和相邻公差都设置为0.5,在UG中对模型的分割见图3。导出STL的其他步骤点击“确定”按钮即可。

图2

图3
将输出的STL文件命名为plane.txt,图4中红色方框中为一个三角面,normal为三角面的方向向量,三个vertex为三角形的三个顶点,每个vertex有三个数据,为顶点的三维坐标值。

图4

模型数据导入与渲染

使用numpy-stl读取建模软件导出的STL文件中的顶点数据。
安装numpy-stl库在Anaconda命令终端中输入:

pip install numpy-stl

读入STL文件数据,画模型的代码如下,生成的模型如视频1。

# -*- coding: utf-8 -*-
import pandas as pd
from vpython import *
from stl import mesh#从stl文件中读取数据构建模型
#file:stl文件名
#makeComp:是否构建compound,True输出compound,False输出0
#tail:是否有尾迹
#model_color:模型颜色
def FileToModel(file,makeComp=False,tail=False,model_color=vec(0.5,0.5,0.5)):temp_mesh = mesh.Mesh.from_file(file) #STL数据读入temp_meshtris=[]num=int(temp_mesh.normals.size/3) #三角面数量for a in range(num):aa = temp_mesh.vectors[a][0] #三角面顶点1bb = temp_mesh.vectors[a][1] #三角面顶点2cc = temp_mesh.vectors[a][2] #三角面顶点3nn = temp_mesh.normals[a] #三角面方向向量#建立三角形三个顶点,normal顶点方向向量,colord顶点颜色a = vertex(pos=vector(aa[0], aa[1], aa[2]),normal=vector(nn[0], nn[1], nn[2]),color=model_color)b = vertex(pos=vector(bb[0], bb[1], bb[2]),normal=vector(nn[0], nn[1], nn[2]),color=model_color)c = vertex(pos=vector(cc[0], cc[1], cc[2]),normal=vector(nn[0], nn[1], nn[2]),color=model_color)t=triangle(v0=a,v1=b,v2=c) #由三个顶点生成三角面tris.append(t) #三角面数组if makeComp==True:tt=compound(tris,make_trail=tail) #将三角面组成组件return ttreturn 0def main():#测试代码,生成plane.txt对应的飞机target=FileToModel('plane.txt',tail=False,model_color=vec(1,1,0))if __name__ == '__main__':
main()

视频1——plane


图5
视频1中的飞机模型原点在飞机头部,原因是在UG中建模时原点设置在飞机头部,如图5。飞机的原点一般应设置在飞机质心上或气动力作用点上,大概在主翼中部。修改飞机模型原点有两种方法:
方法一:在UG中移动模型,如图6。

方法二:在建立三角面时,所有顶点增加一个偏移量,将模型质心移动到坐标系原点上,代码如下。模型原点移动后的视频见视频2。

p=vector(0,-650,0)
a = vertex(pos=vector(aa[0], aa[1], aa[2])+p,normal=vector(nn[0], nn[1], nn[2]),color=model_color)
b = vertex(pos=vector(bb[0], bb[1], bb[2])+p,normal=vector(nn[0], nn[1], nn[2]),color=model_color)
c = vertex(pos=vector(cc[0], cc[1], cc[2])+p,normal=vector(nn[0], nn[1], nn[2]),color=model_color)

视频2——plane2移动原点

结束语

以上完成了复杂模型导入VPython,并对模型原点进行了调整。
下一节介绍在场景中画坐标系的方法,有了坐标系,模型的运动有了参照,便于清晰体现模型的运动过程。

VPython三维仿真(NO.3) 导入复杂模型相关推荐

  1. VPython三维仿真(NO.5) 移动模型和调整姿态

    模型运动 三维模型的运动涉及六个自由度,分别是模型质心沿笛卡尔直角坐标系三个轴x.y.z的线位移和绕三个轴的角位移.模型运动就是以上六个位移的复合运动,三维仿真的核心就是弄清楚如何在场景中设置模型这六 ...

  2. VPython三维仿真(NO.4) 创建坐标系

    目录 目的 画坐标系方法 画坐标系代码 坐标系效果图 纠正飞机坐标系 源代码 目的 在后续的章节中,飞机或其他模型需要参照物才能明白模型是如何运动的,本节介绍建立笛卡尔坐标系的方法. 画坐标系方法 使 ...

  3. VPython三维仿真(NO.2) 图像操作与基础模型

    场景图像基本操作 可对在浏览器中渲染的场景进行旋转.缩放.平移操作.球体不易看到旋转过程,可使用正方体练习对图像的基本操作,掌握了对场景图像的基本操作后,下一节介绍导入三维模型后可对三维模型进行观察. ...

  4. VPython三维仿真(NO.7)label显示信息

    本文介绍VPython在屏幕显示状态提示信息和跟随模型显示信息的方法. label对象 实现信息显示使用label对象,详细内容如下链接: https://www.glowscript.org/doc ...

  5. VPython三维仿真(NO.1) VPython安装与开发环境

    VPython简介 VPython是Python的实时交互三维绘图模块,可对绘制的三维图像进行移动.缩放等操作.VPython函数功能强大,具有简单易学的优点.因Python语言简洁代码少,各种数学模 ...

  6. VPython三维仿真(NO.9)贴图

    在Vpython中贴图对象为Texture,帮助文档如下: https://www.glowscript.org/docs/VPythonDocs/textures.html box贴图 r=box( ...

  7. HTML嵌入三维仿真 .ezo文件的方法

    近期做了一个信息管理系统的项目,其余CMS的东西都是比较Easy的,但是碰到了用户需要把外边团队制作的三维仿真的文件导入到HTML页面的问题.说实话EON的东西网上确实比较少,所以在问题解决后特把问题 ...

  8. 实现osgEarth三维仿真场景模型雾的效果的添加解决方法

    在osgearth项目开发的过程中,为了实现逼真的三维场景可视化效果,需要对模型进行雾化处理,从而实现雾的自然天气情况模拟.在这过程中,利用OSG的osg::Fog类实现雾的效果,实现的效果如图1所示 ...

  9. 基于osgearth开发的三维仿真与态势软件系统源代码

    基于osgearth开发的三维仿真与态势软件系统源代码. 功能如下: 1.新建方案.打开方案.保存方案: 2.导入影像.高程.矢量.模型数据: 3.灯光控制.雨.雪.雾特效: 4.通视分析.距离测量. ...

最新文章

  1. 【福利】微信小程序130个精选Demo合集
  2. 科大星云诗社动态20210225
  3. eureka服务续约机制
  4. 跳转指令微型计算机,哪种类型的汇编程序跳转指令最有用?
  5. Java设计模式笔记(7)适配器模式
  6. 表格在拟合曲线找点_【无机纳米材料科研制图——OriginLab 0208】Origin拟合SERS拉曼光谱...
  7. redhat5下安装informix
  8. 系统地介绍计算材料科学的发展现状、主要理论框架和设计实践方法,汪林望博士作序《计算材料学——设计与实践方法(第2版)》
  9. 找企业网站源码学习研究
  10. 小 Mil 来了!Milvus 智能问答机器人上线
  11. 垃圾分类-特别是有害垃圾
  12. AVR单片机LED单灯闪烁
  13. TinaFace: Strong but Simple Baseline for Face Detection论文笔记
  14. DNS是什么?怎样设置DNS?
  15. flappy+bird+android源代码,Flappy Bird(安卓版)逆向分析(一)
  16. wordpress制作微信小程序源码
  17. 2017最新上海市居住证申领流程
  18. mpv播放器键盘快捷键
  19. WIFI智能家居之智能插座
  20. git垃圾箱的使用方法

热门文章

  1. Pandas学习笔记之时间序列总结
  2. Yahoo 前端雅虎军规
  3. selenium如何控制已打开浏览器
  4. 无法完成操作。服务无法在此时接受控制信息。
  5. 营销活动的业绩,在开始之前你就应该预见到了…
  6. java —— 不高兴的津津
  7. win7能装HTML5年吗,告诉你正版win7如何安装
  8. java之HeapByteBufferDirectByteBuffer以及回收DirectByteBuffer
  9. 思必驰CMO龙梦竹:万物可沟通,万事可打理|量子位沙龙回顾
  10. uniapp-ThorUi下拉框出现出现的问题