OpenGL
|
|
OpenGL(Open Graphics Library, 오픈지엘)은 1992년 실리콘 그래픽스사에서 만든 2차원 및 3차원 그래픽스 표준 API 규격으로, 프로그래밍 언어 간 플랫폼 간의 교차 응용 프로그래밍을 지원한다. 이 API는 약 250여개 가량의 함수 호출을 이용하여 단순한 기하도형에서부터 복잡한 삼차원 장면을 생성할 수 있다.
OpenGL은 현재 CAD, 가상현실, 정보시각화, 비행 시뮬레이션 등의 분야에서 활용되고 있다. 또한 컴퓨터 게임 분야에서도 널리 활용되고 있으며, 마이크로소프트사의 Direct3D와 함께 컴퓨터 그래픽 세계를 양분하고 있다. Direct3D와는 달리, 표준안이 여러 관련 업체의 토론과 제안으로 이루어지기에 버전 업데이트는 느린 편이다. OpenGL을 사용하여 개발된 대표적인 게임은 이드 소프트웨어의 퀘이크 둠3 시리즈이다. 현재 비영리 기술 컨소시엄인 크로노스 그룹에 의하여 관리되고 있다.
OpenGL Reference Guide
|
|
|
Quick Reference Cards
- OpenGL 4.4 Reference Card
- OpenGL 4.3 Reference Card
- OpenGL 4.2 Reference Card
- OpenGL 4.2 (Core Profile) Reference Card
- OpenGL 4.1 Reference Card
- OpenGL 4.0 Reference Card
- OpenGL 3.2 Reference Card 1
- 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
카테고리별 함수 기능의 간략한 설명
- http://cafe414.daum.net/c21/bbs_search_read?grpid=nDQL&fldid=ATP6&datanum=1&contentval=&docid=nDQLATP6120101208175712
- http://dink8621.tistory.com/75
- http://cafe.naver.com/houdinilife/214
- http://skyswim42.egloos.com/3558397
- glFinish vs glFlush 차이점
- Android Opengl ES 2.0: glDrawArrays 와 glDrawElements 사용법
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(): 카메라의 위치와 방향을 설정한다.
모델링변환
투영
- 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
- Stackoverflow - Select a graphic device in windows + opengl
- Stackoverflow - OpenGL rendering in Windows XP with multiple video cards
- HD is now 8MP & HDR - Ian Williams – Manager, PSG Applied Engineering 3
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.
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에서 아래와 같은 에러 메시지가 출력될 수 있다.
이 경우 아래와 같이 패키지를 설치한다.
See also
Libraries
- OpenGL Utility Toolkit (GLUT)
- FreeGLUT (freeglut)
- OpenGL Mathematics (GLM)
- OpenGL Image
- OpenGL Extension Wrangler (GLEW)
- OpenGL Samples Pack
- Simple OpenGL Image Library
- Simple and Fast Multimedia Library (SFML)
- GLFW
- Magnum
- Mesa
- SGL
- ImGUI - Bloat-free Graphical User interface for C++ with minimal dependencies
- moderngl (python)
- PyOpenGL (python)
Favorite site
- OpenGL website
- Wikipedia (en) OpenGL에 대한 설명
- OpenGL wiki Main page
- OpenGL Error list
- The OpenGL Reference Pages
- [추천] docs.gl
- Good GUI for OpenGL
- OpenGL Shader를 이용해 YUV420포맷 색상을 RGB로 변경하기
- 3차원 그래픽의 원리 이해
- 쉐이더 아키텍처를 사용하는 OpenGL 프로그래밍에서의 텍스처 매
- 쉐이더 릴리즈
- [추천] Android 3D Programming을 위한 MFC 프로젝트 설정
- [추천] OpenGL에 대한 기본 개념 첫번째
- [추천] iOS OpenGL ES 튜토리얼 1편
- [추천] OpenGL ES 00: Xcode Project Set Up
Guide
- [추천] 3D Graphics with OpenGL Basic Theory 4
- [추천] iOS OpenGL ES 13편: 원근투영에 대한 설명
- [추천] OpenGL ES 에서 gluPerspective()함수 구현
- 변환 행렬을 이용하여 3개의 사각형이 공전과 자전을 반복하는 예
- Attributes Uniform, Varying?
- OpenGL Installation (for Windows)
- Programming OpenGL in C/C++ How To Setup and Get Started
- OpenGL에서 2d와 3d를 동시에 그리기
- [추천] Tutorial: OpenGL 3.1 The First Triangle (C++/Win)
- [추천] Example using OpenGL 3.0+ with SDL2 and GLEW 5
- GL_CULL_FACE / GL_DEPTH_TEST
- GL_CULL_FACE(후면제거) / GL_DEPTH_TEST(은면제거)에 대한 설명
- glPolygonMode(), glCullFace()에 대한 설명 (앞면과 뒷면을 그리는 방법)
- glVertexPointer() OpenGL 버텍스 배열 기능에 사용되는 버텍스 데이터 좌표 배열을 지정한다
- OpenGL프로그래밍: 간단한 다각형 랜더링
- glDrawArrays() 와 glDrawElements() 사용법
- Opengl 사용 시 Antialiasing 작용
- OpenGL 함수에 대한 간단한 (한글)설명
- Drawing polylines by tessellation
- [추천] Avoiding 16 Common OpenGL Pitfalls (16가지 일반적인 OpenGL 함정 피하기)
- GL_CULL_FACE(후면제거) / GL_DEPTH_TEST(은면제거)에 대한 설명
- glPolygonMode(), glCullFace()에 대한 설명 (앞면과 뒷면을 그리는 방법)
- GL_CULL_FACE/GL_DEPTH_TEST - 후면제거, 은면제거에 대한 설명
- glVertexPointer() OpenGL 버텍스 배열 기능에 사용되는 버텍스 데이터 좌표 배열을 지정한다
- OpenGL프로그래밍: 간단한 다각형 랜더링
- glDrawArrays() 와 glDrawElements() 사용법
- Opengl 사용 시 Antialiasing 작용
- freeglut Windows Development Libraries
- Using freeglut or GLUT with MinGW
- OpenGL 함수에 대한 간단한 (한글)설명
- Drawing polylines by tessellation 6
- Creating a Voxel Engine (like Minecraft) from Scratch in Python - YouTube (Minecraft; OpenGL; Voxel Engine; Python)
Tutorial
- [추천] The Official Guide to Learning OpenGL, Version 1.1 7
- [추천] This site is dedicated to tutorials for OpenGL 3.3 and later ! 8
Tutorial: C/SDL OpenGL
- Tutorial1: Creating a Cross Platform OpenGL 3.2 Context in SDL (C / SDL)
- Tutorial2: VAOs, VBOs, Vertex and Fragment Shaders (C / SDL)
- Tutorial3: Rendering 3D Objects (C /SDL)
- Tutorial4: Using Indices and Geometry Shaders (C /SDL)
Multithreaded Rendering on OpenGL
- Stackoverflow: How to draw opengl graphics from different threads?
- Stackoverflow: Multithreaded Rendering on OpenGL
- Understanding OpenGL ES: Multi-thread and multi-window rendering
- Windows, Buffers, and Rendering Contexts
- OpenGL and multithreading
- Parallel OpenGL FAQ
References
-
Opengl32-quick-reference-card.pdf ↩
-
Soenlab_com.7z -
soenlab.com/lecture/library/opengl/opengl-8.htm
페이지의 OpenGL 공간변환에 대한 설명 참조 ↩ -
NVISION08-8MP_HDR.pdf ↩
-
3D_Graphics_with_OpenGL_-_The_Basic_Theory.pdf ↩
-
Fragment shader compile success: Sdl2-opengl-sample.zip ↩
-
Drawing_polylines_by_tessellation.pdf ↩
-
Www_glprogramming_com_red.zip ↩
-
Code download: https://code.google.com/p/opengl-tutorial-org/ ↩
-
Nehe.gamedev.net.zip ↩
-
Soenlab_com.7z ↩
-
Modern_OpenGL_Guide.pdf ↩