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 파일을 읽는 함수가 포함되어져 있다. 참고로 위의 코드를 실행하면 그 결과는 다음과 같다.
네, 툰 쉐이딩이로군요~ 약간 어슬픈 느낌이긴 하지만 말입니다.
셰이더 알아보다가 여기까지 오게되었네요 nehe강좌 번역하실때부터 봤는데 도움 많이 받고있습니다. 감사합니다.
네~ 재선님, 댓글 너무 감사드립니다~
안녕하세요. openGL 공부하려다가 이곳을 발견했네요. 자료들 너무 감사합니다. 혹시 제 블로그에 글들을 좀 담아가도 괜찮을까요??
네, 출처만 살짝 남겨주신다면 담아가셔도 됩니다. 또한 댓글 감사드립니다.
네 출처 남기는건 기본 예의죠 ^~^ 감사합니다!
^^