2018년 3월 11일 일요일

2 나의 첫 번째 OpenGL 프로그램


41P
  1. glClearBufferfv()
    1. void glClearBufferfv(GLenum buffer,
      GLint drawbuffer,
      const GLfloat * value);
      https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glClearBuffer.xhtml
    2. fv 접미사?
      1. floating point(F)를 갖는 vector(V). (OpenGL에서는 배열포인터를 벡터와 동일한 의미로 혼용)
    3. Example
      1. static const GLfloat green[] = {0.0f, 1.0f, 0.0f, 1.0f};
        glClearBuffer(GL_COLOR, 0, green);
      2. 윈도우 색을 Green 으로 설정
      3. buffer를 value로 Clear
      4. value는 RGBA 이다.
      5. drawBuffer는 지울 출력 버퍼가 여럿일 때.
42P

  1. Shader
    1. OpenGL 에서는 GLSL로 작성
    2. Vertex Shader Example
      1. #version 430 core

        void main(void)
        {
            gl_Position = vec4(0.0, 0.0, 0.5, 1.0);
        }
        1. 쉐이더 버전 4.3, core 프로파일만 사용
        2. gl_로 시작하는 모든 변수는 OpenGL 일부며, 쉐이더간 연결 역할
        3. gl_Position은 vertex의 출력 위치를 나타냄
        4. 위 좌표는 vertex가 clip space?의 중앙에 위치하도록 함
    3. Fragment Shader Example
      1. #version 430 core

        out vec4 color;

        void main(void)
        {
            color = vec4(0.0, 0.8, 1.0, 1.0);
        }
        1. out 키워드로 color를 출력변수로 선언
        2. RGBA

46P
  1. VAO : Vertex Array Object
    1. OpenGL 파이프라인의 Vertex Fetch 스테이지를 나타내는 객체
    2. 입력을 버텍스 쉐이더에 공급하기 위해 사용
    3. 출력 전 1회 수행
    4. 생성
      1. glGenVertexArrays()
        1. VAO를 context에 attach
        2. void glGenVertexArrays(GLsizei n, GLuint *arrays);
          https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glGenVertexArrays.xhtml
      2. glBindVertexArray()
        1. void glBindVertexArray(GLuint array);
          https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glBindVertexArray.xhtml
    5. Example
      1. GLuint vertex_array_object_;
        glGenVertexArrays(1, &vertex_array_object_);
        glBindVertexArray(vertex_array_object_);
      2. glDeleteVertexArrays(1, &vertex_array_object_);
47P
  1. glDrawArrays()
    1. void glDrawArrays(GLenum mode, GLint first, GLsizei count);
      https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glDrawArrays.xhtml
    2. vertex들을 OpenGL 파이프라인에 보낸다.
    3. mode : 어떤 타입의 Primite를 렌더링 할 것인지 결정.
      1. GL_POINTSGL_LINE_STRIPGL_LINE_LOOPGL_LINESGL_LINE_STRIP_ADJACENCYGL_LINES_ADJACENCYGL_TRIANGLE_STRIPGL_TRIANGLE_FAN,GL_TRIANGLESGL_TRIANGLE_STRIP_ADJACENCYGL_TRIANGLES_ADJACENCY and GL_PATCHES
    4. first : starting index
    5. count : number of indices (렌더링할 버텍스 개수)
  2. glPointSize()
    1. void glPointSize(GLfloat size);
      https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glPointSize.xml
    2. point를 한 픽셀보다 더 크게 그리도록
    3. size : pixel
50P
  1. vertex shader 안에서 여러 버텍스 생성하기
    1. {
          const vec4 = vertices[3] = vec4[3](vec4(~), vec4(~), vec4(~));
          gl_Position = vertices[gl_VertexID];
      }
      1. gl_vertexID
        1. 해당 시점에 처리 될 vertex index.
        2. glDrawArrays()에 입력으로 들어간 첫 번째 인자값부터 시작해서 count만큼 증가

댓글 없음:

댓글 쓰기