<내용 출처>
https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/indexflat.php
https://heinleinsgame.tistory.com/7
https://rito15.github.io/posts/opengl-study-02/
<명칭>
- GL (Graphic Library) :
- UT (Utility Toolkit) :
- FW (FrameWork) :
- EW (Extenstion Wrangler library) :
- M (Math) :
- SL (Shading Language) :
- ES (Embedded Systems) :
<유의 사항>
- 헤더 포함시 glew를 glfw 보다 먼저 포함 할 것 (glfw 헤더와 충돌을 피하기 위함)
- glfwInit() 호출 이후, 추후(프로그램 종료)에 glfwTerminate()를 반드시 호출 할 것.
- glfwInit() 호출 이후, Context를 생성하고 glewInit()를 호출
- SetPixelFormat 함수를 두 번 이상 호출시 오류가 나는 경우가 존재하므로 임시 context를 생성하고 호출하는 것이 안전함.
<함수>
- VBO (Vertex Buffer Object) : 여러개의 정점의 정보가 저장된 GPU 메모리 버퍼, 고유 ID를 가질 수 있다.
- glGenBuffers(GLsizei n, GLuint * buffers) : 개수 만큼 VBO를 생성하여 해당 ID변수에 ID를 반환해줌.
- n : 생성할 버퍼 갯수
- buffers : 버퍼 ID를 저장할 Gluint 변수
- glBindBuffer(버퍼 유형, 버퍼 ID 변수) : glGenBuffers로 생성한 버퍼를 어떻게 사용할 것인가 유형 설정
- glBufferData(버퍼 유형, 버퍼에 저장할 데이터 크기 (바이트 단위), 사용자 데이터, 데이터 관리 방법) : 사용자의 데이터를 버퍼에 복사
- glDeleteBuffers(제거할 버퍼 갯수, 버퍼 ID) : 버퍼 갯수 만큼 제거. 버퍼 개체가 삭제된 이후 내용이 없으면, 다시 재사용 가능함 (glGenBuffers)
- glGenBuffers(GLsizei n, GLuint * buffers) : 개수 만큼 VBO를 생성하여 해당 ID변수에 ID를 반환해줌.
- VAO (Vertex Array Object) : 여러개의 VBO를 담을 수 있는 객체, 고유 ID를 가질 수 있다.
- glGenVertexArray : VAO 생성
- glBindVertexArray :
- glDeleteVertexArrays :
- glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer) : Vertex 해석 정보를 알림
- index : 정점 속성. vertex shader의 layout location 부분과 연관 있는 것 같은데...
- size : 정점 속성의 구성 크기. 1,2,3,4 또는 GL_BGRA 중 하나만 가능
- type : 배열 내 데이터 타입
- normalized : 배열 내 데이터를 정규화 해야하는지 설정. GL_TRUE로 설정되면 정수 형식의 저장된 값이 [-1,1] 또는 [0,1] 범위의 부동 소수점으로 매핑됨. GL_FALSE의 경우에는 정규화 없이 직접 부동 소수점으로 변환됨
- stride : 배열 내 각각 데이터의 byte 오프셋 크기. vertex 데이터와 다음 vertext 데이터 사이 크기
- pointer : 버퍼에서 데이터의 시작 위치
- glEnableVertexAttribArray : sharder 코드에 location에 매칭되는 값이 파라미터로 들어감
- glDisableVertexAttribArray :
- Shader (GLSL)
- glCreateShader :
- glShaderSource :
- glCompileShader :
- glGetShaderiv :
- glGetShaderInfoLog :
- glAttachShader :
- glLinkProgram :
- glDetachShader :
- glDeleteShader :
- GLint glGetUnifromLocation(GLint program, const GLchar * name) : sharder program에서 name으로 입력된 변수의 location 값을 반환
- void glUseProgram(GLuint program) :
- glUniform(GLint location, 접미사에 따른 파라미터 여러개) : Shader program (GLSL)에서 사용되는 uniform 변수에 넘길 값을 설정. 반드시 glUseProgram과 같이 호출해야한다. (program ID)
- location :
- 함수 접미사 종류
- Point
- 1f, 2f, 3f, 4f :
- 1i, 2i, 3i, 4i :
- 1ui, 2ui, 3ui, 4ui :
- Vector
- 1fv, 2fv, 3fv, 4fv :
- 1iv, 2iv, 3iv, 4iv :
- 1uiv, 2uiv, 3uiv, 4uiv :
- Matrix
- Matrix2fv, Matrix3fv, Matrix4fv
- Matrix2x3fv, Matrix3x2fv
- Matrix2x4fv, Matrix4x2fv
- Matrix3x4fv, Matrix4x3fv
- Point
- glDeleteProgram :
- glDrawArrays(드로잉 모드, 배열 시작 인덱스, 렌더링할 인덱스 개수) : 버퍼의 배열 데이터 드로잉, 단 드로잉 콜만 한 것이기 때문에, 그려지지는 않음
- Windows 소속(?)
- BOOL wglMakeCurrent(HDC, HGLRC) (wingdi.h) : 읽어볼만한 링크,
- BOOL SwapBuffers(HDC) (wingdi.h) : 전면 및 후면 버퍼 교체
/**
https://stackoverflow.com/a/45861149/7017299
*/
//여러개를 별도로 선언하는 경우 (Gen 먼저하고 Bind)
GLuint VAO, VBO;
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
GLuint VAO2, VBO2;
glGenVertexArrays(1, &VAO2);
glGenBuffers(1, &VBO2);
glBindVertexArray(VAO2);
glBindBuffer(GL_ARRAY_BUFFER, VBO2);
//여러개를 동시 선언하는 경우
std::array<GLuint,3> VAOs;
std::array<GLuint,3> VBOs;
glGenVertexArrays(VAOs.size(), &VAOs[0]);
glGenBuffers(VBOs.size(), &VBOs[0]);
// 1. 버퍼 생성
glGenBuffers
// 2. 정점 배열을 OpenGL에서 사용하기 위해 버퍼에 복사
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// 3. vertex 속성 포인터를 설정
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
// 4. 오브젝트를 그리고 싶을 때 우리가 생성한 shader program을 사용
glUseProgram(shaderProgram);
// 3. 드로잉
~~~~
'Study > C, C++ (MFC, UE)' 카테고리의 다른 글
[C++, MFC] 형변환 연구 (0) | 2018.05.31 |
---|---|
[C++] Vector<String> 문자열 소트 (0) | 2018.05.17 |
[MFC] Dialog 기반 프로그램 enter,esc 키 처리에 관해 (0) | 2018.05.15 |
opengl.dll missing error 해결기 (0) | 2018.05.09 |
[C++, MFC] Radio button 그룹화 (2) | 2018.05.03 |