OpenGL Shader – 8

GLSL을 위한 OpenGL 설정 – 예제
원본 : http://www.lighthouse3d.com/opengl/glsl/index.php?oglexample1

다음 코드는 이전 섹션에서 설명했던 모든 단계를 포함하고 있다. p, f, v는 OpenGL 2.0 문법으로는 GLuint 타입이고 ARB 확장 문법으로는 GLhandleARB 타입인 전역변수이다.

OpenGL 2.0 문법은 다음과 같다.

void setShaders() {
    char *vs,*fs;
	
    v = glCreateShader(GL_VERTEX_SHADER);
    f = glCreateShader(GL_FRAGMENT_SHADER);	
	
    vs = textFileRead("toon.vert");
    fs = textFileRead("toon.frag");
	
    const char * vv = vs;
    const char * ff = fs;
	
    glShaderSource(v, 1, &vv, NULL);
    glShaderSource(f, 1, &ff, NULL);
	
    free(vs);
    free(fs);
	
    glCompileShader(v);
    glCompileShader(f);
	
    p = glCreateProgram();
		
    glAttachShader(p,v);
    glAttachShader(p,f);
	
    glLinkProgram(p);
    glUseProgram(p);
}

ARB 확장 문법은 다음과 같다.

void setShaders() {
    char *vs,*fs;
	
    v = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
    f = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);	
	
    vs = textFileRead("toon.vert");
    fs = textFileRead("toon.frag");
	
    const char * vv = vs;
    const char * ff = fs;
	
    glShaderSourceARB(v, 1, &vv,NULL);
    glShaderSourceARB(f, 1, &ff,NULL);
	
    free(vs);
    free(fs);
	
    glCompileShaderARB(v);
    glCompileShaderARB(f);
	
    p = glCreateProgramObjectARB();
		
    glAttachObjectARB(p,v);
    glAttachObjectARB(p,f);
	
    glLinkProgramARB(p);
    glUseProgramObjectARB(p);
}

OpenGL 2.0의 형태와 ARB 확장 형태에 대한 GLUT를 사용한 완전한 예제는 다음을 통해 다운로드하길 바란다.

위의 코드는 2개의 간단한 쉐이더 코드와 text 파일을 읽는 함수가 포함되어져 있다. 참고로 위의 코드를 실행하면 그 결과는 다음과 같다.

네, 툰 쉐이딩이로군요~ 약간 어슬픈 느낌이긴 하지만 말입니다.

“OpenGL Shader – 8”에 대한 6개의 댓글

  1. 셰이더 알아보다가 여기까지 오게되었네요 nehe강좌 번역하실때부터 봤는데 도움 많이 받고있습니다. 감사합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다