본문 바로가기
GameMaker강좌[GMS2]/GMS2기초강좌

[게임메이커 강좌-기초][GMS2]프리미티브(Primitive) 종류 - 텍스쳐 매핑 2

by 타락카얀 2019. 4. 3.
728x90

 

 

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); // 텍스쳐 반복 비활성화
 

 

이것은 삼각형 모양의 프리미티브에 반복화한 텍스쳐를 적용한 예제입니다.

 


(▲ 프리미티브에 적용된 텍스쳐)

 

 

 

 

 

300x250

댓글