Skip to content

OpenGL

OpenGL의 상세 분야

OpenGL 3.3 Reference

  • glActiveTexture
  • glAttachShader
  • glBeginConditionalRender
  • glBeginQuery
  • glBeginTransformFeedback
  • glBindAttribLocation
  • glBindBuffer
  • glBindBufferBase
  • glBindBufferRange
  • glBindFragDataLocation
  • glBindFragDataLocationIndexed
  • glBindFramebuffer
  • glBindRenderbuffer
  • glBindSampler
  • glBindTexture
  • glBindVertexArray
  • glBlendColor
  • glBlendEquation
  • glBlendEquationSeparate
  • glBlendFunc
  • glBlendFuncSeparate
  • glBlitFramebuffer
  • glBufferData
  • glBufferSubData
  • glCheckFramebufferStatus
  • glClampColor
  • glClear
  • glClearBuffer
  • glClearColor
  • glClearDepth
  • glClearStencil
  • glClientWaitSync
  • glColorMask
  • glCompileShader
  • glCompressedTexImage1D
  • glCompressedTexImage2D
  • glCompressedTexImage3D
  • glCompressedTexSubImage1D
  • glCompressedTexSubImage2D
  • glCompressedTexSubImage3D
  • glCopyBufferSubData
  • glCopyTexImage1D
  • glCopyTexImage2D
  • glCopyTexSubImage1D
  • glCopyTexSubImage2D
  • glCopyTexSubImage3D
  • glCreateProgram
  • glCreateShader
  • glCullFace
  • glDeleteBuffers
  • glDeleteFramebuffers
  • glDeleteProgram
  • glDeleteQueries
  • glDeleteRenderbuffers
  • glDeleteSamplers
  • glDeleteShader
  • glDeleteSync
  • glDeleteTextures
  • glDeleteVertexArrays
  • glDepthFunc
  • glDepthMask
  • glDepthRange
  • glDetachShader
  • glDisable
  • glDisableVertexAttribArray
  • glDisablei
  • glDrawArrays
  • glDrawArraysInstanced
  • glDrawBuffer
  • glDrawBuffers
  • glDrawElements
  • glDrawElementsBaseVertex
  • glDrawElementsInstanced
  • glDrawElementsInstancedBaseVertex
  • glDrawRangeElements
  • glDrawRangeElementsBaseVertex
  • glEnable
  • glEnableVertexAttribArray
  • glEndConditionalRender
  • glEndQuery
  • glEndTransformFeedback
  • glFenceSync
  • glFinish
  • glFlush
  • glFlushMappedBufferRange
  • glFramebufferRenderbuffer
  • glFramebufferTexture
  • glFramebufferTextureLayer
  • glFrontFace
  • glGenBuffers
  • glGenFramebuffers
  • glGenQueries
  • glGenRenderbuffers
  • glGenSamplers
  • glGenTextures
  • glGenVertexArrays
  • glGenerateMipmap
  • glGet
  • glGetActiveAttrib
  • glGetActiveUniform
  • glGetActiveUniformBlock
  • glGetActiveUniformBlockName
  • glGetActiveUniformName
  • glGetActiveUniformsiv
  • glGetAttachedShaders
  • glGetAttribLocation
  • glGetBufferParameter
  • glGetBufferPointerv
  • glGetBufferSubData
  • glGetCompressedTexImage
  • glGetError
  • glGetFragDataIndex
  • glGetFragDataLocation
  • glGetFramebufferAttachmentParameter
  • glGetMultisample
  • glGetProgram
  • glGetProgramInfoLog
  • glGetQueryObject
  • glGetQueryiv
  • glGetRenderbufferParameter
  • glGetSamplerParameter
  • glGetShader
  • glGetShaderInfoLog
  • glGetShaderSource
  • glGetString
  • glGetSync
  • glGetTexImage
  • glGetTexLevelParameter
  • glGetTexParameter
  • glGetTransformFeedbackVarying
  • glGetUniform
  • glGetUniformBlockIndex
  • glGetUniformIndices
  • glGetUniformLocation
  • glGetVertexAttrib
  • glGetVertexAttribPointerv
  • glHint
  • glIsBuffer
  • glIsEnabled
  • glIsFramebuffer
  • glIsProgram
  • glIsQuery
  • glIsRenderbuffer
  • glIsSampler
  • glIsShader
  • glIsSync
  • glIsTexture
  • glIsVertexArray
  • glLineWidth
  • glLinkProgram
  • glLogicOp
  • glMapBuffer
  • glMapBufferRange
  • glMultiDrawArrays
  • glMultiDrawElements
  • glMultiDrawElementsBaseVertex
  • glPixelStore
  • glPointParameter
  • glPointSize
  • glPolygonMode
  • glPolygonOffset
  • glPrimitiveRestartIndex
  • glProvokingVertex
  • glQueryCounter
  • glReadBuffer
  • glReadPixels
  • glRenderbufferStorage
  • glRenderbufferStorageMultisample
  • glSampleCoverage
  • glSampleMaski
  • glSamplerParameter
  • glScissor
  • glShaderSource
  • glStencilFunc
  • glStencilFuncSeparate
  • glStencilMask
  • glStencilMaskSeparate
  • glStencilOp
  • glStencilOpSeparate
  • glTexBuffer
  • glTexImage1D
  • glTexImage2D
  • glTexImage2DMultisample
  • glTexImage3D
  • glTexImage3DMultisample
  • glTexParameter
  • glTexSubImage1D
  • glTexSubImage2D
  • glTexSubImage3D
  • glTransformFeedbackVaryings
  • glUniform
  • glUniformBlockBinding
  • glUnmapBuffer
  • glUseProgram
  • glValidateProgram
  • glVertexAttrib
  • glVertexAttribDivisor
  • glVertexAttribPointer
  • glViewport
  • glWaitSync

