본문 바로가기

Python/Library

[Python][Library] pyopengl

 

 

 

pyopengl : 2D, 3D 그래픽 라이브러리인 OpenGL을 Python으로 랩핑 한 것 
출처 : http://pyopengl.sourceforge.net/documentation/manual-3.0/index.html#GL
          https://www.khronos.org/registry/OpenGL-Refpages/es3.1/

 

 

■ OpenGL.GL

>> glClearColor

  • Purpose :  Color Buffer에 명확한 값을 지정한다.
  • Signature : glClearColor( red , green , blue , alpha )
  • Parameters : 
    Variables Type Optional defaults Description
    red  GLfloat X   rgb color에서의 red
    green  GLfloat X   rgb color에서의 green 
    blue GLfloat X   rgb color에서의 blue
    alpha  GLfloat X   투명도
  • return :
  • 실제 rgb color는 각 색별로 0~255 의 범위를 가지지만 parameter 지정 시에는 0~1 범위로 변환하여 입력한다. 따라서 0으로 갈 수록 해당 색이 영향이 없어지고 1로 갈수록 커진다.

 

>> glClear

  • Purpose : buffer를 지정된 mask 값으로 지운다.
  • Signature : glClear( mask )
  • Parameters : 
    Variables Type Optional defaults Description
    mask GL
    -bitfield
    X   buffer를 지우는데 사용될 mask의 비트 연산(Bitwise OR). 해당 값에 따라 어떤 버퍼를 지울 것인지 결정된다. | (파이프 문자)를 통해 여러 mask를 동시에 입력 가능하다.
  • return :
  • mask : Opengl에서 제공하는 상수(Constant)
    Signature Description
    GL_COLOR_BUFFER_BIT 색상 버퍼 (glClear함수에서는 최근 활성화 된 색상 버퍼를 지운다.)
    GL_DEPTH_BUFFER_BIT 깊이 버퍼
    GL_STENCIL_BUFFER_BIT 스텐실 버퍼
  • GL_ACCUM_BUFFER_BIT 상수는 opengl 3.0부터 사라졌다.

 

>> glUseProgram

  • Purpose :  현재 Rendering 상태의 일부로 입력받은 프로그램 Object를 설치한다.
  • Signature : glUseProgram( program )
  • Parameters : 
    Variables Type Optional defaults Description
    program  GLuint X   현재 Rendering 상태에서 실행될 프로그램의 handle 값.
  • return :
  •  

 

>> glDeleteProgram

  • Purpose :  프로그램을 삭제한다.
  • Signature : glDeleteProgram( program )
  • Parameters : 
    Variables Type Optional defaults Description
    program GLuint X   삭제 할 프로그램의 handle 값.
  • return :

 

>> glDrawArrays

  • Purpose :  최근에 바인딩 된 VAO를 통해 프리미티브(Primitives)를 렌더링 한다. 
  • Signature : glDrawArrays( mode, first, count )
  • Parameters : 
    Variables Type Optional defaults Description
    mode GLenum X   랜더링할 프리미티브의 종류를 명시.
    GL에서 제공하는 상수(constants)를 사용한다.
    first GLint  X   활성화된 Vertex data에서 시작 index 명시.
    count  GLsizei  X   랜더링 할 index 수를 명시. (vertex data의 갯수)
  • return :
  • mode 옵션
    Signature Description
    GL_POINTS 각 Vertex를 화면에 렌더링될 점으로 취급.
    GL_LINE_STRIP  각 Vertex이 선분으로 연결된 열린 연결 선 그림. 첫번째 Vertex과 마지막 Vertex은 자동으로 연결되지 않음.
    GL_LINE_LOOP  각 Vertex이 선분으로 연결된 닫힌 연결 선 그림. 첫번째 Vertex과 마지막 Vertex은 자동으로 연결됨.
    GL_LINES 각 Vertex 쌍을 별도의 선분으로 취급. 2개 이상의 Vertex 명시 필요.
    GL_LINE_STRIP_ADJACENCY  
    GL_LINES_ADJACENCY   
    GL_TRIANGLE_STRIP   
    GL_TRIANGLE_FAN   
    GL_TRIANGLES   Vertex의 각 트리플 세트를 단일 삼각형으로 취급. 개별 삼각형 프리미티브는 연결 되지 않음.
    GL_TRIANGLE_STRIP_ADJACENCY   
    GL_TRIANGLES_ADJACENCY   
    GL_PATCHES  
  • 해당 함수는 현재 활성화 된 Sahder, VAO 에 저장된(reference 된) Vertex Attribute 속성, BO의 Vertex Data를 사용하여 프리미티브를 랜더링 하고 screen 에 출력한다.

 

 

 

