- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[DirectX] 벡터 / 벡터의 연산 본문
벡터표현
D3DX는 3차원 벡터 표현을 위해서 C++ 구조체 타입인 D3DXVECTOR3을 제공한다.
2차원 벡터 표현을 위해서 D3DXVECTOR2가 제공되며
4차원 벡터 표현을 위해서 D3DXVECTOR4가 제공된다.
2차원 벡터표현에서는 필드로 x, y를 가지며, 4차원 표현에서는 x, y, z, w를 필드로 가진다.
모든 연산자 정의는 동일하다.
겹지정 연산자를 통한 벡터 연산
벡터연산은 겹지정된 연산자를 통해서 연산이 가능하다.
벡터의 덧셈은 벡터의 각 요소별 덧셈으로 정의된다.
D3DXVECTOR3 u(1.0f, 0.0f, 2.0f);
D3DXVECTOR3 v(0.0f, -1.0f, 3.0f);
D3DXVECTOR3 sum = u + v;
첫번째 벡터는 (1, 0, 2)이고 두번째 벡터가 (0, -1, 3)이므로 변수 sum은 (1, -1, 5)의 값을 가진다.
D3DXVECTOR3 u(1.0f, 0.0f, 2.0f);
D3DXVECTOR3 v(0.0f, -1.0f, 3.0f);
D3DXVECTOR3 diff = u - v;
벡터의 뺄셈도 벡터의 각 요소별 뺄셈으로 정의된다.
위의 연산결과인 diff는 (1, 1, -1)의 값을 가진다.
D3DXVECTOR3 u(1.0f, 2.0f, -1.0f);
D3DXVECTOR3 scaled = u * 2.0f;
벡터와 스칼라의 곱셈은 스칼라 값을 벡터의 각 요소별 곱셈으로 정의된다.
위의 연산 결과 scaled는 (2, 4, -2)의 값을 가지게 된다.
벡터 연산 함수를 통한 벡터 연산
D3DX는 다양한 벡터 연산을 위해서 벡터 연산 함수들을 제공한다.
3차원 벡터에 대해서 D3DXVec3로 시작하는 많은 함수들을 제공한다.
2/4차원 벡터에 대해서는 각각 D3DXVec2로 시작하거나 D3DxVec4로 시작하는 함수를 제공한다.
D3DXVec3Length : 벡터의 길이(length)를 계산한다.
벡터의 길이는 벡터의 놈(norm)또는 크기(magnitude)와 같은 의미로,
벡터 (x, y, z)의 크기는 d = root x^2 + y^2 + z^2 이다.
D3DXVECTOR v(1.0f, 2.0f, 3.0f);
float magnitude = D3DXVec3Length( &v );
- 이 코드에서 벡터의 크기 magnitude는 root 14의 값을 가진다. ( root 1 + 4 + 9 )
D3DXVec3Normalize : 벡터를 정규화(normalization)한다.
정규화는 벡터의 크기(magnitude)가 1이 되도록 하는 과정이다.
따라서 벡터 (x, y, z)의 정규화된 벡터는 (x/d, y/d, z/d)가 된다.
D3DXVECTOR3 u(3.0f, 0.0f, 1.0f);
D3DXVEVTOR3 n;
D3DXVec3Normalize(&n, &u);
- 이 코드에서 n은 root 10으로 각 요소를 나눈 값이므로 대략 (0.95, 0.00, 0.32)의 값이 된다.
D3DXVec3Dot : 벡터의 내적(inner product)을 계산한다.
D3DXVECTOR3 u(1.0f, -1.0f, 2.0f);
D3DXVECTOR3 v(2.0f, 0.0f, 1.0f);
float dot = D3DXVec3Dot ( &u, &v );
- 이 코드에서 u는 (1, -1, 2)이고 v는 (2, 0, 1)이므로 내적 dot는 1*2 + (-1)*0 + 2*1이므로 4가 된다.
D3DXVec3Cross : 벡터의 외적(outer product)을 계산한다.
두 벡터의 외적은 두 벡터에 수직인 벡터로 노말벡터(normal vector)라고 한다.
두 벡터 u와 v의 외적 u x v를 w라고 하면
w = ( w(x), w(y), w(z) )는 아래와 같다.
w(x) = u(y)v(z) - u(z)v(y), w(y) = u(x)v(z) - u(z)v(x), w(z) = u(x)v(y) - u(y)v(x)
u와 v의 순서를 바꾸어 외적을 구한다면 벡터의 부호가 바뀌게 된다. 즉 u x v = -( v x u ) 이다.
D3DXVECTOR3 u(1.0f, 0.0f, 0.0f);
D3DXVECTOR3 v(0.0f, 1.0f, 0.0f);
D3DXVECTOR3 cross;
D3DXVec3Cross (&cross, &u, &v);
- 이 코드에서 u는 (1, 0, 0)이고 v는 (0, 1, 0)이므로 외적은 (0, 0, 1)이 된다.
u와 v의 순서를 바꾸면 외적은 (0, 0, -1)이 된다.
출처 : DirectX 10을 통한 3차원 게임 프로그래밍(박종승 저 - 도서출판 그린)
[출처] [DirectX] 벡터 / 벡터의 연산|작성자 yhWoo
'★─Programing > ☆─DirectX' 카테고리의 다른 글
[DirectX] 변환 / 변환행렬 (0) | 2010.02.17 |
---|---|
[DirectX] 행렬 / 행렬의 연산 (0) | 2010.02.17 |
[DirectX] 선형대수의 기초 - 행렬(Matrix) (0) | 2010.02.17 |
[DirectX] 선형대수의 기초 - 벡터(vector) (0) | 2010.02.17 |
[DirectX] 벡터, 행렬, 평면 (0) | 2010.02.17 |