【问题标题】:Qt best choice for animation on embedded?Qt 嵌入式动画的最佳选择?
【发布时间】:2009-04-21 14:59:11
【问题描述】:

我正在研究一种具有 1 ghz via 处理器和 via s3 图形芯片的新嵌入式产品的技术。到目前为止,目标平台是 Linux,但希望可以选择将其移至基于 Windows 的平台。

该应用程序将由按钮、图形和数字/文本显示等小部件组成。更重要的是,该应用程序将包含动画对象,例如不断旋转的风扇。

Qt 似乎是一个不错的选择,因为它是跨平台的,并且为一堆小部件和一个动画框架提供了一个很好的 API。

但是,这个动画框架对 CPU 的使用量很大。渲染 UI 的目标 CPU 使用率为 40%。使用图像旋转 25 个对象会占用大约 90% 的 CPU。

想法是使用 opengl 为对象设置动画并减轻 CPU 的繁重负担。

我的问题是,如果 Qt 是这样的最佳选择?我应该更深入地研究 Java 2D 之类的东西吗?

【问题讨论】:

  • 您知道 Qt 允许您在它的窗口中托管 OpenGL 动画吗?也许你可以在 OpenGL 中做 CPU 敏感的东西,剩下的交给 Qt。

标签: java c++ qt


【解决方案1】:

OpenGL 可以提高性能:

Qt for Embedded Linux and OpenGL

或者您可能需要更好的图形驱动程序(我不知道 Qt Embedded 是否支持您的图形芯片):

Adding an Accelerated Graphics Driver to Qt for Embedded Linux

【讨论】:

    【解决方案2】:

    据我回忆,Qt 的动画框架可用于连续动画,但可能不是最好的选择。我认为它更多地是为瞬态动画设计的,比如滑动一个小部件,或者增长/缩小东西。我会考虑使用 OpenGL 或可能的 QGraphicsView,它允许您进行更直接的绘图。

    此外,如果你环顾四周,你应该能够找到告诉 Qt 使用 OpenGL 或 OpenGL ES 作为渲染系统后端的指令,这应该会减少对处理器的一些影响(假设你没有'还没有这样做)。

    【讨论】:

      【解决方案3】:

      您需要分析您的应用程序才能真正找出问题所在。例如,固定形状但连续旋转的图形项可以从项坐标缓存中受益很多(请参阅QGraphicsItem::setCacheMode)。同样,固定图像应该被缓存并尽可能长时间地保存为像素图。颜色深度也可能发挥重要作用。应尽可能简化复杂的基于路径的图形项。

      简而言之,图形性能不佳的原因有很多。如果不详细阐述它们并一一攻击它们,迁移到 OpenGL 并不能真正解决问题。它可能会加快每秒帧数(由于将一些责任转移到图形硬件的明显优势),但这是一个短期优势,如果没有发现真正的问题,从长远来看会迅速减弱。

      【讨论】:

      • 您对分析有什么建议?快速搜索建议使用 Valgrind,但这仅适用于 linux。是否有可以在 linux 和 windows 上运行的选项?
      【解决方案4】:

      Qt 的主要卖点是它是一个跨平台的 GUI 工具包,这是一个不错的功能,但 Java 已经具备了。你可能更喜欢 Qt 的版本,很多人都喜欢,但不要仅仅因为它是跨平台的而使用它。 This article 表示 Qt 动画框架还没有集成到 Qt 中。

      如果您可以在 GL 中编程,那么 JOGL 是一个明显的起点,但如果您不知道 GL 编程并不容易。您也可以考虑 Java3D。可能你想要的可以在 JavaFX 中完成。

      【讨论】:

        猜你喜欢
        • 2012-07-29
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-01
        • 2011-09-05
        • 2012-03-24
        • 1970-01-01
        相关资源
        最近更新 更多