반응형

내적(Dot Product)이란?

-      정규화된

한 벡터가 다른 벡터에 투영된 길이 값을 나타낸다.Ex) Dot(A , B) ? BA위치로 회전했을 때 투영되어 직교되는 위치만큼의 크기 값

 

EX2) Dot(B,A)는?

    

 

 

각 벡터를 Normalize한 후의 스칼라 곱의 결과값이며 그 값은 두 벡터의 코사인의 값과 일치한다. 그러므로 음수 인지 양수 인지 그리고 각도의 크기 값도 알아 낼 수 있다.

 

 

1.    먼저 3D맥스상에서 임의좌표를 가지는 두 개의 벡터를 만든다.

C = [5 , 2, -3]

D = [8, 1, -4]

    

2.    먼저 AB의 크기를 구한다.

 

3.    벡터의 크기 값을 활용하여 정규화(Normalize)를 한다.

 

||Normalize A|| = 1 이어야 한다! 

||Normalize B|| = 1 이어야 한다!

 

 

4.    두 벡터의 내적  A

B 을 구해 보자

A B = a1b1 + a2b2 + a3b3

= [(0.811 x 0.889) + (0.32 x 0.11) + (-0.487 x -0.444)]

= 0.72 + 0.035 + 0.216

= 0.971

 

 

 

5.    이제 내적의 결과값으로 여러가지 결과를 도출할 수 있게 됬음.

         내적의 결과 값으로 알게 된 결론은?

Dot(A,

B) > 0이면

 세타 값은 90도 이하

이므로 BA로부터 90도 각도 안에 있음을 알게 됐다.

 

è

이 결과는 게임로직에서 상당히 많이 사용될수 있다. A가 카메라이고 B가 오브젝트일경우 내적의 결과값이 양수라는 것은 BA의 시야안에 들어옴을 의미하고, 음수라는 것은 BA의 시야안에 들어오지 않음을 의미한다.

 

è

이 결과값을 토대로 디렉셔널 라이트와 오브젝트의 법선 벡터를 고려 했을 때 오브젝트가 빛을 얼마만큼 받고 있는지도 알 수 있게 됐다.

 

A가 디렉셔널 라이트이고 B가 법선 벡터를 가지고 있는 오브젝트라고 했을 때

 

이 정도의 빛을 받는 오브젝트임을 알 수 있다.

 

하지만, Dot(A, B)  = 1이라고 한다면

복사량이 최대치가 되어 가장 많은 빛을 받는 상황이 된다. 12시에 떠있는 태양이라고 생각하면 이해가 빠를 듯~

 

Dot(A, B) 

= 0이라면..

빛을 전혀 받지 않는 연산임을 알 수 있게 됐다. 12시가 되겠다.

 

 

코사인 각도와 노멀라이즈 된 내적의 각도 값은 일치하므로              코사인 각도는 맥스의 Listner 창을 활용해서 쉽게 알 수 있다.

          

           두 벡터 사이의 각도가 13.832도 라는 사실도 알게 됐다.

 

내적연산은 가볍다보니 셰이더 프로그램이나 물리 스크립트 에서도 굉장히 자주 쓰이는 기본적인 연산입니다~^^

 

 

 

Cg언어에 내장된 기본적인 Dot 공식- 두 벡터에 대해 -1 ~ 1 범위의 float 값을 얻을 수 있다. -1은 평행하며 나에게서 멀어지는 벡터, 1은 평행하며 나를 향해 다가오는 벡터, 0은 나와 완전히 수직인 벡터를 의미한다.

 

 

 

 

위에서 힘들게 구한 공식을 맥스 리스너(Max Listner)에서 쉽게 확인 할 수 있다.

 

 

반응형

+ Recent posts