OpenGL(Open Graphics Library, 오픈지엘)은 1992년 실리콘 그래픽스사에서 만든 2차원 및 3차원 그래픽스 표준 API 규격으로, 프로그래밍 언어 간 플랫폼 간의 교차 응용 프로그래밍을 지원한다. 이 API는 약 250여개 가량의 함수 호출을 이용하여 단순한 기하도형에서부터 복잡한 삼차원 장면을 생성할 수 있다.

OpenGL은 현재 CAD, 가상현실, 정보시각화, 비행 시뮬레이션 등의 분야에서 활용되고 있다. 또한 컴퓨터 게임 분야에서도 널리 활용되고 있으며, 마이크로소프트사의 Direct3D와 함께 컴퓨터 그래픽 세계를 양분하고 있다. Direct3D와는 달리, 표준안이 여러 관련 업체의 토론과 제안으로 이루어지기에 버전 업데이트는 느린 편이다. OpenGL을 사용하여 개발된 대표적인 게임은 이드 소프트웨어의 퀘이크 둠3 시리즈이다. 현재 비영리 기술 컨소시엄인 크로노스 그룹에 의하여 관리되고 있다.

OpenGL Reference Guide

OpenGL Object

Rendering pipeline

OpenGL Shading Language

  • Buffer Objects
    • Vertex Buffer Objects
    • Uniform Buffer Objects
    • Shader Storage Buffer Objects
    • Pixel Buffer Objects
    • Atomic Counters
    • Buffer Object Streaming
  • Vertex Array Objects
  • Textures
    • Texture Storage
    • Image formats
    • Sampler Objects
    • Cubemap Textures
    • Array Textures
    • Multisample Textures
    • Rectangle Textures
    • 3D Textures
    • Buffer Textures
    • Texture Views
  • Asynchronous query objects
  • Framebuffer Objects
    • Default Framebuffer
    • Renderbuffer Objects
  • Unconventional objects:
    • Sync Objects
    • Shader and program objects
  • Vertex Specification
    • Vertex Rendering
    • Primitive
  • Vertex Processing
    • Vertex Shader
    • Tessellation
    • Geometry Shader
  • Vertex Post-Processing
    • Transform Feedback
  • Primitive Assembly
    • Face Culling
  • Rasterization
  • Fragment Shader
  • Per-Sample Processing
    • Depth Test
    • Blending
  • The core language
  • Shader compilation
    • Introspection
  • Variable types
    • Type qualifiers
    • Layout qualifiers
    • Uniform variables
    • Sampler variables
  • Built-in variables
  • Interface blocks
  • Shader stages:
    • Vertex Shader
    • Tessellation
    • Geometry Shader
    • Fragment Shader
    • Compute Shader
  • Other shading languages

