gpt4 book ai didi

Android: Canvas 与 OpenGL

转载 作者:可可西里 更新时间:2023-11-01 19:06:59 25 4
gpt4 key购买 nike

我有一个绘图应用程序,用户可以在其中用手指画线,调整颜色、粗细等。当用户绘图时,我正在从 MotionEvent 转换聚集的 X/Y 点进入SVG Paths , 以及创建 Android Path's然后通过 Canvas 将 Android 路径绘制到屏幕上,并将 SVG 路径提交到应用程序的数据库。

我正在遵循 FingerPaint 中使用的模型,因为“进行中”的线是通过重复调用 invalidate()(因此,onDraw())即时绘制的,一旦线完成并开始新的一行,之前的行在 onDraw() 中从底层 Canvas Bitmap 中绘制,正在进行中的行再次生成重复的重绘。

这在此应用程序中工作正常 - 直到您开始旋转底层 Bitmap 以补偿设备旋转,支持在绘图表面上“放大”的能力,因此必须缩放底层 Bitmap等。例如,设备旋转,绘图缩放,当用户绘图时,我们需要在 onDraw() 中缩放和旋转我们的 Bitmap,这绝对是爬行。

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

基本上,我有点卡在 Canvas 和 OpenGL 解决方案之间...我有一个 2D 绘图应用程序,它似乎非常适合 Canvas 模型状态,因为没有像游戏一样持续不断的重新绘制(例如,当用户不绘制时我不需要任何重新绘制),但是当用户正在绘制时,我需要最大的性能来做一些表面上越来越复杂的东西......

欢迎任何想法、指点和建议。

最佳答案

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

老实说,您可能需要学习很多 OpenGL 才能做到这一点,特别是与以下主题相关的知识:

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

此外,为此学习 OpenGL 可能有点矫枉过正,您必须非常擅长它才能使其高效。

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

关于Android: Canvas 与 OpenGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6308521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com