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

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

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

 

 

GAME MAKER 강좌

 

 

KAYAN

 

 

 

일반적으로 2D의 텍스쳐 이미지를 프리미티브에 입히는 방법을 'UV 매핑' 이라고 합니다.

 

 

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

 

이 기능을 활용하면 다양한 도형 이미지들을 만들어 낼 수 있지요.

이번 강좌에서는 프리미티브에 텍스쳐를 적용하는 방법에 대해 알아보도록 합시다.

 

 

 

 

 

   ◈ 텍스쳐 도형

 

텍스쳐 도형을 만들 때는, 먼저 아래 함수를 사용하여 어떤 도형으로 구성할 것인지 설정해야 합니다.

 



   draw_primitive_begin_texture(kind, tex) : 지정한 종류의 도형 구성을 시작(텍스쳐 타입)

   draw_primitive_end( ) : 기초 도형 종료

 


kind 는 프리미티브의 종류(pr_trianglelist, pr_trianglestrip, pr_trianglefan)를 지정하고,
tex텍스쳐 id를 지정합니다.

※ [주의] pr_trianglefan 은 HTML5 대상 플랫폼에서는 사용할 수 없으며, 일부 플랫폼에서는
제대로 작동하지 않을 수 있습니다.


텍스쳐 id는 아래 함수를 통해 스프라이트 이미지의 텍스쳐 정보를 얻을 수 있습니다.

 



   sprite_get_texture(sprite,subimg)

      sprite : 텍스쳐 정보를 가져올 스프라이트 이미지
      subimg : 스프라이트 이미지의 서브 이미지 번호

 


이것을 사용하여, 텍스쳐 정보를 아래와 같이 프리미티브에 적용하면 됩니다.

 



   예)

   texid=sprite_get_texture(spr_texture, 0); //텍스쳐 정보

   draw_primitive_begin_texture(pr_trianglelist, texid); //텍스쳐 정보를 프리미티브에 적용
   ...
   draw_primitive_end( );

 

 

텍스쳐의 크가로X세로의 크기가 같아야 하고, 모두 2의 제곱의 크기여야 제대로 표시가 됩니다.
만약 크기가 2의 제곱이 아니면 실제 화면에서 일부가 잘려서 제대로 표시가 되지 않을 수 있습니다.

 

그리고 스프라이트 설정의 Separate Texture Page를 체크해야 지정한 스프라이트 이미지를 텍스쳐로
적용 시킬 수 있습니다.

 

 

 

 

(▲ 스프라이트 설정)

 

도형에 사용되는 텍스쳐 타입의 버텍스에는 아래 함수를 사용할 수 있습니다.

 



   draw_vertex_texture(x, y, xtex, ytex) : 기본 버텍스 함수
      x,y : 표시 좌표
      xtex, ytex : 텍스쳐 uv 매핑 좌표

   draw_vertex_texture_colour(x, y, xtex, ytex, color, alpha) :

   확장 버텍스 함수(색+투명도 추가 지정)
      color : 색상
      alpha : 투명도

 

 

이전 강좌에서 알아본 프리미티브의 버텍스 함수에 매핑 정보가 추가된 함수입니다.
(xtex, ytex)는 텍스쳐 매핑 좌표로 각각 0~1 사이의 값으로 지정할 수 있습니다.

 


(▲ 텍스쳐 이미지)


텍스쳐에서 좌측 상단이 (0, 0), 좌측 하단은 (0, 1), 그리고, 우측 상단이 (1, 0), 우측 하단은 (1, 1) 입니다.


(▲ 텍스쳐 이미지의 uv값)


예를 들어, 위의 텍스쳐 이미지에서 매핑 좌표를 적용한 프리미티브를 구성한다면,


(▲ 텍스쳐 모델)


아래와 같이 순서대로 삼각형을 만들면서 원하는 형태로 구성합니다.
그리고 그 위치에 따른 텍스쳐의 매핑 정보를 지정해주면 됩니다.

 



   예) 256X256의 정사각형 모델

   texid=sprite_get_texture(spr_texture, 0);

   draw_primitive_begin_texture(pr_trianglelist, texid);

   draw_vertex_texture(0,0,0,0); //0
   draw_vertex_texture(0,256,0,1); //1
   draw_vertex_texture(256,0,1,0); //2

   draw_vertex_texture(256,0,1,0); //3
   draw_vertex_texture(0,256,0,1); //4
   draw_vertex_texture(256,256,1,1); //5

   draw_primitive_end( );

 

 

 

 

 

 

 

300x250

댓글