Quick Reference Cards

The OpenGL 4.3 Quick Reference Guide (including GLSL 4.30)
http://www.khronos.org/files/opengl43-quick-reference-card.pdf
Opengl43-quick-reference-card.pdf
The OpenGL 4.2 Quick Reference Guide (including GLSL 4.20)
http://www.khronos.org/files/opengl42-quick-reference-card.pdf
Opengl42-quick-reference-card.pdf
The OpenGL 3.2 Quick Reference Guide (including GLSL 1.50)
http://www.khronos.org/files/opengl-quick-reference-card.pdf
Opengl32-quick-reference-card.pdf

카테고리별 함수 기능의 간략한 설명

OpenGL 함수 리스트와 그 기능에 대하여 설명한다.

WGL

  • wglCreateContext(): 랜더링 컨텍스트를 생성한다.
  • wglDeleteContext(): 랜더링 컨텍스트를 삭제한다.
  • wglMakeCurrent(): 현재 랜더링 컨텍스트를 설정한다.
  • wglGetProcAddress(): 확장함수 포인터를 리턴한다.
  • wglUseFontBitmap(): 현재 선택된 GDI폰트에 대해 OpenGL디스플레이 리스트를 만든다.
  • wgluseFontOutlines(): 현재 외곽선 글꼴과 같은 것에 디스플레이 리스트를 만든다.

GLUT

  • glutTimerFunc(): 지정된 시간후에 지정된 함수를 한번 호출한다. 다시 호출할려면 함수를 재호출

픽셀형식

  • ChoosePIxelFormat(): 가장 근접한 픽셀형식을 결정한다.
  • SetPixelFormat(): 픽셀형식을 디바이스 컨텍스트에 설정한다.

화면설정

  • ChangeDisplaySetting(): 전체화면으로 바꾼다.
  • SwapBuffer(): 후면버퍼를 전면버퍼로 교체
  • glClear(): 화면과 버퍼를 지운다.
  • glClearColor(): 화면배경 색상을 설정한다.

그리기

  • glBegin(): 기본도형 그리기를 시작한다.
  • glEnd(): 기본도형 그리기를 마친다.
  • glVertex[2,3,4][d,f,i,s]v: 정점을 지정한다.
  • glColor[3,4]b,d,f,i,s,f: 색을 지정한다.

  • glPointSize(): 점의 크기를 변경한다.

  • glLineWidth(): 선의 굵기를 변경한다.
  • glLineStipple(): 점선패턴을 설정한다.

다각형

  • glPolygonMode(): 전면, 후면의 다각형 그리기방식(점,선,면그리기)를 설정한다.
  • glCullFac(): 면을 제거한다.
  • glFrontFace(): 전면을 변경한다.
  • glEdgeFlag(): 변을 숨긴다. 정점지정중에 사용한다.
  • glPolygonStipple(): 다각형 패턴설정

기타 도형 그리기

  • glRectf(): 사각형을 그린다.
  • auxSolidCube(): 정육면체를 그린다.
  • auxSolidShpere(): 구를 그린다.
  • auxSolidTorus(): 원환을 그린다.

