2011-06-10 3 views
13

나는 손가락으로 선을 그릴 수 있고 색상, 두께 등을 조정할 수있는 그리기 응용 프로그램이 있습니다. 사용자가 그림을 그리면서 매끄러운 X/Y 포인트를 MotionEvent에서 SVG PathsAndroid Path's을 생성 한 다음 Canvas를 통해 안드로이드 경로를 화면에 드로잉하고 SVG 경로를 앱의 데이터베이스에 위탁합니다.Android : Canvas vs OpenGL

나는 '진행'라인 invalidate() (따라서, onDraw())에 반복 호출에 의해 즉석에서 그려 점에서 FingerPaint에 사용되는 모델을, 다음하고, 그리고 라인이 완료되고 나면 새로운 라인이 시작됩니다 이전 줄은 그 밑에있는 CanvasBitmap에서 onDraw()으로 그려지고 진행중인 줄은 다시 다시 그려집니다.

이것은 기기 회전을 보정하고 드로잉 표면을 '확대'할 수있는 기능을 지원하기 위해 기초적인 Bitmap을 회전하기 시작할 때까지 기본이되는 Bitmap 등의 크기를 조정해야합니다. 따라서 예를 들어 장치를 회전하고 그림의 크기를 조절하면 사용자가 그림을 그릴 때 비트 맵을 onDraw()에서 크기를 조정하고 회전해야하며 이는 절대적으로 크롤링입니다.

나는 SurfaceView을 보았지만 여전히 동일한 Canvas 메커니즘을 사용하기 때문에 눈에 띄는 개선이있을 것이라고 확신하지는 못합니다 ... 그래서 내 생각은 OpenGL로 바뀝니다. 나는 OpenGL이 본질적으로 '자유로운'회전과 스케일링을 할 수있는 곳을 읽었으며 심지어 Canvas이 향후 버전에서는 사라질 수도있는 rumors (3 번째 의견)을 보았습니다.

본질적으로 나는 Canvas과 OpenGL 솔루션 사이에 약간 붙어 있습니다 ... 저는 한 상태에서 Canvas 모델에 완벽하게 맞는 2D 드로잉 응용 프로그램을 가지고 있습니다. 상수가 다시 그리는 것과 같이 계속 진행됩니다. 예를 들어 사용자가 드로잉을하지 않을 때 다시 그리기가 필요하지 않은 경우), 사용자가 그림을 그릴 때 점점 더 복잡 해지는 작업을 수행하는 데 필요한 최대 성능이 필요합니다.

생각, 조언 및 제안을 환영합니다.

답변

4

OpenGL은 회전과 크기 조정을 쉽게 처리 할 수 ​​있습니다.

  • 기하학
  • 조명 (또는 그냥 해제)
  • 따기 (선택 : 솔직히

    , 당신은 아마도 특정의 주제와 관련된,이 작업을 수행하기 위해 OpenGL을 많이 배울 필요가있을 것이다 형상은

  • 픽셀지도
  • 텍스처 매핑
  • 밉 매핑
  • ) 그 위에 그릴 수

또한 OpenGL을 배우는 것은 과도 할 수 있으므로 효율적으로 만들려면 꽤 잘해야합니다.

1

SurfaceView는 캔버스를 사용합니다. 가장 큰 차이점은 SurfaceView는 다른 드로잉을 사용하여 실제 드로잉을 수행하므로 일반적으로 성능이 향상된다는 것입니다. 그래도 큰 도움이되지 않는 것 같습니다.

OpenGL이 매우 빠르게 회전 할 수 있다는 것은 맞습니다. 따라서 더 많은 성능이 필요하다면 이동하십시오. GLSurfaceView를 사용해야합니다. OpenGL을 사용할 때의 주요 단점은 텍스트를 처리하는 것이 정말 고통 스럽다는 것입니다. 기본적으로 (좋아, 할 필요는 없지만 최선의 옵션 인 것 같다) 텍스트의 비트 맵을 렌더링해야합니다.

+0

운 좋게도, 안드로이드 경로만으로 텍스트를 작성하지 않으므로 텍스트 문제가 발생하지 않을 수 있습니다. –

0

음,이 대신

, 나는 같은 OpenGL을 기반으로 구축 게임 라이브러리의 그래픽 구성 요소를 사용하는 것이 좋습니다 6 년 전에 질문이 제기되었습니다. 어쩌면 안드로이드 4.0이 나오지 않았을까요? 사실 Android 4.0 이후 android.view.View의 Canvas는 하드웨어 가속 캔버스입니다. 즉, OpenGL에서 구현되므로 성능을 위해 다른 방법을 사용할 필요가 없습니다.

일반 캔버스의 성능을 GLSurfaceView와 비교하여 https://github.com/ChillingVan/android-openGL-canvas/blob/master/canvasglsample/src/main/java/com/chillingvan/canvasglsample/comparePerformance/ComparePerformanceActivity.java을 볼 수 있습니다.