【问题标题】:Are Paths the most efficient way to draw changing shapes?路径是绘制变化形状的最有效方法吗?
【发布时间】:2012-09-17 09:02:54
【问题描述】:

我正在构建的应用程序必须以流畅的帧速率在屏幕上绘制大约 400 个四边形形状。形状有 255 种排列,并在 0-360 度的任何地方旋转绘制。考虑到它需要的内存量(虽然我可能是错的),我认为预渲染它们不会有效。它们还具有 24 位颜色范围。现在我正在用路径绘制它们,所有的旋转和平移都由生成值的函数处理。虽然这个实现是有效的(一切都是在像 25 一样的低帧速率下),我只是觉得有一种更有效的方法来做到这一点。老实说,openGL 和 java 看起来很混乱,但如果它是唯一的选择,那么我会努力学习它。

TL;DR 这段代码对于不断变化的形状是最有效的吗?

        void quad(Canvas canvas,Paint paint, float x1,float y1, float x2,float y2, float x3,float y3,float x4,float y4,  float xoff, float yoff, int color){
        float[] hsvc = { map(color,0,100,0,360),.8f,1};
        paint.setColor(Color.HSVToColor(hsvc));
        Path path = new Path();
        path.moveTo(x1, y1);
        path.lineTo(x2, y2);
        path.lineTo(x3, y3);
        path.lineTo(x4, y4);
        path.close();
        path.offset(xoff, yoff);
        canvas.drawPath(path, paint);
    }

谢谢!

【问题讨论】:

    标签: android android-canvas


    【解决方案1】:

    你的排列方式是什么?如何旋转路径?

    由于Path 在Android 中似乎是可变的,您可以尝试重用一个实例,看看它是否能给您带来更好的结果(例如使用Path.reset())。

    【讨论】:

    • 现在,我正在绘制长度和颜色可变的三角形。稍后我将绘制更大的多边形。它们被代码“旋转”了,也就是说,我给它们发送了考虑旋转的坐标。我会看看 reset() 与创建新路径相比有多少性能提升!
    • 另外,您可以尝试使用仿射变换(并继续重复使用相同的三角形而不需要重置它),而不是通过代码旋转三角形,但速度增益可能会更明显复杂的形状。
    【解决方案2】:

    一点后续:

    使用 Android 的 Canvas 系统,路径是我能找到的最有效的方法。我最终使用了 opengl,这是一个更好的选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多