* Vertex Buffer Object(VBO) 와 Vertex Array Object(VAO)
  Vertex Buffer Object : 1차원 배열로 각 Vertex의 Attributes data 가 저장되는 개체.
  Vertex Array Object : Vertex Attribute Array가 저장되는 개체.
  예시) 삼각형의 VBO - 삼각형의 각 Vertex 의 위치, 색 데이터 등이 저장
          삼각형의 VAO - 위치 Attribute Array, 색 Attribute Array 등이 저장


[ 출처 : https://inhibitor1217.github.io/2019/04/20/webgl-vao.html ]

□ VAO ( Vertex Attribute Object )

  VAO는 각 Vertex Attribute Array 가 사용할 데이터(VBO)와 규칙( Shader )의 reference를 저장하지만 데이터를 직접 가지고 있지는 않는다. glVertexAttribPointer 함수를 통해 어떻게 VBO를 해석할지 최초 한번 지정 해 준 후 실제 오브젝트를 그려야 할때는 해당하는 VAO를 바인딩 해준 후 사용하면 된다.

>> glGenVertexArrays

  • Purpose :  VAO의 이름(ID)을 배열로 생성(Generate)한다.
  • Signature : glGenVertexArrays( n, arrays )
  • Parameters : 
    Variables Type Optional defaults Description
    n GLsizei X   생성할 VAO의 ID 수
    arrays GLu
    -int *
    None 생성된 VAO의 ID 가 저장될 배열 위치
  • return :
  • arrays 파라미터는 배열의 pointer 인데 python 에서는 pointer가 없다. 그럼 어떻게 쓴다는 건지 잘 모르겠다. arrays 파라미터에 그냥 배열을 넣어봤는데 배열 수 만큼 id가 생성 되는 것 같고 n 은 배열의 길이 만큼 지정을 해줘야 한다.
  • glGenVertexArrays 함수를 통해 생성된 id는 int형 정수 중 무작위로 생성된다. glDeleteVertexArrays 함수를 호출하여 지워야 한다.(자동으로 지워지거나 하지 않는다.) 한 번 생성된 id는 그 id를 삭제하더라도 동일한 id가 다시 생성되지 않는다.

 

>> glDeleteVertexArrays

  • Purpose :  VAO 삭제
  • Signature : glDeleteVertexArrays( n, arrays )
  • Parameters : 
    Variables Type Optional defaults Description
    n GLsizei X   삭제할 VAO의 수
    arrays GLu
    -int *
    X   삭제할 VAO의 ID 가 저장된 배열 위치
  • return :

 

>> glBindVertexArray

  • Purpose :  생성된 VAO를 GPU에 바인딩 한다.
  • Signature : glBindVertexArray( array )
  • Parameters : 
    Variables Type Optional defaults Description
    array  GLuint X   바인딩할 VAO 의 id.
  • return :
  • 쉽게 생각하면 지정된 VAO를 GPU에서 사용할 수 있도록 활성화 해주는 함수이다. 이 함수는 VAO의 Id가 glGenVertexArrays 통해 생성되어 있어야만 돌아간다.

 

>> glVertexAttribPointer

  • Purpose :  Vertex Attribute Data 배열을 정의 한다. ( Vertex Attribute Data를 어떻게 해석/사용 할것 인지 정의)
  • Signature : glVertexAttribPointer( index, size, type, nomalized, stride, pointer)
  • Parameters : 
    Variables Type Optional defaults Description
    index GLuint X   설정할 Vertex Attribute 의 index.
    (어떤 Vertex Attribute로 명시할 것인지 index로 지정)
    Vertex 데이터가 Vertex shader의 어떤 Vertex 속성에 연결되는지 명시. Vertex shader의 location 에 해당한다.
    size GLint X   Vertex Attribute 의 크기 명시. OpenGL에서는 한 속성당 4차원 벡터까지만 다루므로 최대값은 4이다.
    ex) 위치 속성의 경우 3차원 벡터이므로 3이 들어간다.
    type GL
    enum
    X   Vertex Attribute 의 데이터 타입 명시.
    GL에서 제공하는 상수(constants)를 사용한다.
    nomalized GLbool X   Vertex Attribute의 데이터 정규화 옵션. 데이터들이 양수 범위 안에 있을 경우 0~1, 음수 범위 안에 있을 경우 -1~1 사이로 정규화 한다.
    GL_TRUE : 정규화 진행 / GL_TRUE : 정규화 하지 않음
    stride GLsizei X   다음 Vertex Attribute 과의 거리.(byte)
    pointer const
    GL
    void *
    X   VBO에서 Vertex Attribute가 시작되는 위치.
  • return :
  • type 옵션
    Signature Description Signature Description
    GL_BYTE   GL_FLOAT   
    GL_UNSIGNED_BYTE   GL_DOUBLE   
    GL_SHORT    GL_FIXED   
    GL_UNSIGNED_SHORT    GL_INT_2_10_10_10_REV   
    GL_INT    GL_UNSIGNED_INT_2_10_10_10_REV   
    GL_UNSIGNED_INT    GL_UNSIGNED_INT_10F_11F_11F_REV  
    GL_HALF_FLOAT       
  • VBO 구조와 parameters 예시
  • 이 함수를 실행 하면 VAO에 OpenGL BUFFER에 현재 바인딩 되어 있는 VBO의 reference를 저장한다. 그러므로 함수 실행 전 BO 바인딩이 선행 되어야 한다.
  • 정리 하자면, 이 함수는 현재 바인딩 된 VBO를 어떻게 사용해야 하는지 규칙을 지정하고 Shader와 BO 간에 Vertex Attribute 구성을 연결하는 역할을 한다.

 