상태알기

  • glGetString(): OpenGL의 버전, 확장들의 목록을 알아낸다.
  • glGetBooleanv(): GLboolean 타입의 상태를 알아낸다.
  • glGetDoublev(): GLdouble 타입의 상태를 알아낸다.
  • glGetFloatv(): GLfloat 타입의 상태
  • glGetIntegerv(): GLint 타입의 상태
  • glEnable(): 기능을 활성화 시킨다.
  • glDisable(): 기능을 비활성화 시킨다.

행렬

  • glMatrixMode(): 현재 행렬을 설정한다.
  • glLoadIdentity(): 현재의 행렬을 단위행렬로 만든다.
  • glLoadMatrixf,d: 지정된 행렬을 최상위 행렬스택에 로드한다.
  • glMultMatrixf,d: 현재 행렬과 지정된 행렬을 곱한다.

스택

  • glPushAttrib(): 현재 설정을 임시 저장한다.
  • glPopAttrib(): 이전설정을 복원한다.

조망변환

  • gluLookAt(): 카메라의 위치와 방향을 설정한다.

모델링변환

  • glRotatef,d: 방향 설정.
  • glTranslatef,d: 위치 설정.
  • glScalef,d: 확대, 축소.

투영

  • glOrtho(): 범위가 정해진 직교투영
  • gluOrth2D: 범위가 -1 ~ 1 인 직교투영
  • glFrustum(): 비대칭 절두체 원근투영
  • gluPerspective(): 원근투영
  • glViewport(): 뷰포트를 설정한다.

셰이딩

  • glshadeModel(): 셰이딩방식을 설정한다.

조명

  • glMaterialf,i,fv,iv: 표면재질설정.
  • glLightf,i,fv,iv: 광원설정.
  • glColorMaterial(): 색상추적. glColor로 지정된 색이 재질 속성으로 설정되게 한다.
  • glLightModelf,i,fv,iv: 조명 모델을 설정한다.
  • glNormal3b,d,f,i,s: 정규화된 법선벡터를 설정한다.

혼합

  • glBlendFunc(): 원본과 대상의 혼합을 설정

깊이

  • glDepthMask(): 깊이 버퍼모드(읽기전용, 쓰기)를 설정한다.

비트맵

  • glRasterPos[2,3,4]s,i,f,d: 비트맵이나 이미지가 그려질 위치를 설정한다. 좌측하단부터 그린다.
  • glBitmap(): 비트맵을 그린다.
  • glDrawPixels(): 픽셀맵을 그린다.
  • glReadPixels(): 픽셀을 읽어온다.
  • glCopyPixes(): 화면데이터를 복사한다.
  • glPixelZoom(): 이미지를 확대, 축소, 뒤집는다.
  • glPixelStorei(): 픽셀 저장방식을 설정한다.
  • auxDIBImageLoad(): DIB이미지를 로드한다.
  • AUX_RGBImageRec: auxDIBImageLoad로 로드된 이미지데이터를 저장하는 구조체

텍스쳐

Texture 관련 함수 목록 정리

  • glGenTextures: 텍스쳐 이름을 생성한다.
  • glDeleteTexture: delete named textures.
  • glBindTexture: 텍스쳐 이름을 텍스쳐 데이터와 연결한다.
  • glTexSubImage2D: specify a two-dimensional texture subimage.
  • glTexParameter (f,i,fv,iv): 텍스쳐의 필터링방식을 설정한다.
  • glTexEnvi: 텍스쳐가 입혀질때 텍스쳐의 색상들과 기존의 픽셀 색상들과의 관계를 설정한다.
  • glTexImage2D: 2D 이미지를 텍스쳐로 메모리에 로드한다.
  • glTexImage1D: 1D 이미지를 텍스쳐로 메모리에 로드한다.
  • glTexCoord2 (f,fv): 텍스쳐 좌표를 설정한다.
  • gluBuild2DMipmaps: 밉맵을 자동생성 한다.
  • glTexGen (d,f,i,v,fv,iv): 텍스쳐 좌표들을 자동적으로 생성한다.
  • glTexParameteri: OpenGL BMP texture 로딩.

