목록그래픽 (29)
게임공장
Mesh 모델 불러오기/Mesh Assimp를 사용하여 응용 프로그램에 많은 여러가지 모델들을 불러올 수 있습니다. 하지만 불러온 모델은 Assimp 데이터 구조의 형식으로 저장됩니다. 우리가 최종적으로 원하는 것은 이 데이터를 OpenGL이 이해할 수 있는 포멧으로 변환시켜 오브젝트를 렌더링할 수 있도록 해주는 것입니다. 이전의 강좌에서 mesh는 그려질 수 있는 하나의 독립체라는 것을 배웠습니다. 이제 우리만의 mesh 클래스를 만들어봅시다. Mesh가 최소한 어떠한 데이터들을 가지고 있어야하는지 정하기 위해 지금까지 배웠던 것을 생각해봅시다. mesh는 최소한 위치 벡터, 법선 벡터, 텍스처 좌표 벡터를 포함하고 있는 vertex들의 모음이 필요합니다. 또한 mesh는 인덱스를 사용하여 그리기 위한..
Assimp 모델 불러오기/Assimp 지금까지의 모든 scene들에서 우리는 컨테이너 친구들을 많은 방법으로 광범위하게 가지고 놀았습니다. 하지만 시간이 지남에 따라 이 친구들이 약간 지루해졌습니다. 실제 그래픽 응용 프로그램에서는 일반적으로 많은 복잡하고 흥미로운 모델들이 존재합니다. 이 모델들은 정적인 컨테이너보다 보기 좋을 것입니다. 하지만 컨테이너 오브젝트와 다르게 집, 차량, 사람과 같은 복잡한 도형의 모든 vertex, 법선, 텍스처 좌표를 일일히 정의할 수는 없습니다. 대신 우리가 할 일은 이 모델들을 응용 프로그램에 import하는 것입니다. 이 모델들은 3D 아티스트가 Blender, 3DS Max, Maya 같은 툴을 사용하여 디자인한 것들입니다. 3D modeling tools라고도..
Multiple lights 조명/Multiple-lights 이전 튜토리얼에서 OpenGL의 lighting에 대한 꽤 많은 것들을 배웠습니다. Phong shading, materials, lighting maps에 대하여 배웠고 light caster의 여러가지 유형에 대해서도 배웠습니다. 이번 강좌에서는 지금까지 배웠던 지식들을 사용하여 6개의 활성화된 광원들로 완전히 비춰진 scene을 생성할 것입니다. directional light로 태양과 같은 빛을 시뮬레이션하고 4개의 point light를 사용하여 scene 전체에 빛을 산란하고 flashlight도 추가할 것입니다. 하나 이상의 광원을 scene에 사용하기 위해 lighting 계산을 GLSL의 functions에 캡슐화해야합니다. ..
Light casters 조명/Light-casters 지금까지 우리가 사용한 모든 lighting은 공간에 하나의 점으로 나타나는 하나의 광원으로 인한 것이었습니다. 이는 멋진 결과를 보여주지만 현실에서는 여러가지 유형의 빛들이 존재합니다. 오브젝트에 빛을 cast(발하다)하는 광원을 light caster라고 합니다. 이번 강좌에서는 여러 유형의 light caster들을 다룰 것입니다. 다른 광원을 시뮬레이션하는 법을 배우는 것은 여러분의 환경의 질을 더욱 높게 만들 툴박스에 들어갈 또 하나의 도구입니다. 먼저 directional light(방향이 있는 빛)에 대해서 다룰 것이고 그 다음엔 point light, 마지막으로는 spotlight를 다룰 것입니다. 다음 강좌에서는 이들을 하나의 sce..
Lighting maps 조명/Lighting maps 이전 강좌에서 빛에 다르게 반응하는 고유의 material을 가지고 있는 오브젝트에 대해 다루었습니다. 빛이 존재하는 scene에서 이는 각 오브젝트들이 고유하게 보일 수 있도록 해주지만 여전히 오브젝트의 시각적 출력에 대해 많은 유연함을 주진 못합니다. 이전 강좌에서 전체 오브젝트에 material을 정의했었지만 실생활의 오브젝트들은 일반적으로 하나의 material로 이루어져 있지 않고 여러가지 material로 이루어져 있습니다. 자동차를 생각해보면 외부는 빛나는 재질로 되어있고 창문은 환경을 부분적으로 반사시키고 타이어는 모두 반사시키므로 specular 하이라이트를 가지지 않습니다. 그리고 림은 아주 강하게 빛납니다. 자동차는 또한 오브젝트..
Materials 조명/Materials 실제 세꼐에서 사물들은 빛에 각자 다르게 반응합니다. 예를 들어 철로 된 사물은 점토로 만들어진 꽃병보다 반짝이고 나무로된 컨테이너는 철로 된 컨테이너가 빛에 반응하는 것과 반대로 빛에 반응하지 않습니다. 또한 specular 하이라이트에도 각자 다르게 반응합니다. 어떠한 사물들은 많은 양을 퍼지게 하지않아 결과적으로 작은 하이라이트를 만들고 다른 어떠한 사물들은 빛의 많이 퍼지게 함으로써 큰 반지름을 가진 하이라이트를 만듭니다. OpenGL 에서 여러가지 유형의 오브젝트들을 시뮬레이션해보기 위해 각 오브젝트에 material 속성을 정의해야합니다. 이 전의 강좌에서 우리는 오브젝트의 시각적인 출력을 정의하기 위해 오브젝트 컬러와 빛 컬러를 지정하였습니다. 오브젝..
기본 조명 조명/기본 조명 실생활의 조명은 매우 복잡하고 프로세싱 파워로 계산하기 어려울 정도의 많은 요소들로 이루어져 있습니다. 그러므로 OpenGL에서의 조명은 처리되기 쉽고 실세계의 사물과 비슷하게 보이는 모델을 사용하여 실세계에 대한 근사치를 기반으로 이루어져있습니다. 이 조명 모델들은 우리가 이해한 빛의 물리학을 기반으로 이루어져 있습니다. 이 모델들 중 하나는 Phong lighting model이라고 불립니다. Phong 모델은 3 가지의 요소로 이루어져 있습니다: ambient lighting(주변광), diffuse lighting(분산광), specular lighting(반사광). 아래에서 이 조명 요소들이 실제로 어떻게 보이는지 볼 수 있습니다. Ambient lighting: 어두..
색 조명/색 이전 강좌에서 OpenGL 에서 색을 가지고 어떻게 동작하는지 간단히 언급했었습니다. 하지만 지금까지는 오직 면의 색만 다루었습니다. 여기에서 우리는 색이란 무엇인지 광범위하게 다룰 것이고 다가올 조명 강좌를 위해 scene을 생성해보도록 하겠습니다. 실제 세계에서는 자신만의 색을 가지고 있는 임의의 알려진 색상 값을 실제로 취할 수 있습니다. 디지털 세계에서는 (무한한)실제 색들을 (제한된)디지털 값에 매핑해야합니다. 그러므로 모든 실세계의 색들을 디지털로 표현할 수 없습니다. 하지만 우리는 알아차리지 못할 정도로 다른 수 많은 색들을 표현할 수 있습니다. 디지털 세계에서 색은 red, green, blue 요소로 나타내어집니다. 각 요소들은 흔히 RGB로 축약됩니다. 단 이 3가지의 값을..
복습 시작하기/복습 시작하기 섹션의 끝에 도달한 것을 축하합니다. 이제 여러분은 윈도우 창을 만드는 법, shader를 만들고 컴파일하는 법, 버퍼 객체나 uniform을 통해 vertex 데이터를 쉐이더로 보내는 법, 오브젝트를 그리는 법, 텍스처를 사용하는 법, 벡터와 수학을 이해하고 완전한 3D scene을 생성하기 위해 그 지식들을 카메라를 사용하여 사용하는 법들을 알고 있을 것입니다. 휴.. 이 것들은 지난 강좌들에서 배웠던 많은 것들입니다. 예제들을 가지고 놀거나 약간의 실험을 해보세요. 그리고 문제에 대한 자신만의 생각과 해결책을 생각해보세요. 우리가 다루었던 모든 자료들을 이해할 수 있다면 다음 강좌로 넘어갈 시간입니다. 용어 사전 OpenGL: 각 기능의 출력과 레이아웃을 정의하는 그래픽..
카메라 시작하기/카메라 이전의 강좌에서 scene 주위를 움직이기(우리는 뒤로 약간 움직였었습니다) 위해 view 행렬을 사용하는 방법에 대해서 다루었습니다. OpenGL 자체는 카메라의 개념과 친숙하지 않습니다. 하지만 우리는 scene의 모든 오브젝트들을 반대 방향으로 이동시킴으로써 우리가 움직이는 것처럼 착시효과를 일으켜 시뮬레이션할 수 있습니다. 이번 강좌에서 OpenGL에서 카메라를 세팅하는 방법을 다룰 것입니다. 3D scene을 자유롭게 이동할 수 있는 FPS 스타일의 카메라를 다룰 것입니다. 이번 강좌에서 키보드, 마우스 입력 또한 다룰 것이고 마지막으로 우리 임의의 카메라 클래스를 만드는 것으로 마칠 것입니다. 카메라/View space 카메라/view space 에 애해서 언급했었을 때..