>> glEnableVertexAttribArray

  • Purpose :  Vertex Attribute Data 배열을 활성화 한다.
  • Signature : glEnableVertexAttribArray( index )
  • Parameters : 
    Variables Type Optional defaults Description
    index GLuint X   활성화 할 Vertex Attribute 의 index.
    (어떤 Vertex Attribute를 활성화 할  것인지 index로 지정)
    Vertex shader의 어떤 Vertex 속성을 활성화 할것인지 명시.
    Vertex shader에서 location 에 해당한다.
  • return :
  • 기본적으로 Vertex Attribute 모두 비활성화 되어 있으므로 사용전 꼭 활성화 시켜주어야 한다.

 

>> glDisableVertexAttribArray

  • Purpose :  Vertex Attribute Data 배열을 비활성화 한다.
  • Signature : glDisableVertexAttribArray( index )
  • Parameters : 
    Variables Type Optional defaults Description
    index GLuint X   비활성화 할 Vertex Attribute 의 index.
    (어떤 Vertex Attribute를 비활성화 할  것인지 index로 지정)
    Vertex shader의 어떤 Vertex 속성을 비활성화 할것인지 명시.
    Vertex shader에서 location 에 해당한다.

 

□ VBO ( Vertex Buffer Object )

  VBO 자체는 특별한 규칙 없는 1차원 배열이다. 다른 함수들을 통해 이 배열을 실제로 어떻게 이용할지 결정한다. ( ex) glVertexAttribPointer)

>> glGenBuffers

  • Purpose :  VBO의 이름(ID)을 배열로 생성(Generate)한다.
  • Signature : glGenBuffers( n, arrays )
  • Parameters : 
    Variables Type Optional defaults Description
    n GLsizei X   생성할 VBO의 ID 수
    arrays  GLu
    -int *
    None 생성된 VBO의 ID 가 저장될 배열 위치
  • return :
  • glGenBuffers 함수를 통해 생성된 id는 int형 정수 중 무작위로 생성된다. glDeleteBuffers함수를 호출하여 지워야 한다.(자동으로 지워지거나 하지 않는다.) 한 번 생성된 id는 그 id를 삭제하더라도 동일한 id가 다시 생성되지 않는다.

 

>> glDeleteBuffers

  • Purpose :  VBO 삭제
  • Signature : glDeleteBuffers( n, arrays )
  • Parameters : 
    Variables Type Optional defaults Description
    n GLsizei X   삭제할 VBO의 수
    arrays  GLu
    -int *
    X   삭제할 VBO의 ID 가 저장된 배열 위치
  • return :

 

