Warm tip: This article is reproduced from serverfault.com, please click

其他-Android:画布与OpenGL

(其他 - Android: Canvas vs OpenGL)

发布于 2011-06-10 15:26:09

我有一个绘图应用程序,用户可以在其中用手指画线,调整颜色,粗细等。在用户绘图时,我正在将MotionEvent集中的X / Y点从转换为SVG路径,还创建了Android路径和然后通过画布将Android路径绘制到屏幕上,并将SVG路径提交到应用程序的数据库。

我遵循的是FingerPaint使用的模型,因为通过重复调用invalidate()(因此是onDraw()来动态绘制“进行中”的线,一旦完成该行并开始新的一行,则前一行)是onDraw()从基础绘制Canvas Bitmap,进行中的行再次生成重复的重画。

在此应用程序中,此方法效果很好-直到你开始旋转基础Bitmap以补偿设备旋转,从而支持在绘图表面上“放大”功能,因此必须缩放基础Bitmap等。例如,在设备旋转和旋转的情况下,放大后的绘图,当用户绘图时,我们需要在onDraw()中缩放并旋转我们的位图,这绝对是在抓取。

我看过了SurfaceView,但是由于它仍然使用相同的Canvas机制,因此我不确定是否会看到明显的改进……所以我的想法转向了OpenGL。我读过某个地方OpenGL可以“免费”进行旋转和缩放,甚至看到谣言(第三条评论)Canvas可能在将来的版本中消失。

从本质上讲,我在CanvasOpenGL和OpenGL解决方案之间有些困惑……我有一个2D绘图应用程序,它Canvas在一种状态下似乎完全适合模型,因为没有像游戏一样进行不断的重画(例如,当用户不是在绘图,我不需要任何重画),但是当用户在绘图时,我需要最大化必要的性能以对曲面执行一些日益复杂的事情...

欢迎任何想法,指示和建议。

Questioner
Paul Mennega
Viewed
0
1,442 2020-06-16 03:50:35

OpenGL将能够轻松处理旋转和缩放。

老实说,你可能需要学习很多OpenGL来做到这一点,特别是涉及以下主题:

  • 几何学
  • 照明(或只是禁用它)
  • 拾取(选择要在其上绘制的几何体)
  • 像素图
  • 纹理贴图
  • 贴图

另外,为此目的学习OpenGL可能会过头了,你必须非常擅长于使其高效。

相反,我建议使用在openGL之上构建的游戏库的图形组件,例如: