본문 바로가기

Game/Graphics

Learn OpenGL - Getting started : Creating a Window

link : https://learnopengl.com/Getting-started/Creating-a-window


Creating a Window


 멋진 그래픽을 만들기 위해 가장 먼저해야 할 일은 OpenGL Context와 


그림을 그릴 Window 응용 프로그램을 만드는 것이다.


하지만 이러한 작업은 운영체제별로 다르며 OpenGL은 의도적으로 이러한 작업들을 추상화하려고 한다.


이것은 우리가 윈도우를 만들고, context를 정의하고, 사용자 입력을 모두 처리해야한다는 것을 의미한다.



 다행히 이미 우리가 원하는 기능을 제공하는 라이브러리가 많다. 특히 OpenGL을 목표로 한 라이브러리도 있다.


이러한 라이브러리는 우리에게 모든 운영체제 관련 작업을 저장하고, 렌더링 할 창과 OpenGL context를 제공한다.


가장 인기있는 라이브러리는 GLUT, SDL, SFML 및 GLFW이다. 우리는 튜토리얼에서 GLFW를 사용할 것이다.




GLFW


 GLFW는 C로 작성된 라이브러리로 OpenGL을 대상으로 한다.


OpenGL context를 만들고, 윈도우 매개 변수를 정의하고, 필요한 모든 사용자 입력을 처리 할 수 있다.



 이 튜토리얼과 다음 튜토리얼의 초점은 GLFW를 가동시켜서 OpenGL 컨텍스트를 적절하게 만들고,


제대로 렌더링 할 수 있는 창을 표시하는 것이다. 이 튜토리얼에서는 GLFW 라이브러리 검색, 빌드 및 링크에


대한 내용을 단계별로 설명할 것이다.




