Toon Shading ( 만화적 셰이딩)은 Cell Rendering 이라고도 하는 NPR( Non-Photorealistic Rendering, 비 실사 렌더링 ) 분야의 한 종류이다.
Toon Shading 의 핵심은,
1. 급격한 음영 변화와 비교적 단순한 단계의 음영. (밝음, 중간, 어두움)
2. 외곽선.
의 두가지로 들 수 있다.
외곽선을 제외한 Toon Shading이다.
OpenGL App.에서 지정해 주어야 될 것은 보시다시피 uniform 으로 선언되어 있는 lightDir 이다.
렌더링될 물체의 법선벡터와 빛의 방향 의 내적으로, 셰이딩 색상을 결정한다.
알고 있겠지만, OpenGL App.에서 설정하는 것을 보자.
Toon Shading 의 핵심은,
1. 급격한 음영 변화와 비교적 단순한 단계의 음영. (밝음, 중간, 어두움)
2. 외곽선.
의 두가지로 들 수 있다.
외곽선을 제외한 Toon Shading이다.
// VertexShader.vs uniform vec3 lightDir; varying float intensity; void main(){ intensity= dot(lightDir, normalize(gl_Normal)); gl_Position= ftransform(); }
// FragmentShader.fs varying float intensity; void main(){ vec4 color; if( intensity > 0.95 ) color= vec4(0.5, 1.0, 0.5, 1.0); else if( intensity > 0.5) color= vec4(0.3, 0.8, 0.3, 1.0); else if( intensity > 0.25) color= vec4(0.2, 0.6, 0.2, 1.0); else color= vec4(0.1, 0.3, 0.1, 1.0); gl_FragColor= color; }
OpenGL App.에서 지정해 주어야 될 것은 보시다시피 uniform 으로 선언되어 있는 lightDir 이다.
렌더링될 물체의 법선벡터와 빛의 방향 의 내적으로, 셰이딩 색상을 결정한다.
알고 있겠지만, OpenGL App.에서 설정하는 것을 보자.
//Render.java ( GLEventListener 인터페이스를 상속한 클래스 public void init(GLAutoDrawable drawable){
....
.... int loc= gl.glGetUniformLocation(glsl.getProgID(), "lightDir"); gl.glUniform3f(loc, 0.1f, -0.4f, 0.5f); }
'Computer > JOGL' 카테고리의 다른 글
glut (0) | 2007.08.06 |
---|---|
10. GLSL -- Texture (0) | 2007.08.03 |
8. GLSL -- Animation (0) | 2007.08.03 |
7. GLSL -- vs & fs (0) | 2007.08.03 |
6. GLSL -- HelloWorld (0) | 2007.08.03 |