Skip to content
Snippets Groups Projects
Commit 89b80476 authored by jcm's avatar jcm
Browse files

t

parent 1fb7f301
No related branches found
No related tags found
No related merge requests found
# FOSS-final_project # opengl을 프로젝트에 추가하고 삼각형을 그려보자
### opengl을 사용하기 위해서는 우선 opengl과 그 사용을 편하게 해줄 라이브러리를 프로젝트에 추가해야 한다.
### 이 프로젝트에서 사용할 패키지는 glew,glfw,glm이다.
### 우선 프로젝트폴더에 include폴더와 lib폴더를 추가해 준다.
![folders](/folders.PNG)
### 다음으로 비주얼 스튜디오에게 사용할 헤더파일과 라이브러리가 있는 폴더의 위치를 알려줘야 하는데,
### 먼저 include 디렉토리의 위치를 알려주자.
### 프로젝트 속성 -> C/C++메뉴의 additional Includde Directories에 헤더파일을 넣을 위치를 알려준다.
![include](/include.png)
### 다음으로 lib 디렉토리의 위치를 알려줘야 하는데,
### 프로젝트 속성 -> Linker ->General 메뉴의 Additional Library Directories에 아래 사진과 같이 프로젝트 폴더의 아래로 위치를 정해주면 된다.
![lib](/lib.png)
### 프로젝트디렉토리에 다운받을 라이브러리와 헤더파일을 위치시킬 위치를 잡고 해당 위치를 컴파일러에게 알려주는 과정이 끝났다.
### 이제 실제로 사용될 라이브러리들을 다운받고 프로젝트로 이동시키는 과정을 거쳐야 한다.
### 우선 glew부터 설치해보자.
### http://glew.sourceforge.net/ 해당 사이트에서 glew를 받을 수 있다.
![glewDown](/glewDown.png)
### 해당 버튼을 눌러 헤더파일과 라이브러리를 다운받는다.
![glew](/glew.png)
### 다운받은 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를 받을 수 있다.
![glfwDown](/glfwDown.png)
### 위의 사진에 나와있는 버튼을 눌러 바이너리파일을 받는다.
![glfw](/glfw.png)
### 다운받고 압축을 풀면 위 사진과 같은 디렉토리가 보일텐데,
### 이 프로젝트에 필요한 것은 비주얼스튜디오의 버전과 맞는 lib파일과 include 폴더 아래에 있는 헤더파일이다.
### include폴더 아래에 있는 GLFW폴더를 우리 프로젝트의 include폴더 아래로 옮겨주고,
### 자신의 비주얼스튜디오 버전과 맞는 lib폴더를 찾아 해당 폴더 아래에 있는 glfw3.lib파일을 프로젝트의 lib폴더 아래로 옮겨준다.
### 마지막으로 glm을 설치하자.
### https://github.com/g-truc/glm/tags 해당 사이트에서 glm을 받을 수 있다.
![glmDown](/glmDown.png)
### 다운로드 버튼을 눌러 glm을 다운받는다.
### 다운받은 zip파일을 압축을 해제하면,
![glm](/glm.png)
### 위와 같은 파일들이 나올텐데, 이 프로젝트에 필요한 파일은 glm폴더 아래에 있는 헤더파일들이다.
### glm폴더를 프로젝트의 include폴더 아래로 옮겨 모든 파일을 프로젝트에 추가한다.
### 필요한 파일들은 모두 프로젝트폴더 아래에 추가가 되었다.
### 하지만 바로 프로젝트를 시작할 수는 없고, 비주얼 스튜디오가 이를 사용하기 위해서는 어떤 라이브러리를 사용할지 추가적인 정보가 필요하다.
![dependencies](/dependencies.png)
### 프로젝트속성 -> Linker -> Input -> Additional Dependencies에 추가해주면 되는데,
### 우리가 추가했던 lib파일은 glew32.lib, glfw3.lib가 있고 opengl을 사용할 예정이므로 opengl32.lib까지 추가해준다.
# 삼각형을 그려보자.
### 프로젝트를 시작하기에 앞서 필요한 사전작업은 모두 끝났으니 이제 삼각형을 그려보자.
### 삼각형을 그리기에 앞서 윈도우를 띄워줘야 하는데, glfw를 사용하면 이 과정이 아주 짧은 코드로 끝난다.
![window](/window.png)
### glfw의 초기화까지 포함해서 3줄의 코드면 윈도우를 띄울 수 있다.
### 하지만 윈도우를 띄우자 마자 프로세스가 종료되어버린다.
### 사용자가 요청하기 전 까지 프로세스를 유지하기 위해 다음과 같은 코드를 작성한다.
![loop](/loop.png)
### 무한루프를 돌되 사용자가 요청하면 무한루프를 빠져나와 프로세스가 종료된다.
### glfwSwapBuffers는 기존의 화면과 새로 그릴 화면을 교체하는 것으로, 화면이 찢기는 현상인 테어링을 막기 위한 코드이다.
### 화면을 완전히 그린 후에 화면을 교체하게 되므로 사용자에게는 그리는 도중의 과정이 보여지지 않는다.
### 이제 삼각형을 그리기 위한 삼각형클래스를 만들어보자.
![Triangle](/Triangle.png)
### 전체 코드는 다음과 같다.
### 우선 m_vertexBuffer는 실제 정점들의 gram에 작성된 정점의 정보를 담고 있는 버퍼에 대한 인덱스라고 생각하면 편하다.
### vertices는 vertexBuffer를 작성하기 위한 삼각형의 정점정보이다.
### Init함수는 vertexBuffer를 작성하기 위해, Draw함수는 실제로 삼각형을 그릴 때 사용된다.
### 이제 이 삼각형클래스를 이용해 삼각형을 그려보자.
![draw](/draw.png)
### 코드는 위와 같다.
### 삼각형오브젝트를 생성하고, 정점에 대한 정보를 준 뒤 vertexBuffer를 만드는 Init함수를 호출한다.
### vertices의 요소는 순서대로 x y z정보를 가리키고 있고, 3묶음이므로 삼각형의 정점 정보를 표현할 수 있다.
### 위에서 작성한 무한루프를 수정하여 매 반복마다 삼각형을 그리도록 코드를 작성한다.
![loop2](/loop2.png)
### 삼각형 두 개를 그리도록 코드를 수정했다.
### 빌드 후 프로그램을 실행시키면,
![end](/end.png)
### 위와 같이 삼각형 두개가 그려진 것을 볼 수 있다.
# 느낀점
### 처음에는 DirectX로 프로젝트를 기획했었는데, 내 기억보다 훨씬 방대한 초기화코드에 당황했다.
### 코드의 방대함과 스텐실버퍼, z버퍼, 스왑체인 등 우리 프로젝트에서 다루기에는 너무 깊고 지엽적인 요소가 많은 데다가
### 오픈소스가 아니므로 우리 과목의 목표에 부합하지 않는 점을 고려하여 Opengl로 프로젝트의 목표를 변경하게 되었다.
### 이 프로젝트를 진행하며 마크다운 양식에 조금 더 익숙해질 수 있는 기회가 된 것 같다.
### 마크다운문서에 이미지가 들어갈 수 있다는 사실도 처음 깨닫고, 글씨의 크기를 앞글자 하나로 변경이 가능한 점도 신기했다.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment