| 진행기간 | 과목 | 프로젝트명 |
|---|---|---|
| 2022.05.11~2022.06.15 | 컴퓨터그래픽스 | OpenGL 사용한 3ds MAX 프로그램 만들기 |
- 프로젝트 요구사항
- 3ds MAX를 사용해서 제작한 3D 모델링 obj 파일을 불러오기
- 키보드를 사용하여 카메라 이동(줌-인, 줌-아웃, 좌, 우)
- Smooth, Flat Shading
- 조명 설치
- 3개 이상의 다른 재질 반영
- Texture 적용(반영X)
obj 파일을 불러오려면 obj에 저장된 정보의 의미를 알아야 한다. 파일에는 정점, 법선벡터, 텍스쳐, 면의 개수 등 다양한 정보가 저장되어 있다. 일단 이 정보가 뭔지 이해를 해야한다. 파일에 왜 이러한 정보가 들어있고 이게 무슨 역할을 하는지, 이 정보를 이용해서 오브젝트를 어떻게 그릴지... 이해 못하면 원래의 오브젝트를 구경할 수 없을 것이다ㅠㅠ
데이터를 읽어와 각 정보를 각 배열에 저장한다. 법선벡터와 정점을 설정하고 glBegin(GL_TRIANGLES)를 사용해서 삼각형 폴리곤으로 오브젝트를 그린다. 법선벡터를 무시해서 그리면 뾰족한 오브젝트를 볼 수 있다. 알고 싶지 않은 정보였다.
카메라 조작은 2가지 방법으로 구현할 수 있다. 첫 번째는 카메라를 고정시키고 오브젝트를 이동하기. 두 번째는 오브젝트는 고정되어 있고 카메라가 이동하는 것이다. 본인은 후자를 선택했다.
glViewport 함수를 사용해서 뷰포트를 설정한다. gluLookAt 함수를 사용해서 키보드의 값에 따라서 x, y, z 거리가 변경되도록 했다.
glShadeModel 함수의 기본값은 GL_SMOOTH이다. 매개변수로 GL_SMOOTH와 GL_FLAT를 설정할 수 있다.
glShadeModel(GL_SMOOTH);
glShadeModel(GL_FLAT);
주변 반사광, 확산 반사의 입사광, 경면 반사의 입사광을 조절해서 조명의 색상을 변경하면 된다. glLightfv 함수를 사용하면 된다. glLightfv 함수에 조명의 정보를 설정한 다음, 설정한 조명의 정보를 glEnable 함수로 활성화하면 된다.
GLfloat pos[] = {0.0, 0.0, 0.0, 0.0};
glLightfv(GL_LIGHT1, GL_POSITION, pos);
glLightfv(GL_LIGHT1, GL_AMBIENT, ambient);
glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse);
glLightfv(GL_LIGHT1, GL_SPECULAR, specular);
glEnable(GL_LIGHT1);
오브젝트의 재질은 glMaterialfv 함수를 사용해서 설정할 수 있다. ambient, diffuse, specular를 어떻게 설정하느냐에 따라서 여러 가지 재질을 설정할 수 있다.
glMaterialfv(GL_FRONT, GL_AMBIENT, ambient);
glMaterialfv(GL_FRONT, GL_AMBIENT, diffuse);
glMaterialfv(GL_FRONT, GL_AMBIENT, specular);