Building GLFW


 GLFW는 웹사이트의 [http://www.glfw.org/do.html]에서 받을 수 있다. 


GLFW는 이미 Visual Studio 2013/2015 용으로 미리 컴파일된 바이너리 및 헤더파일을 가지고 있다. 


하지만 우리는 완벽하게 하기 위해 GLFW 소스 코드를 직접 컴파일 할 것이다. Source package를 다운받아라.

 미리 컴파일 된 바이너리를 사용하는 경우 32비트 버전을 다운로드하라. 64비트 버전은 대부분의 독자에게 이상한 오류를 일으킨 적이 많다.

소스 패키지를 다운로드했으면 압축을 해제하고 폴더를 연다. 이 중 우리는 몇가지 항목을 본다.

  • The resulting library from compilation.
  • The include folder.

소스 코드에서 라이브러리를 컴파일하면 최종 라이브러리가 CPU / OS에 완벽하게 맞춰지기 때문에 


미리 컴파일된 바이너리가 항상 우리의 시스템과 호환된다는 보장이 없다. 그래서 CMake를 사용한다.




CMake


 CMake는 사전 정의된 CMake 스크립트를 사용해 소스 코드 파일 모음에서 


사용자가 선택한 프로젝트/솔루션 파일을 생성 할 수 있는 도구이다. 


이를 통해 라이브러리를 컴파일하는데 사용할 수 있는 GLFW 소스 패키지에서 Visual Studio 프로젝트 파일을 생성할 수 있다.


먼저 [http://www.cmake.org/cmake/resources/software.html]에서 CMake를 다운해라.



 CMake가 설치되면 명령 프롬프트나 GUI를 통해 CMake를 실행할 수 있다.


CMake는 소스 코드 폴더와 바이너리를 생성할 폴더를 필요로 한다. 다운로드한 GLFW 소스 패키지의 


루트 폴더를 소스코드 폴더로 선택하고 새 폴더  build를 만들고 이 폴더를 바이너리를 생성할 폴더로 선택한다.


Image of CMake's logo



원본 폴더와 대상 폴더가 설정되면 CMake가 필요한 설정과 소스 코드를 읽을 수 있도록 구성 단추를


클릭해라. 그런 다음 프로젝트의 생성기를 선택해야하며 Visual Studio 버전에 맞게 선택해라.


CMake는 결과 라이브러리를 구성하기 위해 가능한 빌드 옵션을 표시한다.


기본값을 그대로 두고 구성을 다시 클릭해 설정을 저장할 수 있다. 설정이 완료되면 Generate를


클릭해 생성된 프로젝트 파일이 빌드 폴더에 생성되도록 한다.



Compilation


 빌드 폴더에서 GLFW.sln이라는 파일을 찾을 수 있다. CMake가 이미 적절한 구성 설정을 포함하고 있는


프로젝트 파일을 생성했으므로 Build Solution을 누르면 src/Debug. 폴더에 glfw3.lib의 라이브러리가 생성될 것이다.


라이브러리가 생성되면 IDE가 라이브러리 및 포함 파일을 어디에서 찾을 수 있는지 알려줘야 한다.




Our first project


 먼저 Visual Studio를 열고 새 프로젝트를 만든다. 여러 옵션중에 Visual C++을 선택하고, 


빈 프로젝트를 선택해라. 첫 번째 OpenGL 응용 프로그램을 만들 수 있는 작업공간이 생겼다.




Linking


 프로젝트가  GLFW를 사용하려면 라이브러리를 프로젝트와 연결해야한다.


링커 설정에서 glfw3.lib를 사용하도록 지정하면 이 작업을 수행 할 수 있지만


우리 프로젝트는 glfw3.lib 파일을 다른 디렉토리에 붙여 넣기 때문에 glfw3.lib 파일의


위치를 알지 못한다. 따라서 우리는 이 디렉토리들을 먼저 프로젝트에 추가해야한다.



 프로젝트 속성으로 가서 아래 이미지에서 볼 수 있듯이 VC ++ 디렉터리로 이동해 VS에서


라이브러리 / 포함 파일을 검색해야하는 디렉터리를 추가 할 수 있다.


Image of Visual Studio's VC++ Directories configuration



그 후 라이브러리를 연결하려면 라이브러리의 이름을 링커에 명시해주어야한다. 우리가 사용할 라이브러리 이름은 glfw3.lib 이므로


이를 추가해주면된다.




OpenGL library on Windows


 윈도우 사용자인 경우 opengl32.lib 파일이 Visual Studio를 설치할 때 Microsoft SDK에 포함되어 제공된다.


이 강좌에서는 윈도우에서 VS를 사용할 것이기 때문에 opengl32.lib 파일을 링커 세팅에 추가한다.





GLAD


 OpenGL은 standard/specification이므로 특정 그래픽 카드가 지원하는 드라이버에 사양을 구현하는 것은 드라이버


제조 업체가 결정한다. 많은 버전의 OpenGL 드라이버가 존재하기 때문에 대부분의 함수들의 위치는


컴파일시에 알 수 없으므로 런타임시에 질의한다. 나중에 개발자가 필요한 기능의 위치를 검색해 나중에


사용할 수 있도록 함수 포인터에 저장해야 한다. 그 위치를 검색하는 것은 운영체제마다 다르고,


윈도우에서는 다음과 같이 수행한다:


// 함수의 프로토타입 정의
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// 함수를 찾고 함수 포인터에 할당
GL_GENBUFFERS glGenBuffers  = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// 이제 함수는 평상시처럼 호출할 수 있습니다.
unsigned int buffer;
glGenBuffers(1, &buffer);

GLAD는 이 복잡한 것을 해준다.




Setting up GLAD


 GLAD는 위의 번거로운 작업들을 관리해주는 오픈 소스 라이브러리이다.


GLAD는 일바넞ㄱ인 오픈 소스 라이브러리의 세팅 방법과 약간 다른 방법을 사용한다.


GLAD는 GLAD에게 OpenGL의 버전을 정의하고 해당 버전에 따라 모든 관련된


OpenGL 함수를 정의하고 로드할 수 있는 웹 서비스를 사용한다.



 [http://glad.dav1d.de/]로 이동해 언어를 C++로 설정하고, API 섹션에서 3.3 이상의 OpenGL 버전을 선택한다.


프로파일을 Core로 Generate a loader 옵션을 선택하고 Generate를 클릭해 라이브러리 파일을 생성한다.


생성된 라이브러리 파일들 중에 glad.c 파일은 프로젝트에 추가하고, include 폴더 또한 추가한다.


#include <glad/glad.h> 

이후에는 include 문을 추가할 수 있을것이다.




** ** ** ** ** **


OpenGL을 사용하기 위한 GLFW 설정을 마쳤다. 전에 공부할때 했던 설정인데 컴퓨터가 포맷돼서 다시 했다 하하...


바쁘겠지만 컴퓨터에 앉는 날은 하루에 1강이라도 섭렵하도록 노력한다. 화이팅

태그