목차
색상과 반투명(알파) 그리고 블렌딩(섞는 효과)를 다루는 기능
색상과 알파값을 얻는 함수
color_get_blue,green,red
color_get_blue / color_get_green / color_get_red
색에서 RGB값을 분리해서 리턴하는 함수
color_get_hue
color_get_saturation
saturation, 색의 순도(흰색이 얼마나 섞여 있는가?)를 리턴한다. 리턴값은, 숫자가 적을 수록, 0에 가까울수록 흰색이 많이 섞여 밝아지고 커질수록 어두어진다.
예)
col = make_color_hsv( random(255), color_get_sat(c_teal), 255 );
color_get_value
빛의 밝기(하얀색보다 밝은 빛을 봤을때 느끼는 밝기의 정도)를 리턴. 리턴값은, 숫자가 작으면 어둡고 클수록 밝아진다.
예)
col = make_color_hsv( random(255), 255, color_get_val(c_teal) );
draw_getpixel
draw_getpixle( x, y )
x,y 위치의 색상값을 가져온다. 함수가 느리기 때문에 제한적으로 사용하라고 한다.
draw_set_color( draw_getpixel(500,200) );
draw_get_color / draw_set_color
draw_set_color( <색상> )
글자, 프리미티브, 텍스쳐 없는 폴리건, 그리기(선 같은)등을 할때 사용되는 기본 색상을 정한다.
draw_get_color()
draw_set_color()로 설정한 색상값을 가져온다.
draw_set_alpha / draw_get_alpha
draw_set_alpha( <알파값> )
0(완전투명)에서 1(투명효과 없음) 사이의 값을 입력한다. 이 함수로 알파값이 설정되면 모든 그리기 액션,
- 선, 점 그리기
- 배경 그리기
- 스프라이트
- 폰트로 글자찍기
- 3D 프리티브
에 영향을 준다. 오브젝트 자체에 투명값이 설정된 경우에는 이 함수로 정한 기본 알파값에 오브젝트의 알파값이 더해져서 더 투명해진다.
기본 알파가 0.5 , 오브젝트의 알파가 0.5면 최종 알파값은 0.25 ( 0.5 x 0.5 ) 가 된다.
예) 문자에 약간의 그림자 효과를 준다.
draw_set_alpha( 0.5 ); darw_set_color( c_black ); draw_text( x+5, y+5, "Level 1" ); draw_set_alpha(1); draw_set_color(c_white); draw_text( x, y, "Level 1" );
draw_get_alpha()
기본 알파값을 얻어온다.
색상을 만드는 함수
make_color_hsv
make_color_rgb
merge_color
색상,알파,블렌딩하는 함수
draw_clear
draw_clear( <색상> );
현재 화면이나 서피스를 <색상>으로 채운다.
draw_clear_alpha
draw_clear_alpha( <색상>, <알파값> );
특정 색상값을 알파값(반투명정도)만큼 화면이라 서피스에 칠한다.(채운다.)
알파값은 0(완전투명)에서 1(투명도 없음)사이의 소수점으로 사용한다.
draw_clear_alpha( c_red, 0.5 );
draw_set_alpha / draw_get_alpha
전체적으로 적용될 알파(투명값)을 정한다.
draw_set_color
draw_set_blend_mode
draw_set_blend_mode( <설정할 모드> )
원본 이미지와 대상 이미지가 각각 색상값을 가지고 있을때 (당연히 있겠지만) 픽셀 단위로 원본과 대상을 섞어서 최종 색상을 만든다. 이때 어떤 방식으로 두 색상 (원본 x 대상)을 조합할 것인지 사용할 방식을 설정한다.
각 색상은 0~1사이의 부동소수점으로, 최종 새로운 색상은,
- 원본색상 * 어떤 값 + 대상쪽의 색상 * 어떤 값
의 형식으로 만들어진다.
<color silver> When GameMaker:Studio goes to draw a pixel there is a source color (the color of the pixel we're going to draw) and a destination color(the color that's already in the pixel we're drawing to), so when determining the new color of the pixel, the source and destination colors are calculated according to the choosen blend mode. Each component of the colors is stored as a floating point value between 0 and 1, and the new color is calculated by multiply each component of the source color by some factor and by multiplying each component of destination color by some other factor and then adding the results together component by component. </color>
색상이 조합되는 방식에 대한 정의는,
정의(상수)이름 | 설명 | 확장된 모드 |
---|---|---|
bm_normal | 보통의 색상 조합. 기본설정값 | bm_src_alpha bm_inv_src_alpha |
bm_add | 색상을 더한다. 점점 밝아지는 효과가 있다. | bm_src_alpha, bm_one |
bm_subtract | 색상을 뺀다. 어두워지는 효과가 있다. | bm_zero, bm_inv_src_color |
bm_max | 맥스블렌딩. 더해지는 효과와 비슷하다.(?) | bm_src_alpha, bm_inv_src_color |
draw_set_blend_mode_ext
// no return draw_set_blend_mode_ext( <src:원본쪽 블렌딩 방법>, <dst:대상쪽 블렌딩 방법> );
- src, dst 아래쪽 표에 있는 상수를 사용한다.
사용 가능한 블렌딩 정의 값
새로 그리려는 픽셀은 원본 색상Source color, 줄여서 src( 이제 그리려고 하는 색 ) 그리고 대상쪽의 색상Destination color, 줄여서 dst (이미 어딘가에 그려져 있는)이 있다.
새로운 색상은 src와 dst의 값을 어떤 블렌딩 방식으로 계산할 것인가에 따라 결정된다.
각 색상값은 부동소수점으로 저장되서 (0~1사이의 값)
- 원복색상 * 어떤 값 + 대상 색상 * 어떤 값
방식으로 결정된다.
커스텀 블렌드 모드를 사용하기 위해서 다른 방식의 블렌드 모드를 설정할 수 있도록 했다. 원본쪽(src) 대상쪽(dst) 모두 붉은색,녹색,파란색 그리고 알파값(투명값)을 갖고 있으며 아래 차트에서는 원본쪽 RGBA를 (Rs,Gs,Bs,As)로 대상쪽은 (Rd,Gd,Bd,Ad)로 표시한다. 이 상수들은 함수의 파라미터로 어느 쪽에 쓰여도 상관없다. 효과가 달라질뿐.
Constant | Blend factor (Red, Green, Blue, Alpha) |
---|---|
bm_zero | (0, 0, 0, 0) |
bm_one | (1, 1, 1, 1) |
bm_src_color | (Rs, Gs, Bs, As) |
bm_inv_src_color | (1-Rs, 1-Gs, 1-Bs, 1-As) |
bm_src_alpha | (As, As, As, As) |
bm_inv_src_alpha | (1-As, 1-As, 1-As, 1-As) |
bm_dest_alpha | (Ad, Ad, Ad, Ad) |
bm_inv_dest_alpha | (1-Ad, 1-Ad, 1-Ad, 1-Ad) |
bm_dest_color | (Rd, Gd, Bd, Ad) |
bm_inv_dest_color | (1-Rd, 1-Gd, 1-Bd, 1-Ad) |
bm_src_alpha_sat | (f, f, f, 1) where f = min(As, 1-Ad) |
비교차트
예제
검은색을 투명하게 만들어서, 투명효과가 바깥쪽은 진하고 원 안쪽이 점점 약해져서 최종 'glow' 효과를 만든다. 빛이 있는 것 처럼 보인다. 사용 후에는 블렌드모드를 리셋해서 다른 것들이 영향 받지 않게 한다.
draw_set_blend_mode_ext( bm_src_alpha, bm_one ); draw_circle_color( 100, 100, 50, c_white, c_black, 0 ); draw_set_blend_mode( bm_normal );
draw_enable_alphablend
알파 블렌드 효과를 켜거나 끈다.
게임의 속도 향상을 위해서 온/오프 하는데, 모바일 기기에서 속도를 얻기 위해서 쓴다고 한다.
draw_enable_alphablend( true ); // on draw_enable_alphablend( false ); // off
기본 색상들
- c_aqua
- c_black
- c_blue
- c_dkgray
- c_fuchsia
- c_gray
- c_green
- c_lime
- c_ltgray
- c_maroon
- c_navy
- c_olive
- c_orange
- c_purple
- c_red
- c_silver
- c_teal
- c_white
- c_yellow