System.out.println("Hello, World");

'투영'에 해당되는 글 2건

  1. 2012.04.20 3D프로그래밍 - 카메라
  2. 2012.04.19 3D프로그래밍기본 - 벡터

○ 카메라

 - 3차원 게임에서 카메라는 시점을 의미한다. 3D게임의 화면에 보이는 모든 것은 카메라를 통해서 보여지는 것이다.

    3자의 입장에서 바라보면 캐릭터의 눈 위치에 카메라가 위치하여 캐릭터의 움직임에 따라 카메라의 방향과 위치가 변하는 것이다.


○ 변환 파이프 라인

 - 변환파이프라인의 목적은 하나의 이미지를 만들고 게이머의 화면에 그것들을 보여주기 위한 것이다.

    파이프 라인은 기하적인 데이터를 하나의 물체나 장면으로 표현하는 역할을 하며, 그것들로부터 2차원의 이미지를 만들어낸다.



○ 모델 공간(Model Space)

 - 일반적으로 하나의 캐릭터를 표현할 때 모델공간이라 불리는 하나의 좌표계에서 정점의 위치를 저장한다.

 - 로컬 좌표계를 이야기한다.


○ 전역공간(World Space)

 - 3차원 공간상의 최종적인 원점의 좌표계

 - 게이머의 화면에 보여질 모든 물체들을 위한 절대적인 레퍼런스 역항을 수행

 - 게임의 오브젝트들은 월드 공간의 좌표를 가지고 있다.


☆ 월드 변환(World Transform)

- 박스와 실린더가 각각 존재한다.

- 따로 따로 모델링된 실린더와 박스는 각각의 좌표계를 갖는다. 이것이 로컬 좌표계이다.

  이것들은 그냥 3차원 공간상에 배치하게 되면 원점을 공유한다.

- 2개의 물체를 따로따로 출력하기 위해서는 물체가 사용하는 로컬 좌표계가 아닌 월드 좌표계를 도입해야 한다.

- 즉 '실린더의 로컬좌표계 -> 월드 좌표계"와 "박스의 로컬 좌표계 -> 월드 좌표계"라는 2개의 변환이 필요하다.

- 일반적으로 3차원 그래픽에서 변환을 행렬을 사용한다고 해으니 로컬 좌표계->월드 좌표계는 행렬 변환이라는 것을 알 수 있다.

- 이런식으로 로컬 좌표계를 월드 좌표계로 변환하는 행렬을 변환 행렬(Transform Matrix)이라 한다. 


○ 시점공간(Eye Space)

 - 카메라가 바라보는 공간을 시점공간이라고 한다.

 - 시점이 그 공간 좌표계의 원점이 된다.


○ 절단 공간(Clip Space)

 - 어떤 물체가 보여지는 위치에 있는지, 그렇지 않은지를 판단.

 - 시야 절두체를 통해서 이루어진다.

 - 절단 공간상의 시야 절두체를 표현한 축정렬된 육면체의 크기는 동차 좌표계에서 표현된 4번째 좌표와 관련있다.

 - 카메라가 바라보는 정육면체 안에 잘라서 넣는다.


○ 정규화된 장치 좌표계(Normalized Device Coorinates)

 - 절단 공간에서 추 정렬된 육면체의 크기인 W를 1로 놓으면 정규화된 장치 좌표계를 얻을 수 있다.

 - 정규화된 장치 좌표계를 기준으로 표현된(x,y,z) 좌표에서 z값을 0으로 놓아서 좌표(x,y)를 얻는다.

 - 3D에서 2D로 변환하는 과정을 Z버퍼라고도 하며 스테실버퍼(그림자)에도 쓰인다.


○ 윈도우 좌표계

 - 정규화된 장치 좌표계를 실제 모니터상의 x,y 좌표계로 변환해야 하는데 이를 뷰포트 변환이라고 하며 정규화된 장치 

          좌표계에 게이머가 설정한 뷰포트의 크기를 곱하여 실제 윈도우의 x,y좌표를 얻어 낸다.


☆ 시야 절두체

 -시야 절두체란 하나의 3차원 공간상에서 카메라에 의해 보일 수 있는 것들을 담는 범위

 - 피라미드 형태의 육면체로 구성되어 있다.

☆ 투영

 - 투영은 3차원 장면을 2차원 모니터 화면에 그리기 위해, 장면에 표현되는 캐릭터나 물체들의 각 정점을 화면에 그려지는 

    2차원 좌표를 결정하기 위해 사용한다.

