c++ - Autocad 怎么能这么快的平移和缩放?

标签 c++ directx rendering autocad direct2d

我正在开发一个图像查看器,其中图形以抗锯齿模式呈现。可以先使用生成 DXF 文件的 Autocad 编辑图像。

应用程序是使用 Visual C++ 和 Direct2D 编写的。

虽然我能够非常快速地加载图像,但与 Autocad 对同一图像(相同数量的形状)的性能相比,缩放尤其是平移对我来说仍然是个问题。

下面是一段渲染图形的代码:

auto shapes = quadTree.get_visible_shapes();
shapes.sort_by_Zorder();

for each shape in shapes:
   shape.draw();

分析后我可以说超过 90% 的计算时间都花在了旨在绘制形状的循环中。

由于四叉树的实现,只绘制可见的形状已经有了巨大的性能改进;我还在平移时以别名模式渲染图形,但与 Autocad 仍然存在很大差异。

我想知道 Autocad 是否绘制了图像的位图表示,即使我还没有尝试过这种方法,所以我无法判断是否可以有效提高速度。

考虑到这些假设,是否有任何方法可以改善平移和缩放的 Action ?

最佳答案

在 AutoCAD 中,有一种称为自适应降级的机制,它会在 FPS 低于预定义值时中止渲染:

Adaptive degradation

并且还有很多优化。您无法与这样的大型程序竞争。

关于c++ - Autocad 怎么能这么快的平移和缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31804451/

相关文章:

opengl - 具有两个不同投影矩阵的深度缓冲区

Android 4.2 - 文本渲染错误 - 文本闪烁并被剪切

c++ - 防止 clang-format 将多行 if 语句折叠成单行

c++ - 如何调试 WebKit2GTK+ 扩展

c++ - 来自注入(inject)的 .dll 的管道卡住直到进程终止

c++ - codeblocks编译成功,gcc编译失败,为什么?

c# - 使用 C# 抓取 directx 程序的屏幕

math - 使用 VB6 的 3D 软件渲染器

windows - 如何在 Windows 中直接分配显卡内存?

c# - SharpDX/DirectDX : Transparency, 法线和渲染顺序