libgdx - Renderer

기술 2018. 6. 22. 21:12 Posted by 아는 개발자

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 함수를 호출해도 그림이 그려지지 않으니 주의하도록 하자. 


728x90

'기술' 카테고리의 다른 글

URI (Uniform Resource Identifier)  (0) 2018.07.02
libgdx - Viewport  (0) 2018.06.22
libgdx - Renderer  (0) 2018.06.22
Libgdx - 소개 및 주요함수 정리  (0) 2018.06.20
objdump 를 이용한 바이너리 깨보기  (0) 2018.05.29
그래픽 소프트웨어, 라이브러리 정리  (0) 2018.05.06