[FlatEngine] 6. Shapes(다양한모양을 그리는 클래스)

이성훈·2023년 1월 26일
0

CloneCoding-FlatEngine

목록 보기
7/7

영상 > https://www.youtube.com/watch?v=ZqwfoMjJAO4&list=PLSlpr6o9vURx4vjomFuwrFhvhV1nhJ_Jc&index=23

이전에는 이미지파일을 출력해보았는데 이번에는 특정 모양을 생성해주는 shapes클래스를 작성해보았다.

이때 필요한 개념은 아래와 같다.

먼저 왼쪽과 같은 흰색 사각형은 내부적으로 2개의 삼각형으로 나뉠수있는데.
우리는 이 삼각형을 2개 그림으로써 사각형을 화면에 띄울 것이다.
즉 GPU에 두개의 삼각형을 그리라는 명령을 줄 것이다.
이때 필요한 두 배열이있는데
첫번째로 vertex즉 꼭짓점의 위치 배열,
두번째로 각 꼭짓점에 매긴 번호를 통해
몇번몇번꼭짓점을 따라 그려 삼각형을 채택하는지에 대한 순서 정보이다.
그림에서 왼쪽 큰 하얀 사각형은 내부에 빨간색, 파란색의 두 삼각형으로 나뉘고 각 삼각형을 이루는 꼭짓점의 순서를 시계방향으로 index에 기록한 모습이다.

먼저 Graphics폴더에 shapes 클래스를 만든다.

그리고 game객체의 레퍼런스를 저장하며, 동시에 널 체크를 진행해준다.


그리고 앞서 말한 두 배열을 선언한다.
크기는 임의로 꼭짓점은 최대 1024, 그리고 삼각형은 3개의 꼭짓점을가지므로 최대 1024 * 3 으로 선언한다.

현재까지 그린모양 갯수, 꼭짓점갯수, 순서갯수, 현재 그리기 시작했는지에 대한 정보들을 초기화해준다.

다음으로 Begin, End, Flush 함수를 작성하며 예외처리를 해주었다.

근데 그리는 명령을 계속 유지해주기위해 EnsureStarted함수를 작성하며
Flush에서 작성한 예외코드를 넘겨주었다.

또 EnsureSpace함수로 메모리에대한 제한을 체크해주는 예외코드를 작성 하였다.

이제 실제로 사각형을 그리는 함수를 작성한다.
좌표 시작 위치 (x, y), 도형의 크기(width, height), 색상을 전달받는다.
이때 Vector2 a,b,c,d순서는 맨 처음에 본 흰 사각형순서이다.

이제 Draw함수에서 index를 처리 할 것인데, Draw함수를 여러번 실행한다면 사각형을 그리기위해 삼각형 두개를 묶을것이고 총 6개의 index가 한쌍으로 쓰일 것이다
그렇다면 아래의 그림처럼
0 1 2 0 2 3로 쓰이고 그 사각형의 index는 4 5 6 4 6 7 로 쓰인다.
따라서 사각형을 그릴때마다 현재 그려진 도형갯수를 index에 추가해줘야한다.

이렇게 index를 사용하는 코드를 작성한다.

Flush함수에서 빼먹은 예외처리 코드 추가

shapes 클래스또한 사용후 자원해제를 자동으로 시켜주기위해 IDisposable 인터페이스를 사용하자.


이번엔 도형을 그릴때 필요없는 effect들을 비활성화 하도록한다.

작성한 effect객체또한 자원해제 대상이다.

마지막으로 실제 사각형을 작성하는 코드를 Sprites클래스에서 갖고오자.
코드 재사용 개꿀

effect객체로부터 그리기위한 모든 정보를 작성해준다..
인자는 첫번째부터 사용될 꼭짓점갯수?
그리고 시작시간, 총 꼭짓점갯수, 총 인덱스 갯수, 또 시작시간?, 삼각형하나는 인덱스를 3개씩 묶어쓰므로 나누기 3을 한다고한다.

game 클래스에서 작성한 shapes객체를 생성해서 사용해보자.

shapes 객체를 생성한후에도 프로그램이 오류를 뱉지않으면 정상적으로 객체가 만들어진것이다.

이제 객체를 통해 함수들을 실행해보자.

그전에 프로그램창 크기를 바꾸고..

정상적으로 화면에 그려지고 있다!

마지막으로 앞으로 일반 직선 같은것도 사각형으로 그릴 수 있으니 이번에 작성한 DrawRectangle함수명을 바꿔주자.

profile
I will be a socially developer

0개의 댓글