GAME MAKER 강좌
KAYAN
◈ 텍스쳐 일부분을 프리미티브에 적용 |
텍스쳐의 일부분만 도형에 적용하려면, 텍스쳐 적용 범위에 대한 매핑 값을 0~1 사이의 값으로
지정해야 합니다.
(▲ 텍스쳐 이미지)
아래의 공식을 통해 텍스쳐 이미지 좌표에서 매핑 값으로 변환하면 프리미티브에 쉽게 적용할 수
있을 거에요.
xtex = (텍스쳐의 x좌표) x (1 / 텍스쳐 가로크기); ytex = (텍스쳐의 y좌표) x (1 / 텍스쳐 세로크기); |
예를 들어, 아래에 있는 256 X 256 크기 텍스쳐 이미지의 일부분을 모델에 적용해봅시다.
(▲ 텍스쳐 매핑으로 적용할 범위)
먼저, 표시하고 싶은 텍스쳐 매핑 범위의 실제 좌표를 알아야 겠지요.
(▲ 텍스쳐 이미지에서의 1:1 좌표)
음. 일단 강좌에서 표시할 텍스쳐의 좌표는 대충 아래와 같네요.
★ 텍스쳐에서의 좌표(텍스쳐의 크기 256X256) ● 1번 삼각형 0 : (83,88) 1 : (82,200) 2 : (192,88) ● 2번 삼각형 3 : (192,88) 4 : (82,200) 5 : (193,202) |
이것을 다시 텍스쳐 매핑 좌표로 변환하면, 짠~
★ uv 좌표 0 : (83,88) ▶ (0.32,0.34) 1 : (82,200) ▶ (0.32,0.78) 2 : (192,88) ▶ (0.75,0.34) 3 : (192,88) ▶ (0.75,0.34) 4 : (82,200) ▶ (0.32,0.78) 5 : (193,202) ▶ (0.75,0.79) |
대충 이와 같습니다.
(▲ 프리미티브에 텍스쳐를 적용할 모습)
그리고 계산을 통해 나온 값을 이용해 프리미티브를 구성한다면,
예) texid=sprite_get_texture(spr_texture, 0); draw_primitive_begin_texture(pr_trianglelist, texid); draw_vertex_texture(83, 88, 0.32, 0.34); //0 draw_vertex_texture(82, 200, 0.32, 0.78); //1 draw_vertex_texture(192, 88, 0.75, 0.34); //2 draw_vertex_texture(192, 88, 0.75, 0.34); //3 draw_vertex_texture(82, 200, 0.32, 0.78); //4 draw_vertex_texture(193, 202, 0.75, 0.79); //5 draw_primitive_end( ); |
강좌에서는 텍스쳐 이미지와 1:1 비율로 표시하기 위해 텍스쳐 매핑에 사용한 좌표를 그대로
버텍스 좌표에 사용했습니다.
이와 같이 준비한 텍스쳐 매핑 값으로 적용하면, 실제 화면은 아래처럼 텍스쳐가 부분적으로
나오게 됩니다.
(▲ 텍스쳐를 적용한 모습)
(▲ 텍스쳐 정보를 유지한 채, 버텍스를 조절)
◈ 텍스쳐 반복 처리 |
일반적으로 텍스쳐 매핑 값은 0~1입니다. 0~1을 벗어나면 제대로 표시가 되지 않지요.
하지만 아래 함수를 사용하면 프리미티브에 적용된 텍스쳐를 타일 처럼 반복화하여 표시할
수 있습니다.
gpu_set_texrepeat(enable) enable : true(사용) false(사용안함, 기본값) |
사용법은 간단합니다. 텍스쳐 도형 구성하기전에 함수를 활성화하고, 프리미티브 버텍스의
텍스쳐 매핑 값을 반복 횟수만큼 지정하면 됩니다.
(▲ 프리미티브에 적용된 텍스쳐를 반복 표시)
예를 들어, 가로로 3 회 반복시키려면, 먼저 gpu_set_texrepeat 함수를 활성화 하고,
프리미티브 버텍스의 xtex 값을 3 으로 지정하면 되는 것이지요.
예) gpu_set_texrepeat(true); // 텍스쳐 반복 활성화 texid=sprite_get_texture(spr_texture, 0); draw_primitive_begin_texture(pr_trianglelist, texid); draw_vertex_texture(0, 0, 0, 0); draw_vertex_texture(1, 293, 0, 3); draw_vertex_texture(284, 151, 3, 1.5); draw_primitive_end( ); gpu_set_texrepeat(false); // 텍스쳐 반복 비활성화 |
이것은 삼각형 모양의 프리미티브에 반복화한 텍스쳐를 적용한 예제입니다.
(▲ 프리미티브에 적용된 텍스쳐)
'GameMaker강좌[GMS2] > GMS2기초강좌' 카테고리의 다른 글
[게임메이커 강좌-기초][GMS2] 가상 키-2-가상 키 구성 (0) | 2021.01.17 |
---|---|
[게임메이커 강좌-기초][GMS2] 가상 키-1-마우스 클릭 또는 화면 터치 (1) | 2021.01.16 |
[게임메이커 강좌-기초][GMS2]프리미티브(Primitive) 종류 - 텍스쳐 매핑 1 (0) | 2019.04.01 |
[게임메이커 강좌-기초][GMS2]프리미티브(Primitive) 종류 - 면 (3) | 2019.03.27 |
[게임메이커 강좌-기초][GMS2]프리미티브(Primitive) 종류 - 점, 선 (0) | 2019.03.27 |
댓글