1. Vector
- 벡터 구조체
D3DVECTOR구조체와 D3DXVECTOR3구조체를 제공, D3DXVECTOR3는 벡터를 연살할 수 있는 연산자 오버로딩이 제공됩니다.
D3DVECTOR
typedef struct D3DVECTOR { float x; float y; float z; } D3DVECTOR;
D3DXVECTOR3
typedef struct D3DXVECTOR3 : public D3DVECTOR { public: D3DXVECTOR3() {}; D3DXVECTOR3( CONST FLOAT * ); D3DXVECTOR3( CONST D3DVECTOR& ); D3DXVECTOR3( CONST D3DXFLOAT16 * ); D3DXVECTOR3( FLOAT x, FLOAT y, FLOAT z ); // casting operator FLOAT* (); operator CONST FLOAT* () const; // assignment operators D3DXVECTOR3& operator += ( CONST D3DXVECTOR3& ); D3DXVECTOR3& operator -= ( CONST D3DXVECTOR3& ); D3DXVECTOR3& operator *= ( FLOAT ); D3DXVECTOR3& operator /= ( FLOAT ); // unary operators D3DXVECTOR3 operator + () const; D3DXVECTOR3 operator - () const; // binary operators D3DXVECTOR3 operator + ( CONST D3DXVECTOR3& ) const; D3DXVECTOR3 operator - ( CONST D3DXVECTOR3& ) const; D3DXVECTOR3 operator * ( FLOAT ) const; D3DXVECTOR3 operator / ( FLOAT ) const; friend D3DXVECTOR3 operator * ( FLOAT, CONST struct D3DXVECTOR3& ); BOOL operator == ( CONST D3DXVECTOR3& ) const; BOOL operator != ( CONST D3DXVECTOR3& ) const; } D3DXVECTOR3, *LPD3DXVECTOR3;
-벡터연산
1) 벡터의 합 : +연산자 오버로딩과 D3DXVec3Add()함수를 이용한다.
D3DXVec3Add 함수
D3DXVECTOR3* D3DXVec3Add( _Inout_ D3DXVECTOR3 *pOut, _In_ const D3DXVECTOR3 *pV1, _In_ const D3DXVECTOR3 *pV2 );
예제
#include "stdafx.h" #include <d3dx9.h> int _tmain(int argc, _TCHAR* argv[]) { D3DXVECTOR3 v1(0.0f, 3.0f, 0.0f); D3DXVECTOR3 v2(3.0f, 0.0f, 0.0f); D3DXVECTOR3 v3; v3 = v1 + v2; printf("합 : %f %f %f \n", v3.x, v3.y, v3.z); D3DXVec3Add(&v3, &v1, &v2); printf("합 : %f %f %f \n", v3.x, v3.y, v3.z); return 0; }
2) 벡터의 뺄셈 : -연산자 오버로딩과 D3DXVec3Subtract()함수를 이용한다.
D3DXVec3Subtract 함수
D3DXVECTOR3* D3DXVec3Subtract( _Inout_ D3DXVECTOR3 *pOut, _In_ const D3DXVECTOR3 *pV1, _In_ const D3DXVECTOR3 *pV2 );
예제
#include "stdafx.h" #include <d3dx9.h> int _tmain(int argc, _TCHAR* argv[]) { D3DXVECTOR3 v1(0.0f, 3.0f, 0.0f); D3DXVECTOR3 v2(3.0f, 0.0f, 0.0f); D3DXVECTOR3 v3; v3 = v2-v1; printf("뺄셈 : %f %f %f \n", v3.x, v3.y, v3.z); D3DXVec3Subtract(&v3, &v2, &v1); printf("뺄셈 : %f %f %f \n", v3.x, v3.y, v3.z); return 0; }
3) 벡터의 크기 : D3DXVec3Length()함수를 이용한다.
D3DXVec3Length 함수
FLOAT D3DXVec3Length( _In_ const D3DXVECTOR3 *pV );
예제
#include "stdafx.h" #include <d3dx9.h> int _tmain(int argc, _TCHAR* argv[]) { D3DXVECTOR3 v1(0.0f, 3.0f, 0.0f); D3DXVECTOR3 v2(3.0f, 0.0f, 0.0f); D3DXVECTOR3 v3; v3 = v2-v1; float fLength; fLength = D3DXVec3Length(&v3); printf("크기 : %f\n", fLength); return 0; }
4) 값과 벡터의 곱셈 : D3DXVec3Scale()함수를 이용한다.
D3DXVec3Scale 함수
D3DXVECTOR3* D3DXVec3Scale( _Inout_ D3DXVECTOR3 *pOut, _In_ const D3DXVECTOR3 *pV, _In_ FLOAT s );
예제
#include "stdafx.h" #include <d3dx9.h> int _tmain(int argc, _TCHAR* argv[]) { float fScale = 2.0f; D3DXVECTOR3 v5(2.0f, 1.0f, 0.0f); D3DXVec3Scale(&v5, &v5, fScale); printf("값과 벡터의 곱 : %f %f %f \n", v5.x, v5.y, v5.z); return 0; }
5) 단위 벡터 : D3DXVec3Normalize() 함수를 이용
D3DXVec3Normalize 함수
D3DXVECTOR3* D3DXVec3Normalize( _Inout_ D3DXVECTOR3 *pOut, _In_ const D3DXVECTOR3 *pV );
예제
#include "stdafx.h" #include <d3dx9.h> int _tmain(int argc, _TCHAR* argv[]) { D3DXVECTOR3 v6(2.0f, 2.0f, 3.0f); D3DXVECTOR3 vResult; float fNormalize; D3DXVec3Normalize(&vResult, &v6); printf("단위벡터 : %f %f %f \n", vResult.x, vResult.y, vResult.z); fNormalize = D3DXVec3Length(&vResult); printf("크기 : %f \n", fNormalize); return 0; }
6)내적 : D3DXVec3Dot() 함수 이용
FLOAT D3DXVec3Dot( _In_ const D3DXVECTOR3 *pV1, _In_ const D3DXVECTOR3 *pV2 );
예제
#include "stdafx.h" #include <d3dx9.h> int _tmain(int argc, _TCHAR* argv[]) { //내적함수 D3DXVECTOR3 v7(3.0f, 0.0f, 0.0f); D3DXVECTOR3 v8(-3.0f, 0.0f, 0.0f); float fCos, fDot, fScale2; fDot = D3DXVec3Dot(&v7, &v8); fScale2 = D3DXVec3Length(&v7) * D3DXVec3Length(&v8); fCos = fDot / fScale2; printf("라디언 : %f \n", fCos); return 0; }
7)외적 : D3DXVec3Corss()함수 이용
D3DXVECTOR3* D3DXVec3Cross( _Inout_ D3DXVECTOR3 *pOut, _In_ const D3DXVECTOR3 *pV1, _In_ const D3DXVECTOR3 *pV2 );
예제
#include "stdafx.h" #include <d3dx9.h> int _tmain(int argc, _TCHAR* argv[]) { D3DXVECTOR3 v1(0.0f, 3.0f, 0.0f); D3DXVECTOR3 v2(3.0f, 0.0f, 0.0f); D3DXVECTOR3 vResult2; D3DXVec3Cross(&vResult2, &v1, &v2); D3DXVec3Normalize(&vResult2, &vResult2); printf("%f %f %f \n", vResult2.x, vResult2.y, vResult2.z); return 0; }
'Software Development > Graphics' 카테고리의 다른 글
6. Matrices (0) | 2014.10.20 |
---|---|
5. Vertices_2)정점 (0) | 2014.10.17 |
4. DirectX 프레임워크(framework) (0) | 2014.10.14 |
3. DirectX 기본환경 설정 (0) | 2014.10.14 |
2. DirectX 설치, VisualStudio 2010 설정, 프로젝트 생성 (1) | 2014.10.07 |