2012-02-13 1 views
-1

저는 iOS에서 2D 게임을 개발하고 있습니다 만, 빨리 달리기 위해 드로잉을 얻는 것이 어렵다는 것을 알고 있습니다 (Retina 디스플레이에서 60FPS).iOS에서 가장 빠른 그리기 방법은 무엇입니까?

나는 드로잉에 처음으로 UIKit을 사용했지만 게임에는 적합하지 않습니다. 나는 둔화없이 몇 가지 스프라이트를 그리지 않을 것입니다.

그럼 OpenGL로 옮겼습니다. GPL에 접근 할 수있는 가장 가까운 곳이기 때문에 OpenGL로 옮겼습니다. glDrawArrays()를 사용하고있었습니다. 시뮬레이터에서 실행했을 때 200 개 이상의 삼각형에 도달하면 FPS가 떨어졌습니다. 시뮬레이터 나 컴퓨터가 iOS OpenGL을 실행하기 위해 최적화되지 않았기 때문에 사람들이 말했습니다. 그런 다음 실제 장치에서 테스트 해 보았습니다. 놀랍게도 성능 차이는 매우 작았습니다. 여전히 소수의 삼각형을 원활하게 실행할 수 없었습니다. iOS의 다른 게임은 더 많은 폴리곤, 쉐이더, 3D 그래픽 등을 사용합니다.

OpenGL 성능을 검사하기 위해 Instruments에서 실행했을 때 VBO를 사용하여 속도를 높일 수 있습니다. 그래서 VBO를 대신 사용하여 각 프레임의 모든 꼭짓점을 업데이트하는 코드를 다시 작성했습니다. 성능은 거의 향상되지 않았으며 일관된 60FPS에서 여전히 200 삼각형을 초과 할 수 없습니다. 컨텍스트 변경/변형 없이는 2D 드로잉 만 가능합니다. 또한 게임을 아직 작성하지 않았습니다. CPU 집약적 인 작업을 수행하는 오브젝트가 없습니다.

내가 묻는 모든 사람들은 OpenGL이 최고의 성능이라고 말합니다. 나는 무엇을 잘못하고있을 수 있 었는가? OpenGL은 각 프레임을 업데이트하는 다각형을 많이 처리 할 수 ​​있다고 가정합니다. 맞습니까? 어떤 게임이 3D를 사용하는 Infinity Blade와 같이 잘 돌아가는 게임인지, 아니면 계속 업데이트되는 스프라이트가 많은 Angry Birds 같은 게임을 사용합니까? 게임을 할 때 추천되는 것은 무엇입니까?

답변

1

OpenGL이 확실히 가장 빠른 옵션입니다. 가장 오래된 iOS 기기에서도 30+ fps로 약 20,000 개의 다각형을 실행할 수 있습니다.

소리가 잘못되었거나 잘못되어 있어야하는 것 같습니다. 소스 코드를 보지 않고 무엇이 될지 짐작할 수는 없습니다.

그러나 일반적으로 말하자면 VBO와 모든 드로잉을 드로잉 파이프 라인 외부에 만들어야합니다.

+0

로딩은 게임이 시작될 때만 수행되며 매우 적은 상태 변경 호출 만 사용합니다. 그러나 드로잉 파이프 라인 (Drawing Pipeline)을 말할 때 나는 이해하지 못합니다. 즉, 매 프레임마다 꼭짓점을 업데이트해야하며 드로잉이 모든 프레임에서 발생하기 때문에 두 번이 같은 시간에 발생했다고 생각했습니다. 어떻게 그들을 분리 할 수 ​​있습니까? 내 코드를 프로파일 링 할 시간을 갖기 위해 노력하고 있지만, 계측기에서 무슨 일이 일어나는지 완전히 이해하지 못했습니다. – HLorenzi

+1

드로잉 파이프 라인은 드로잉 루프입니다. 내가하는 일을 보지 않고는 너를 도울 수 없다. 나는 여전히 당신이하지 말아야 할 드로잉 루프 안에서 뭔가를하고 있어야한다고 생각합니다. –

관련 문제