본문 바로가기

IT 번역/Cocos2d-x 메뉴얼[manual] 번역

폴리곤 스프라이트 | Polygon Sprite

번역일: 2019-07-17
주소: https://docs.cocos2d-x.org/cocos2d-x/en/sprites/polygon.html

 

Polygon Sprite · GitBook

Polygon Sprite A Polygon Sprite is also a Sprite, that is used to display a 2d image. However, unlike a normal Sprite object, which is a rectangle made of just 2 triangles, PolygonSprite objects are made of a series of triangles. Why use a Polygon Sprite?

docs.cocos2d-x.org

폴리곤 스프라이트[PolygonSprite]도 스프라이트[Sprite]입니다. 즉, 2D 이미지를 표시하기 위해 사용된다는 뜻이죠. 근데 말입니다, 일반적인 스프라이트[Sprite] 객체와는 다르게, 다시 말해서 딱 2개의 삼각형으로만 이루어진 사각형이 아니라, 폴리곤 스프라이트[PolygonSprite] 객체는 여러개의 삼각형으로 이루어져있습니다.

 

왜 폴리곤 스프라이트[PolygonSprite]를 쓸까요?

 

간단합니다, 퍼포먼스죠!

픽셀 필레이트[Pixel Fill Rate] (픽셀 당 연산 능력)에 대해서 수많은 기술적인 설명을 할 수 있겠지만, 짧게 설명을 드리자면, 일반적인 스프라이트는 그냥 넓이와 높이를 기준으로 사각형 내부의 픽셀을 그냥 그리지만, 폴리곤 스프라이트[PolygonSprite]는 스프라이트[Sprite]의 모양을 기반으로 그린다는 겁니다. 이렇게 그리면, 그릴 필요없는 부분을 그리지 않게되서, 퍼포먼스를 향상시키게 되죠. (일반 스프라이트[Sprite]는 이미지의 여백도 실제로는 '안그리는' 처리를 하게되서, 낭비되는 부분이 있는데, 그 부분이 생략된다는 것이죠.) 폴리곤 스프라이트[PolygonSprite]는, 일반 스프라이트[Sprite] 객체와 마찬가지로, 스프라이트 시트[SpriteSheet]를 사용할 수 있습니다. Texture Packer와 같은 도구를 이용하면, 폴리곤 스프라이트[PolygonSprite] 객체로 스프라이트 시트[SpriteSheet]를 생성할 수 있습니다.

다음 예제를 한번 보세요:

왼쪽과 오른쪽의 차이가 보시나요?

왼쪽은 2개의 삼각형을 이용하여 사각형으로 구성된 일반적인 스프라이트[Sprite]를 그린 것이구요.

오른쪽은, 보다 많은, 하지만 더 작은 크기의 삼각형으로 구성된 폴리곤 스프라이트[PolygonSprite]를 그린 것입니다.

순전히 퍼포먼스에 대한 것만으로 본다면, 폴리곤 스프라이트[PolygonSprite]를 사용할만한 가치가 있는지 판단하는 기준은 다양한 요소들에 의해 좌우되긴합니다. (스프라이트[Sprite]의 모양/세밀함, 크기, 화면에 그려지는 횟수 등등..) 하지만, 일반적으로, 최근 GPU들은 픽셀을 그리는 것보다 버텍스[Vertex/Vertices]를 그리는 것이 더 효율적이에요.

오토폴리곤 | AutoPolygon

 

오토폴리곤[AutoPolygon]은 도우미 클래스[helper class]입니다. 이미지를 실시간으로 2D 폴리곤 메시[Polygon Mesh]로 만들어주죠.

실질적으로는 이 과정을 처리하기 위한 각 단계마다 함수들이 있습니다, 모든 점들을 확인하는 것(tracing all the points)에서 부터 삼각측량[triangulation]하는 것까지, 전 과정에 걸쳐서요. 그 전 과정을 거치고 나면, 결과적으로 폴리곤 스프라이트[PolygonSprite]를 생성할 때 사용하는 폴리곤 정보[Polygon Info] 객체를 얻을 수 있습니다. 다음의 예제를 보시죠:

 

// 폴리곤 정보 객체[polygon info]를 자동으로 생성합니다.
auto pinfo = AutoPolygon::generatePolygon("filename.png");

// 폴리곤 정보 객체[polygon info]를 이용하여 스프라이트[Sprite] 객체를 생성합니다.
auto sprite = Sprite::create(pinfo);