상세한 과정은 없고 단순히 태양계를 만들기 위해 이루어진 과정입니다.
#1 https://blog.naver.com/ascd1212/222741927221 세부 과정은 없고 단순히 태양계를 만들기 위한 과정입니다. [중간 결과] OpenGL 강의를 듣고… blog.naver.com
[중간 결과]
이전 단계에서 여기까지 진행하고 있었다.
여기에 1. 시점 변화.2. 카메라 렌즈 확대, 축소 3. 미니맵을 추가했다.4. 귀여운 화성 추가
현재 만들고 있는 프로그램에서 시점 변화란이 전후간 결과처럼 기본 default로 바라보는 것과 하늘.. 아니 태양의 머리 꼭대기에서 항공샷(?), 그리고 각 행성에 포커스를 맞추는 것이다.
포커스는 단순히 행성과 태양으로부터의 거리보다 임의로 정한 거리만큼 더 뒤에서.즉 같은 속도(1바퀴 도는 데 같은 시간이 걸린다)의 좀 더 넓은 반지름 궤도를 돌고 태양을 바라보는 기준으로 카메라 위치를 설정했다.그리고 행성에 포커스가 맞춰지면 방향키(왼쪽, 오른쪽)로 해당 행성으로 궤도를 돌며 둥글게 행성을 관광할 수 있도록 했다.
확대는 Person으로 FOV(field of view) 각도를 조절하면서 진행했다.* 이 과정에서 view transform에 대해 조금 알게 된 것 같다.
그리고 미니맵은 Scissor Box를 사용해 생성했다.미니맵은 계속해서 항공샷을 보여줬고 메인 카메라가 항공샷이 됐을 때는 미니맵을 출력하지 않았다.
대망의 광원을 추가할 차례다.태양은 무엇인가, 별이다, 항성이 바람직한 빛을 내야 한다.
처음에는 태양이 있는(0,0,0) 좌표에 빛을 설정해 보았다.
당연히 제대로 될 리가 없지.
빛은 그런데 normal vector 기준으로 어떻게 처리되는지 계산된다.이 개발 과정에서는 구를 생성하면서 vertex 정보, colorindex 정보, noramlvector 정보를 동시에 생성하고 동일한 정보로 각 행성을 만든다.
그 말은 빛을 내야 하는 광원인 태양이나 지구 달 화성처럼 빛을 받는 material 다양한 normal vector를 가지고 있다.
그럼 태양이 위치한 좌표에 빛을 설정하면 태양 내부에는 normal vector가 반대이므로 태양 표면은 빛을 받지 않는다고 가정되므로 제대로 빛을 내는 태양이 될 수 없다.
여기서 어떻게 할지 고민이다.단순히 fragmentshader에서 uniform 변수를 추가하여 태양(Is_light Source)이면 단지 normal vector 계산을 하지 않고 생성하였다.
이미지를 보면 태양이 어둡지 않고 행성은 빛을 받아 그림자가 잘 생기는 것을 볼 수 있다.
그런데 항공샷, 그리고 디폴트 카메라 위치에서는 행성이 제대로 나오지 않고 어둡게 나왔다.
이는 펑리플렉션 Model에서 빛과 물체가 멀어도 바라보는 카메라의 시점이 멀어도 빛이 멀면 당연히 흐려지는 것으로 문제가 생겼다.
해당 Model에서는 당연한 법칙을 계산해 사용하지만 현재 이 태양계에서는 가시성을 위해 그런 점은 고려하지 않고 그 부분을 고려하지 않도록 약간 수정했다.
그렇게 본문 처음 볼 수 있었던 프로그램이 됐다.
계획
텍스처 매핑