텍스처가 있는 정점 그리기
이 문서는 텍스처가 있는 정점을 정의하는 draw_vertex_texture 함수에 대해 설명합니다. 이 함수는 원시 도형의 텍스처가 있는 정점의 위치를 설정합니다. 최종적으로 원시 도형의 모습은 선택한 원시 도형의 유형, 정점을 추가하는 순서, 그리고 텍스처의 시작점 위치에 따라 달라집니다. 원시 도형을 끝내고 그리려면 draw_primitive_end를 호출해야 합니다.
텍스처의 일부만 그리기
텍스처의 일부만 원시 도형의 표면에 그리려면 적절한 xtex 및 ytex 위치를 설정해야 합니다. 이 좌표는 UV 포인트로도 알려져 있으며, 값은 0과 1 사이의 범위를 가집니다. 스프라이트 이미지의 왼쪽 상단 모서리는 (0, 0) 지점이고, 오른쪽 하단 모서리는 (1, 1) 지점입니다. 이를 통해 원본 이미지 자산의 일부만으로 원시 도형에 텍스처를 적용할 수 있습니다.
색상 혼합
텍스처가 있는 원시 도형을 그릴 때, 텍스처는 draw_set_colour로 설정한 색상과 혼합됩니다. 혼합 없이 텍스처를 그리려면 c_white로 설정해야 합니다.
문법
draw_vertex_texture(x, y, xtex, ytex)
인수 설명
| 인수 이름 | 타입 | 설명 |
|---|---|---|
| x | Real | 정점의 x 좌표 |
| y | Real | 정점의 y 좌표 |
| xtex | Real | 텍스처의 너비 비율. 0은 텍스처 페이지의 왼쪽, 1은 오른쪽 |
| ytex | Real | 텍스처의 높이 비율. 0은 텍스처 페이지의 위쪽, 1은 아래쪽 |
예제 코드
아래 코드는 텍스처가 있는 정점을 사용하여 사각형을 그리는 예제입니다.
draw_set_colour(c_white);
var _tex = sprite_get_texture(spr_Background, 0);
draw_primitive_begin_texture(pr_trianglestrip, _tex);
draw_vertex_texture(0, 0, 0, 0);
draw_vertex_texture(640, 0, 1, 0);
draw_vertex_texture(0, 480, 0, 1);
draw_vertex_texture(640, 480, 1, 1);
draw_primitive_end();
위 코드는 4개의 정점으로 구성된 삼각형 스트립을 그리며, _tex 변수에 저장된 텍스처를 사용하여 전체 원시 도형을 덮습니다.
활용 예제
- 배경 이미지 그리기
gml draw_set_colour(c_white); var _bg_tex = sprite_get_texture(spr_Background, 0); draw_primitive_begin_texture(pr_trianglefan, _bg_tex); draw_vertex_texture(0, 0, 0, 0); draw_vertex_texture(800, 0, 1, 0); draw_vertex_texture(800, 600, 1, 1); draw_vertex_texture(0, 600, 0, 1); draw_primitive_end(); - UI 요소 텍스처링
gml draw_set_colour(c_white); var _button_tex = sprite_get_texture(spr_Button, 0); draw_primitive_begin_texture(pr_rectangle, _button_tex); draw_vertex_texture(100, 100, 0, 0); draw_vertex_texture(300, 100, 1, 0); draw_vertex_texture(300, 200, 1, 1); draw_vertex_texture(100, 200, 0, 1); draw_primitive_end(); - 애니메이션 프레임 그리기
gml draw_set_colour(c_white); var _anim_tex = sprite_get_texture(spr_Animation, current_frame); draw_primitive_begin_texture(pr_trianglestrip, _anim_tex); draw_vertex_texture(50, 50, 0, 0); draw_vertex_texture(150, 50, 1, 0); draw_vertex_texture(50, 150, 0, 1); draw_vertex_texture(150, 150, 1, 1); draw_primitive_end();