IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 基于QT5与opencascdae7.4的简易模型浏览器 -> 正文阅读

[游戏开发]基于QT5与opencascdae7.4的简易模型浏览器

写这这个博文的目的是记录下使用OCC自带的显示AIS时需要注意的一些事项。本人花了点时间学习了下OCC的AIS,实现了一个简单的模型浏览器功能。主要功能有:

一、step模型装配体显示

? ? 读取装配体的功能在我前面博客中提到过,具体可以参考前面的文章,参考效果如下:

?

二、视角动画切换

?

三、显示样式切换

四、拾取、高亮、隐藏

?相关代码如下:

1.显示样式:Context->SetDisplayMode(AIS_Shaded, Standard_False);(实体模式)

Context->DefaultDrawer()->SetFaceBoundaryDraw(true);
?? ?Context->DefaultDrawer()->SetFaceBoundaryAspect(
?? ??? ?new Prs3d_LineAspect(Quantity_NOC_YELLOW, Aspect_TOL_SOLID, 10.));
?? ?Context->DefaultDrawer()->SetIsoOnTriangulation(true);? ?(显示线框)

2.拾取面、线、点

Context->Activate(AIS_Shape::SelectionMode(TopAbs_ShapeEnum::TopAbs_FACE));(拾取面,其他类似)

3.切换动画

增加一个基于qt动画类QAbstractAnimation的类,将OCC显示切入即可。

class V3dViewCameraAnimation : public QAbstractAnimation {
public:
? ? V3dViewCameraAnimation(const Handle_V3d_View& view, QObject* parent = nullptr);

? ? int duration() const override;
? ? void setDuration(int msecs);

? ? void setCameraStart(const Handle_Graphic3d_Camera& camera);
? ? void setCameraEnd(const Handle_Graphic3d_Camera& camera);

? ? const QEasingCurve& easingCurve() const;
? ? void setEasingCurve(const QEasingCurve& easingCurve);

? ? void configure(const std::function<void(Handle_V3d_View)>& fnViewChange);

protected:
? ? void updateCurrentTime(int currentTime) override;

private:
? ? Handle_V3d_View m_view;
? ? Handle_Graphic3d_Camera m_cameraStart;
? ? Handle_Graphic3d_Camera m_cameraEnd;
? ? QEasingCurve m_easingCurve; // Linear by default
? ? int m_duration_ms = 1000;
};

核心代码:

void V3dViewCameraAnimation::configure(const std::function<void(Handle_V3d_View)>& fnViewChange)
{
? ? if (this->state() == QAbstractAnimation::Running)
? ? ? ? this->stop();

? ? const bool wasImmediateUpdateOn = m_view->SetImmediateUpdate(false);
? ? m_cameraStart->Copy(m_view->Camera());
? ? fnViewChange(m_view);
? ? m_cameraEnd->Copy(m_view->Camera());
? ? m_view->Camera()->Copy(m_cameraStart); // Restore
? ? m_view->SetImmediateUpdate(wasImmediateUpdateOn);
}

void V3dViewCameraAnimation::updateCurrentTime(int currentTime)
{
? ? const double t = m_easingCurve.valueForProgress(currentTime / double(m_duration_ms));
? ? const bool prevImmediateUpdate = m_view->SetImmediateUpdate(false);
? ? const Graphic3d_CameraLerp cameraLerp(m_cameraStart, m_cameraEnd);
? ? Handle_Graphic3d_Camera camera = m_view->Camera();
? ? cameraLerp.Interpolate(t, camera);
? ? m_view->SetCamera(camera);
? ? m_view->ZFitAll();
? ? m_view->SetImmediateUpdate(prevImmediateUpdate);
? ? m_view->Update();
}

以上是实现这些功能的主要核心,在做了几组测试下发现,OCC对STEP的渲染优化还是很不错了,也值得学习下AIS。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:49:37  更:2022-09-13 11:50:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/17 4:03:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码