>> glBindBuffer

  • Purpose :  생성된 VBO를 GPU에 바인딩 한다.
  • Signature : glBindBuffer( target, buffer )
  • Parameters : 
    Variables Type Optional defaults Description
    target GLenum X   VBO가 바인딩 되는 target 지정.
    GL에서 제공하는 상수(constants)를 사용한다.
    buffer  GLuint X   바인딩할 VBO ID.
  • return :
  • target 옵션
    Variables Description Variables Description
    GL_ARRAY_BUFFER    GL_PIXEL_PACK_BUFFER   
    GL_ATOMIC_COUNTER_BUFFER    GL_PIXEL_UNPACK_BUFFER   
    GL_COPY_READ_BUFFER    GL_QUERY_BUFFER   
    GL_COPY_WRITE_BUFFER    GL_SHADER_STORAGE_BUFFER   
    GL_DRAW_INDIRECT_BUFFER    GL_TEXTURE_BUFFER  
    GL_DISPATCH_INDIRECT_BUFFER    GL_TRANSFORM_FEEDBACK_BUFFER   
    GL_ELEMENT_ARRAY_BUFFER    GL_UNIFORM_BUFFER   

 

>> glBufferData

  • Purpose :  VBO의 Data Store 생성 및 Initialize
  • Signature : glBufferData( target , size , data , usage )
  • Parameters : 
    Variables Type Optional defaults Description
    target  GLenum X   VBO target 지정.
    GL에서 제공하는 상수(constants)를 사용한다.
    size  GLsizeiptr None 생성될 VBO의 Data Store의 bytes 사이즈.
    data  const
    GLvoid *
    None VBO Data Store에 복사할 데이터의 pointer.
    명시하지 않은 경우 데이터가 복사 되지 않는다.
    usage  GLenum X   VBO Data Store의 사용 패턴 지정. (예상되는)
    GL에서 제공하는 상수(constants)를 사용한다.
  • return :
  • target 옵션
    Variables Description Variables Description
    GL_ARRAY_BUFFER    GL_PIXEL_PACK_BUFFER   
    GL_ATOMIC_COUNTER_BUFFER    GL_PIXEL_UNPACK_BUFFER   
    GL_COPY_READ_BUFFER    GL_QUERY_BUFFER   
    GL_COPY_WRITE_BUFFER    GL_SHADER_STORAGE_BUFFER   
    GL_DRAW_INDIRECT_BUFFER    GL_TEXTURE_BUFFER  
    GL_DISPATCH_INDIRECT_BUFFER    GL_TRANSFORM_FEEDBACK_BUFFER   
    GL_ELEMENT_ARRAY_BUFFER    GL_UNIFORM_BUFFER   
  • usage 옵션
    Variables Description Variables Description
    GL_STREAM_DRAW  Data가 그려질 때마다 변경 GL_STATIC_COPY   
    GL_STREAM_READ    GL_DYNAMIC_DRAW  Data가 자주 변경
    GL_STREAM_COPY    GL_DYNAMIC_READ   
    GL_STATIC_DRAW  Data가 거의 변경되지 않음 GL_DYNAMIC_COPY   
    GL_STATIC_READ       
  • Vertex Data를 현재 바인딩 된 VBO 객체에 복사한다.

 

■ OpenGL.GL.Shaders

>> compileProgram

    • Purpose :  Shader를 붙이고 검증 할 수 있는 새로운 프로그램을 생성한다.
    • Signature : compileProgram( shaders , named )
    • Parameters : 
      Variables Type Optional defaults Description
      shaders    X   생성된 프로그램에 붙일 임의의 수의 Shader. ',' 문자로 여러개의 Shader를 붙일 수 있다.
      named       
    • return :
    • shaders parameter 에는 compileShader 함수를 통해 컴파일 된 shader가 들어온다.
    • shaders 인자가 유효성 검증에 통과하면 해당 shader 개체는 GL에서 삭제되고 검증 혹은 연결에 실패 하면 RuntimeError 가 발생한다.

 

>> compileShader

  • Purpose :  주어진 shaderType 에따라 shader source 가 컴파일 된다.
  • Signature : compileShader( shadersource, shaderType )
  • Parameters : 
    Variables Type Optional defaults Description
    shadersource   X   GLSL 로 shader를 구현한 소스 코드.
    shaderType GLenum X   작성된 소스코드의 shader 타입 명시.
    GL에서 제공하는 상수(constants)를 사용한다.
    GL_VERTEX_SHADER / GL_FRAGMENT_SHADER
  • return :

 

'Python > Library' 카테고리의 다른 글

[Python][Library] pygame  (0) 2021.10.10
[Python][Library] Intro  (0) 2021.10.10