libgdx - Renderer
ShapeRenderer
컴퓨터 그래픽 소프트웨어에서 '렌더링'은 이진화된 데이터를 컴퓨터 내에 영상을 만들어내는 과정을 뜻한다. 게임 엔진인 libgdx에서도 렌더링 개념을 사용하며 객체 지향적인 관점으로 활용하기 위해 ShapeRenderer라는 클래스를 만들었다. ShapeRenderer 는 화면을 그리기 위한 객체로 개발자가 만들어둔 데이터를 다양한 API를 이용해화면에 출력해주는데 사용된다.
ShapeRenderer renderer; @Override public void create() { renderer = new ShapeRenderer();
실제 클래스의 내부를 보면 public으로 선언된 함수가 많은데 이중 대부분이 화면에 그리기 위해 사용 할 수 있는 API 들이다. 목적에 따라서 함수를 세가지 종류로 나눌 수 있을 것 같다.
1. 도형함수
public void point (float x, float y, float z) {} public final void line (Vector3 v0, Vector3 v1) {} public void rectLine (Vector2 p1, Vector2 p2, float width) {} public void arc (float x, float y, float radius, float start, float degrees, int segments) {} public void circle (float x, float y, float radius, int segments) {}
말 그래도 도형을 그리는 함수다. 상위 렌더링 클래스(ImmediateModeRenderer)로부터 받은 기본적인 렌더링 함수를 확장해(점하나 찍는 기능밖에 없지만) 기본적인 도형을 그릴 수 있는 함수로 만들었다. 함수명을 통해서 대강 무슨 기능을 하는지 짐작 할 수 있을 것이다.
강의 들을 때는 이것 만으로도 과제를 다 할 수 있었는데 실제 개발 할 때는 턱없이 부족할 것 같고 새로운 클래스를 만들어 위 도형 함수를 추상화해야 캐릭터도 만들고 배경도 만들 수 있을 것 같다. 정말 순수한 코딩이 많이 필요한 게임 엔진 인 것 같다.
2. 세팅함수
public void setColor (Color color) { }; public void setProjectionMatrix (Matrix4 matrix) { } public void setTransformMatrix (Matrix4 matrix) { } public void set (ShapeType type) { }
세팅함수에서는 도형을 그리기 전에 어떤 색으로 그릴 것인지(setColor), 도형 내부 공간은 채울 것인지 말것인지(set) 그리고 만든 완성물을 무엇으로 볼 것인지(setProjectionMatrix, setTransformMatrix)를 결정한다. setProjectionMatrix, setTransformMatrix 함수 모두 인자로 Matrix인데 이 변수는 유저가 게임을 바라보는 시선 결정한다고 보면 될 것 같다.
3. 시작/종료 함수
public void render(float delta) { shapeRenderer.begin(); // ... shapeRenderer.end();
렌더링의 시작과 끝을 알리는 함수다. begin 함수는 지금부터 이 객체를 이용해서 렌더링을 하겠다는 의미고, end 함수는 이 객체의 렌더링을 끝낸다는 의미다. begin 함수 전이나 end 이후에는 renderer 함수를 호출해도 그림이 그려지지 않으니 주의하도록 하자.