다중 텍스쳐링

  • PFNGLMULTITEXCOORD2FARBPROC: glMultiTexCoord2fARB 다중텍스쳐링을 위한 텍스트 좌표를 지정한다. (함수포인터를 얻어서 사용)
  • PFNGLACTIVETEXTUREARBPROC: glActiveTextureARB 텍스쳐 단위를 설정한다. (함수포인터를 얻어서 사용)
  • PFNGLCLIENTACTIVETEXTUREARBPROC: glClientActiveTextureARB 정점 배열을 위한 텍스쳐 단위를 활성화한다. (함수포인터를 얻어서 사용)

디스플레이 리스트

  • glGenLists(): 지정된 개수의 디스플레이 리스트를 만든다
  • glIsList(): 목록이름의 유효여부를 알아낸다.
  • glNewList(): 디스플레이 리스트의 명령기록을 시작한다.
  • glEndList(): 디스플레이 리스트의 명령기록을 끝낸다.
  • glCallList(): 디스플레이 리스트을 실행한다.
  • glCallLists(): 여러개의 디스플레이 리스트를 실행한다.
  • glListName(): 지정된 위치부터 명령을 실행한다.
  • glDeleteLists(): 디스플레이 리스트를 해제한다.
  • glListBase()

정점배열

  • glEnableClientState(): 정점배열을 활성화한다.
  • glDisableClientState(): 정점배열을 비활성화한다.
  • glColorPointer(): 색상배열을 사용한다
  • glEdgeFlagPointer(): 가장자리 플래그들의 배열을 지정한다.
  • glIndexPointer(): 팔레트 모드에서 색상색인들을 담은 배열을 지정한다.
  • glNormalPointer(): 각 정점의 법선벡터를 담은 배열을 지정한다.
  • glTexCoordPointer(): 각 정점의 텍스쳐 좌표들을 담은 배열을 지정한다.
  • glVertexPointer(): 정점의 위치 좌표들을 담은 배열을 지정한다.
  • glDrawArrays(): 현재 활성화된 배열의 각 정점들을 차례로 사용해서 지정된 기본도형을 그린다.
  • glDrawElements(): 색인배열을 이용하여 임의의 원소들을 임의의 순서대로 사용하여 기본도형을 그린다.
  • glDrawRangeElements(): 색인배열의 특정 범위만 사용하여 기본도형을 그린다.
  • glArrayElement(): 정점배열의 특정한 하나의 원소만 사용하도록 한다.
  • PFNGLLOCKARRAYSEXTPROC: glLockArraysEXT 배열을 잠근다. (함수포인터를 얻어서 사용.)
  • PFNGLUNLOCKARRAYSEXTPROC: glUnlockArraysEXT 배열 잠금을 해제한다. (함수포인터를 얻어서 사용.)

Version history

  • 1.1: 텍스쳐 객체
  • 1.2: 3 차원 텍스처, BGRA and packed pixel formats
  • 1.3: Multitexturing, 멀티 샘플링, 텍스처 압축
  • 1.4: 깊이 텍스처
  • 1.5: 버텍스 버퍼 개체 (VBO), Occlusion Queries
  • 2.0: GLSL 1.1, MRT로, 두 가지 질감의 비 파워, 포인트 스프 라이트, stencil
  • 2.1: GLSL 1.2, 픽셀 버퍼 개체 (PBO), sRGB 텍스처
  • 3.0: GLSL 1.3, 질감 배열, 조건부 렌더링, 프레임 버퍼 개체 (FBO)
  • 3.1: GLSL 1.4, Instancing, 텍스쳐 버퍼 개체, 통일 버퍼 개체, Primitive restart
  • 3.2: GLSL 1.5, 기하학 셰이더, 멀티 샘플링 텍스처
  • 3.3: GLSL Backports as much functionality possible from the OpenGL specification
  • 4.0: GLSL 에 GPU와 모자이크 세공 4.00, 64비트 정밀 쉐이더

OpenGL 3차원 컴퓨터 그래픽스 강좌