○ 원근 투영

 - 가까운 물체는 크게, 먼 물체는 작게 그려진다. 대부분의 게임에서 사용되는 방법





○ 직교 투영

 - 원금감을 갖지 않는 투영 방법으로 화면에 어떤 물체가 그려질때 원근에 의한 왜곡이 발생하지 않는 방법

 - 캐드 같은 설계 분야에 적용되며, 유명한 디아블로2가 직교 투영 방법을 사용한다.

          


☆ 일인칭 시점 카메라

 - 카메라의 위치는 위치벡터로 표현한다.

 - 시선 방향은 카메라가 바라보는 방향을 나타내는 방향벡터이며 

 - 상향 벡터는 카메라의 위쪽 벡터이다.

○ 카메라 변환(Camera Transform)

- 카메라 변환이란 3차원 월드 좌표계를 카메라를 기준으로 한 카메라 좌표계로 변환하는 것을 의미한다.

- 월드 좌표계를 카메라를 기준점으로 한 좌표계로 변환하는 과정이 카메라 변환이다. 


☆ 3인칭 시점 카메라

 - 3인칭 시점 카메라는 제 3자의 입장에서 내려다보는 시점을 제공한다.

 - 카메라는 게임 내의 캐릭터의 움직임과 무관하게 게이머의 명령에 따라 이동한다.





Posted by 김마농

벡터 Vector

[스칼라]

크기만으로 정해지는 양을 스칼라(scalar)라 한다.


[벡터]

○ 개요

 - 힘, 속도, 도형의 평행이동과 같이 크기와 방향을 함꼐 가지는 양을 벡터라고 한다.

 - 벡터란 크기와 방향을 나타내는 수학적인 도구

 - 일반적으로 벡터를 시각화할때에는 화살표로 표시한다.


시점 A의 위치에는 관계없이 크기와 방향만을 생각하여 로 나타낸다.

○ 동등벡터

 - 벡터는 크기와 방향을 나타내기 때문에 벡터의 시작점은 의미가 없다.

 - 크기와 방향이 같은 벡터를 동등 벡터라고 한다.


○ 성분

 - 벡터의 성분이란 벡터 V의 괄호안의 V1, V2, Vn을 말한다.(말 그대로 벡터의 성분을 의미한다.)

 - 벡터의 성분은 하나의 좌표계로 표현한다.


○ 평행이동

 시점 A의 위치에 관계없이 크기와 방향만을 생각하는 이유

 - 시점 A가 어떤 점에 위치하더라도 도형의 각 점 P에서 AB와 같은 방향이면서 평행이고 또 길이가 

    같은 선분 PP'를 그어 점 P가 옮겨지는 점 P'를 구할 수 있음


○ 단위 벡터

 - 벡터의 크기는 1이며 방향만을 나타낸다.

 - 크기가 1이 아닌 벡터를 단위 벡터로 만들어 주는 것을 벡터의 정규화(Normalization)라고 한다.


○ 주의점!

- 위와 같은 그림에서도 하나의 점으로 표현되긴 하지만 벡터다.


○ 벡터의 덧셈

A + B =[ A1+B1, A2+B2, A3+B3,…,An+Bn]

ex) A=[2.3] B = [6,1]

A+B = [2+6,3+1] =[8,4]

○ 벡터의 뺄셈

A - B = A+(-B)A1-B1, A2-B2, A3-B3,…,An-Bn]

ex) A=[2,3] B=[6,1]

A+B = [2-6],[3-1] = [-4.2]


○ 벡터의 외적(Cross product)

 - 벡터의 외적은 벡터 곱셈의 또 다른 형태

 - 두 벡터에 모두 수직한 벡터를 결과값으로 갖는다.

 - 크로스곱(Cross Product) 또는 벡터 곱(Vector Product)이라고도 한다.

 - A X B ≠ B X A

A X B = (|A| * |B| Sinθ) E  [E : A X B 방향의 단위 벡터]


○ 벡터의 내적(dot product)

 - 벡터의 곱셈은 내적과 외적으로 정의한다.

 - 벡터의 내적은 결과값이 스칼라이므로 스칼라 곱이라도 하며, 점곱이라고도 한다.

 - 내적은 벡터의 방향 관계를 얻는 도구로 사용된다.

 - 두 벡터의 각도, 사이값을 구할때 쓰이기도 한다.


A ● B = |A| * |B| * cosθ


○ 벡터의 투영

 - 하나의 벡터A를 다른 벡터 B에 투영하여 B에 평행한 벡터와 수직인 벡터로 분해한다.





 


Posted by 김마농