diff --git a/README.md b/README.md index a9a38a1f872b8151a914493bd93c15ec326b64c0..0af6e0aa39f48633cbff2d50f6edbfc74404e5ca 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,115 @@ -# FOSS-final_project +# opengl을 프로젝트에 추가하고 삼각형을 그려보자 +### opengl을 사용하기 위해서는 우선 opengl과 그 사용을 편하게 해줄 라이브러리를 프로젝트에 추가해야 한다. +### 이 프로젝트에서 사용할 패키지는 glew,glfw,glm이다. +### 우선 프로젝트폴더에 include폴더와 lib폴더를 추가해 준다. + + +### 다음으로 비주얼 스튜디오에게 사용할 헤더파일과 라이브러리가 있는 폴더의 위치를 알려줘야 하는데, + +### 먼저 include 디렉토리의 위치를 알려주자. +### 프로젝트 속성 -> C/C++메뉴의 additional Includde Directories에 헤더파일을 넣을 위치를 알려준다. + + +### 다음으로 lib 디렉토리의 위치를 알려줘야 하는데, +### 프로젝트 속성 -> Linker ->General 메뉴의 Additional Library Directories에 아래 사진과 같이 프로젝트 폴더의 아래로 위치를 정해주면 된다. + + +### 프로젝트디렉토리에 다운받을 라이브러리와 헤더파일을 위치시킬 위치를 잡고 해당 위치를 컴파일러에게 알려주는 과정이 끝났다. + + +### 이제 실제로 사용될 라이브러리들을 다운받고 프로젝트로 이동시키는 과정을 거쳐야 한다. + +### 우선 glew부터 설치해보자. + +### http://glew.sourceforge.net/ 해당 사이트에서 glew를 받을 수 있다. + +### 해당 버튼을 눌러 헤더파일과 라이브러리를 다운받는다. + +### 다운받은 zip파일을 압축해제하면 다음과 같은 디렉토리가 나오는데, +### include폴더에 있는 GL폴더를 위에서 만들었던 프로젝트의 include폴더아래로 옮겨준다. +### 마찬가지로 lib\Release\Win32 아래에 있는 lib파일들을 프로젝트의 lib폴더 아래로 옮겨준다. +### glew는 추가적으로 dll파일이 필요하기 때문에 dll파일을 옮겨주는 작업도 진행한다. +### 압축을 푼 폴더의 bin\Release\Win32에 있는 glew32.dll을 운영체제가 설치된 드라이브의 windows\system32폴더와 \Windows\SysWOW64 폴더에 옮겨준다. + +### 다음으로 glfw를 설치하자. +### https://www.glfw.org/download.html 해당 사이트에서 glfw를 받을 수 있다. + +### 위의 사진에 나와있는 버튼을 눌러 바이너리파일을 받는다. + +### 다운받고 압축을 풀면 위 사진과 같은 디렉토리가 보일텐데, +### 이 프로젝트에 필요한 것은 비주얼스튜디오의 버전과 맞는 lib파일과 include 폴더 아래에 있는 헤더파일이다. +### include폴더 아래에 있는 GLFW폴더를 우리 프로젝트의 include폴더 아래로 옮겨주고, +### 자신의 비주얼스튜디오 버전과 맞는 lib폴더를 찾아 해당 폴더 아래에 있는 glfw3.lib파일을 프로젝트의 lib폴더 아래로 옮겨준다. + +### 마지막으로 glm을 설치하자. +### https://github.com/g-truc/glm/tags 해당 사이트에서 glm을 받을 수 있다. + +### 다운로드 버튼을 눌러 glm을 다운받는다. +### 다운받은 zip파일을 압축을 해제하면, + +### 위와 같은 파일들이 나올텐데, 이 프로젝트에 필요한 파일은 glm폴더 아래에 있는 헤더파일들이다. +### glm폴더를 프로젝트의 include폴더 아래로 옮겨 모든 파일을 프로젝트에 추가한다. + +### 필요한 파일들은 모두 프로젝트폴더 아래에 추가가 되었다. +### 하지만 바로 프로젝트를 시작할 수는 없고, 비주얼 스튜디오가 이를 사용하기 위해서는 어떤 라이브러리를 사용할지 추가적인 정보가 필요하다. + + +### 프로젝트속성 -> Linker -> Input -> Additional Dependencies에 추가해주면 되는데, +### 우리가 추가했던 lib파일은 glew32.lib, glfw3.lib가 있고 opengl을 사용할 예정이므로 opengl32.lib까지 추가해준다. + + + + +# 삼각형을 그려보자. + +### 프로젝트를 시작하기에 앞서 필요한 사전작업은 모두 끝났으니 이제 삼각형을 그려보자. +### 삼각형을 그리기에 앞서 윈도우를 띄워줘야 하는데, glfw를 사용하면 이 과정이 아주 짧은 코드로 끝난다. + + +### glfw의 초기화까지 포함해서 3줄의 코드면 윈도우를 띄울 수 있다. +### 하지만 윈도우를 띄우자 마자 프로세스가 종료되어버린다. +### 사용자가 요청하기 전 까지 프로세스를 유지하기 위해 다음과 같은 코드를 작성한다. + + + +### 무한루프를 돌되 사용자가 요청하면 무한루프를 빠져나와 프로세스가 종료된다. +### glfwSwapBuffers는 기존의 화면과 새로 그릴 화면을 교체하는 것으로, 화면이 찢기는 현상인 테어링을 막기 위한 코드이다. +### 화면을 완전히 그린 후에 화면을 교체하게 되므로 사용자에게는 그리는 도중의 과정이 보여지지 않는다. + +### 이제 삼각형을 그리기 위한 삼각형클래스를 만들어보자. + + +### 전체 코드는 다음과 같다. +### 우선 m_vertexBuffer는 실제 정점들의 gram에 작성된 정점의 정보를 담고 있는 버퍼에 대한 인덱스라고 생각하면 편하다. +### vertices는 vertexBuffer를 작성하기 위한 삼각형의 정점정보이다. + +### Init함수는 vertexBuffer를 작성하기 위해, Draw함수는 실제로 삼각형을 그릴 때 사용된다. + +### 이제 이 삼각형클래스를 이용해 삼각형을 그려보자. + + +### 코드는 위와 같다. +### 삼각형오브젝트를 생성하고, 정점에 대한 정보를 준 뒤 vertexBuffer를 만드는 Init함수를 호출한다. +### vertices의 요소는 순서대로 x y z정보를 가리키고 있고, 3묶음이므로 삼각형의 정점 정보를 표현할 수 있다. + +### 위에서 작성한 무한루프를 수정하여 매 반복마다 삼각형을 그리도록 코드를 작성한다. + +### 삼각형 두 개를 그리도록 코드를 수정했다. + +### 빌드 후 프로그램을 실행시키면, + + +### 위와 같이 삼각형 두개가 그려진 것을 볼 수 있다. + + + + + +# 느낀점 +### 처음에는 DirectX로 프로젝트를 기획했었는데, 내 기억보다 훨씬 방대한 초기화코드에 당황했다. +### 코드의 방대함과 스텐실버퍼, z버퍼, 스왑체인 등 우리 프로젝트에서 다루기에는 너무 깊고 지엽적인 요소가 많은 데다가 +### 오픈소스가 아니므로 우리 과목의 목표에 부합하지 않는 점을 고려하여 Opengl로 프로젝트의 목표를 변경하게 되었다. + +### 이 프로젝트를 진행하며 마크다운 양식에 조금 더 익숙해질 수 있는 기회가 된 것 같다. +### 마크다운문서에 이미지가 들어갈 수 있다는 사실도 처음 깨닫고, 글씨의 크기를 앞글자 하나로 변경이 가능한 점도 신기했다.