PART 01. 3차원 컴퓨터 그래픽스 원론

  • Chapter 01. OpenGL과 Modeling: Chapter_01_-_OpenGL,_Modeling.pdf
  • Chapter 02. Callback Programming: Chapter_02_-_Callback_Programming.pdf
  • Chapter 03. 모델 변환과 시점 변환: Chapter_03_-_Transformation,_Camera.pdf
  • Chapter 04. 투영(Projection)과 Viewport 변환: Chapter_04_-_Projection,_Viewport.pdf
  • Chapter 05. 조명(Lighting)과 음영(Shading): Chapter_05_-_Lighting,_Shading.pdf
  • Chapter 06. Texture Mapping: Chapter_06_-_Texture_Mapping.pdf

PART 02. 3차원 컴퓨터 그래픽스 응용

  • Chapter 07. 그림자(Shadow): Chapter_07_-_Shadow.pdf
  • Chapter 08. Particle Systems: Chapter_08_-_Particle_Systems.pdf
  • Chapter 09. 유용한 기능들: Chapter_09_-_Utility.pdf
  • Chapter 10. Motion Animation: Chapter_10_-_Motion_Animatioin.pdf

PART 03. 고급 이론 및 확장

  • Chapter 11. 곡선(Curves) 및 곡면(Surfaces): Chapter_11_-_Curves,_Surfaces.pdf
  • Chapter 12. OpenGL과 GUI: Chapter_12_-_OpenGL_GUI.pdf

Coordinates system

Coordinates_system_-_OpenGL_and_DirectX.png

Select a graphic device

NVidia provided an extension called WGL_nv_gpu_affinity. I'm not sure if this is still available and whether it works as you would like.

GLUT

GLUT was originally written by Mark Kilgard to support the sample programs in the second edition OpenGL 'RedBook'. Since then, GLUT has been used in a wide variety of practical applications because it is simple, widely available and highly portable.

Download
http://www.opengl.org/resources/libraries/glut/glut_downloads.php

FreeGLUT

freeglut is an open source alternative to the OpenGL Utility Toolkit (GLUT) library. GLUT (and hence freeglut) allows the user to create and manage windows containing OpenGL contexts on a wide range of platforms and also read the mouse, keyboard and joystick functions. freeglut is intended to be a full replacement for GLUT, and has only a few differences.

Since GLUT has gone into stagnation, freeglut is in development to improve the toolkit. It is released under the X Consortium license.

Downloading Man Page Sources

The Docbook XML source for the man pages is available for anonymous checkout in Khronos' Subversion server, and you can build a man page distribution of your own using open source tools. See the OpenGL.org technical Wiki pages describing the XML Toolchain and Man Pages for more information.

Troubleshooting

Not found libGL.so

Ubuntu에서 아래와 같은 에러 메시지가 출력될 수 있다.

gcc: error: /usr/lib/x86_64-linux-gnu/libGL.so: No such file or directory

이 경우 아래와 같이 패키지를 설치한다.

sudo apt-get install libgl1-mesa-dev

See also

Libraries

Favorite site

Guide

Tutorial

Tutorial: C/SDL OpenGL

Multithreaded Rendering on OpenGL

References


  1. Opengl32-quick-reference-card.pdf 

  2. Soenlab_com.7z - soenlab.com/lecture/library/opengl/opengl-8.htm 페이지의 OpenGL 공간변환에 대한 설명 참조 

  3. NVISION08-8MP_HDR.pdf 

  4. 3D_Graphics_with_OpenGL_-_The_Basic_Theory.pdf 

  5. Fragment shader compile success: Sdl2-opengl-sample.zip 

  6. Drawing_polylines_by_tessellation.pdf 

  7. Www_glprogramming_com_red.zip 

  8. Code download: https://code.google.com/p/opengl-tutorial-org/ 

  9. Nehe.gamedev.net.zip 

  10. Soenlab_com.7z 

  11. Modern_OpenGL_Guide.pdf