Rearrange, 정리하다.

아래의 사진은 제가 다니는 회사입니다. ㅡOㅡ; 회사가 시장바닦? ㅎㅎ 농담이구, 사실은 회사가 홍제역 쪽이고 회사를 나서면 바로 인왕시장이 있습니다. 바로 그 시장 안에 상인들을에게 밥을 파는 작은 식당 안에서 비빔밥을 주문하고, 식당 안에서 기다리며 헨폰으로 찍은 사진입니다. 이 식당이 얼마나 좋냐면…. 시장 상인을 대상으로 하는만큼, 아침 일찍 엽니다. 그리고 2,000원 짜리 백반이 나오는데 밥 한공기와 반찬 2개, 국 한그릇이 나오구요. 아침에 출근하면서 종종 먹고, 점심때도 가끔 가서 먹게 됩니다. 음식 맛이 편안합니다. 먹고 나면 속이 편하다니 그 음식 맛이 편한거죠.


아니… 다니는 회사 얘기를 잠시 하다가 시장에 있는 식당 이야기로 빠지는지 모를 노릇이지만, 여.하.튼…. 요즘 복잡합니다. 제 머리속이…. 전직장에서부터 지금까지 이것저것 머리속에 계획해 놓은 것들이 저를 복잡하게 만듭니다. 이 복잡함이 제 집중력을 저하시킵니다. 집중력이 저하되니 무기력해집니다. 그래서 오늘, 그 동안 계획했던 것들 몇가지를 사상적으로 정리하고자 합니다. 사상적으로 정리를 하면 그 사상적인 것에 대한 구체적 실행계획도 자연스레 제거가 될 것 같습니다.

무엇을 버리고 무엇을 얻을 것인가…. 버리지 않고서는 도무지 새로운 것을 수용할 내 머리나 가슴에 빈자리가 없는 것같습니다. 복잡하게 어질러져 버린 것을 정리하면서 버릴것은 버리고… 그 빈자리에 정말 중요한 것을 놓도록 해야겠습니다.

OpenGL Shader – 5

OpenGL Setup for GLSL – Overview
원문: http://www.lighthouse3d.com/opengl/glsl/index.php?ogloverview

GLSL을 위한 OpenGL 설정이라는 이 섹션은  두개의 버텍스 쉐이더와 프레그먼트 쉐이더에 대해 들어봤다고 가정을 하고 진행되며 OpenGL 어플리케이션에서 이 쉐이더들을 사용기 위한 내용이다. 만약 아직까지 직접 쉐이더를 작성해보지 않았다면, 인터넷으로부터 쉐이더를 구할 많은 사이트가 있으니 참고하길 바란다. 참고 사이트는 http://www.3dshaders.com/home/가 있으며 쉐이더 개발을 위한 툴로는  Shader Designer와 RenderMonkey (원문에서는 링크가 깨져있으며 구글에서 검색해서 현재 사용가능한 사이트의 URL을 검색해보길 바란다)가 있고, 이 툴에는 매우 많은 쉐이더 예제가 있다.

OpenGL을 보면, 쉐이더 프로그램을 설정하는 것은 C 프로그램을 작성하는 흐름과 유사하다. 각 쉐이더는 C 모듈과 유사하며 이 모듈은 C언어에서 처럼 개별적으로 컴파일되어져야하고, 또 정확히 C에서처럼 프로그램에 링크되여야 한다.

ARB 확장들과 OpenGL이 이 섹션에서 사용된다. 만약에 OpenGL의 버전이 1.1 이상을 사용해 보지 않았거나 확장이 처음이라면, GLEW를 보길바란다. GLEW는 확장기능과 OpenGL 최신 함수 사용를 바로 사용할 수 있도록 해준다.

만약에 아직 OpenGL 2.0을 지원하지 않는다면, 확장을 이용해야 하는데, 필요한 확장은 아래와 같다.

  • GL_ARB_fragment_shader
  • GL_ARG vertex_shader

아래는 GLEW를 사용하는 GLUT 프로그램의 간단한 예제인데, 위의 두개의 확장을 사용할 수 있는지 검토하는 코드이다.

#include 
#include ;
	
void main(int argc, char **argv) {
    glutInit(&argc, argv);
		
    ...
	
    glewInit();
    if (GLEW_ARB_vertex_shader && GLEW_ARB_fragment_shader)
        printf("Ready for GLSL\n");
    else {
        printf("Not totally ready :( \n");
        exit(1);
    }
	
    setShaders();
	
    glutMainLoop();
}

OpenGL 2.0이 가능한지 검사하기 위해서 아래와 같은 코드를 사용한다.

#include 
#include 

void main(int argc, char **argv) {

    glutInit(&argc, argv);
		
    ...
	
    glewInit();
    if (glewIsSupported("GL_VERSION_2_0"))
        printf("Ready for OpenGL 2.0\n");
    else {
        printf("OpenGL 2.0 not supported\n");
        exit(1);
    }

    setShaders();
	
    glutMainLoop();
}

아래의 그림은 OpenGL 2.0의 함수로써 나타낸 쉐이더를 생성하는 단계를 나타내고 인데, 언급한 함수의 세부내용은 나중에 자세히 살펴보도록 하겠다.