需求
1.使用osg三维引擎进行动力学模型仿真性能测试;
2.打开动力学仿真模型文件,.k后缀的模型文件,测试加载解析过程;
3.解决第三方company的opengl制作的三维引擎,绘制面较多与弹丸路径模拟较卡顿的问题;
4.测试时,使用的模型为公开模型,基础面数量达到160多万个;
5.测试时,模拟动画使用的时100万条弹丸路径平行飞射出去;
1.新增打开双模型,第一个模型在原来的位置,第二个模型在偏移后的位置
2.优化打开关闭重新打开模型的过程
3.对于100万线动画射击,用于测试性能
4.当前模型为160万个面,双模型的时候为320多万个元素基础面
测试交互流畅性,交互无延迟!!!
#ifndefOSGWIDGET_H#defineOSGWIDGET_H#include<QWidget>#include"OsgViewerWidget.h"#include"MyManipulator.h"#include"osg/PolygonMode"classAnimationPathCameraMainpulator;namespace Ui {classOsgWidget;}classOsgWidget:publicQWidget{ Q_OBJECTpublic:// 模型结构体 structElement_Shell// *ELEMENT_SHELL {Element_Shell(){} qint64 eid;// 单元id qint64 pid;// 材料id qint64 n1;// 节点1,定义几何形状 qint64 n2;// 节点2,定义几何形状 qint64 n3;// 节点3,定义几何形状 qint64 n4;// 节点4,定义几何形状 qint64 n5;// 厚度,额外的节点在标准的LS-DYNA四边形壳单元定义中是没有意义的。 qint64 n6;// 积分点数,额外的节点在标准的LS-DYNA四边形壳单元定义中是没有意义的。 qint64 n7;// 额外的节点在标准的LS-DYNA四边形壳单元定义中是没有意义的。 qint64 n8;// 额外的节点在标准的LS-DYNA四边形壳单元定义中是没有意义的。 };structPart// *PART {Part(){} qint64 pid;// 部件的id号,唯一 qint64 secid;// 有*section关键字定义的section的id号 QList<Element_Shell> listElementShell;// 部件片元 qint64 mid;// 部件的材料号 qint64 eosid;// 部件所属材料涉及的状态方程号,由*EOS关键字定义 qint64 hgid;// 沙漏或体积粘性参数编号,由*HOURGLASS关键字定义,取0表示将采用默认的数值: qint64 grav;// 仅对实体单元有效,取0表示对所有PART进行重力初始化,取1表示仅对当前材料初始化 qint64 adpopt;// 标识该部件是否采用自适应网格划分,取0表示不采用 qint64 tmid;// 标识该部件是否采用自适应网格划分,取0表示不采用 };structNode{Node(){} qint64 nid;// 结点号,唯一 double x;// 三维x坐标(全局) double y;// 三维y坐标(全局) double z;// 三维z坐标(全局) int tc;// 平动自由度受约束状态,枚举值:0-无平动约束,1-X方向平动约束,2-Y方向平动约束 int rc;// 转动自由度收约束状态,枚举值:0-无转动约束,1-X方向转动约束,2-Y方向转动约束 };structK_Mode{K_Mode(){} QList<Part> listPart; QList<Node> listNode; QHash<int, Node> hashNid2Node;};// 添加模型 K_Mode kMode;public:explicitOsgWidget(QWidget*parent=0);~OsgWidget();public:boolgetFixXAxis()const;// 获取X轴固定状态 boolgetFixYAxis()const;// 获取Y轴固定状态 boolgetFixZAxis()const;// 获取Z轴固定状态 voidgetCenter(double&x,double&y,double&z);// 获取引擎中心点坐标 voidgetPersonPoint(double&x,double&y,double&z);// 获取初始化人眼的角度(看向引擎中心点)public:voidsetFixXAxis(bool fixXAxis);// 设置固定X轴 voidsetFixYAxis(bool fixYAxis);// 设置固定Y轴 voidsetFixZAxis(bool fixZAxis);// 设置固定Z轴