DirectX12 3D 게임 개발 및 실제 전투 첫 번째 장

DirectX12 3D 첫 번째 챕터

학습 목표

기하학과 수학 1, 학습 벡터 표현

2, 지오메트리의 동작을 정의 벡터와 그것의 사용을 이해

클래스와 메소드 DirectXMath 라이브러리 벡터 관련에 대해 잘 알고 3,

1.1 벡터

벡터는 일반적으로 지칭되는 물리량 값의 양 양쪽 모두 크기와 방향 중 하나의 양, 우리는 세그먼트를 나타 내기 위해 하나 개의 형상을 사용하는 벡터를 가진다

좌표계 1.1.1 벡터

전제 : 컴퓨터가 기하학적 방법의 벡터 표현을 직접 처리하지 않는, 그래서 벡터를 표현하는 수학적 방법을 찾을 필요가있다

다음은 원점 벡터의 꼬리에있어서, 시프트 연산을 조정 차원 공간을 도입 한 후 우리는 헤드의 벡터가 V로 기록 할 수있는 벡터의 좌표를 결정할 수 = (X, Y, Z) 컴퓨터 프로그램, XYZ가되는 부동 소수점 숫자. 벡터는 수학적인 방법으로 표현되는 경우, 우리가 더 참조 시스템을 사용하는 것, 컴퓨터 그래픽에 따라서 한 종류 환산 기준의 특정 프레임에 대응 항상 상대 좌표 그래서 우리는 벡터에 기록해야 좌표계의 좌표를 대응하는 각각의 벡터는 다른 좌표계 간의 변환을 할 필요

1.1.2 왼쪽 손과 오른손 좌표계

왼손잡이 : 왼손 밖이므로 두 엄지, 검지와 손가락을 x 축, 검지 등의 y 축 양의 방향으로는 가운데 손가락이 Z 축의 양의 방향이다 썸과 직각이

위와 동일 : 오른 손잡이 시스템 좌표입니다.

1.1.3 기본 벡터 연산

간단한 벡터 덧셈과 뺄셈

길이 1.2 단위 벡터

조건 :가 라인의 길이에 대응하는 벡터의 크기의 기하학적 의미는, 길이 차원 벡터가 두 피타고라스 정리를 사용하여 얻을 수있는 다이 단위 벡터는 길이가 1 인 벡터를 의미

표준화 된 벡터 : 경우에, 우리는 방향을 나타 내기 위해 아니라, 벡터의 길이에 대해 걱정하지 않는다. 우리는이 벡터의 길이가 1 희망, 그래서 우리는의 벡터 / 벡터 길이의 각 구성 요소를 성형 할 수 있습니다

1.3 내적

내적의 내적은 벡터 승산 연산 결과를로 정의하면, 스칼라 곱으로 공지 된 스칼라 값이다. 이 벡터와 대응하는 구성 요소들 사이의 내적의 제품이다.

내적 기하학적 의미 U V = U || || || || V *의 코사인 0 (0은 두 벡터 사이의 각도이다).

정사영 : p = (V의 N) N (P, V, P, N은 벡터의 벡터 v 정사영 N이고, n은 단위 벡터 인 벡터이다)

내적을 사용하여 직교 : 약간

1.4 외적

외적 및 다른 결과의 내적을 계산하는 계산 결과는 벡터 외적이다. 단지 3D 벡터 크로스 제품이 있으며, 2D 벡터 크로스 제품 없음. 다음 (W)가 U, V와 같은 직교하는 두 직교, w의 단면 제품의 벡터 u와 벡터 v를 가정하자.

계산 : w = uxv = (UyVz UzVy -, - (- UxVz UzVx) UxVy-UyVx)

크로스 제품은 교환 법칙을 만족하지만, anticommutativity에 맞춰 그 uxv = -vxu하지 않습니다

직교 크로스 제품의 사용 : 조금

1.5 점

기준 위치에서의 벡터는이 경우에, 벡터 위치 벡터라고 3 차원 공간의 특정 위치에 도시 될 수있다하여 화살표의 방향 및 크기 미미의 주요 특징의 위치 벡터이다.

표준 위치 : 벡터 원점에있는 벡터의 꼬리에 의해 번역 벡터. 즉, 원점에서 벡터이다

주의 : 시점의 위치 벡터 및 두 용어를 서로 치환되지만 벡터로 표시되는 점은 장점과 단점을 갖는다 할 수있다

DirectXMath를 사용하여 1.6 라이브러리 벡터 연산

머리말 : DirectXMath는 또한 윈도우 SDK의 일부이며, Direct3D를 응용 프로그램에 대한 라이브러리가 3D 수학 라이브러리를 설계하고, 수행 네 개의 32 비트 부동 소수점 또는 정수 연산을위한 SIMD 명령을 활용할 수있는 수학 라이브러리, 당신은을 높일 수 있습니다 효율성을 향상시킬 수 있습니다.

DirectXMath 라이브러리를 사용하기 위해, 우리는 헤더 파일을 추가 할

#include <DirectXMath.h>

순서가 관련 데이터 형식 중 일부를 사용하여, 우리는 헤더 파일을 추가 할

#include <DirectXPackVector.h>

DirectXMath 파일은 네임 스페이스 다이렉트 X에 존재하는 코드에서 네임 스페이스의 DirectX :: packVector에서 DirectXPackVector 파일의 코드입니다.

1.6.1 벡터 유형

핵심 데이터 타입 DirectXMath 하드웨어가 SIMD 레지스터에 매핑 될 것 인 XMVECTOR

(1) 로컬 및 글로벌 변수 추천 XMVECTOR 데이터 형식, 데이터 유형 XMVECTOR는 그것이 자동적으로 로컬 변수 및 전역 변수에 구현 될 16 바이트 정렬 될 필요가 있기 때문에

2, 반원, XMFLOAT2, XMFLOAT3 또는 XMFLOAT4을 권장합니다.

3, 작동하기 전에, (작업의 속도를 가속화 할 수 있습니다) 유형 XMVECTOR XMFLOATn 형식을 변환하는 기능을로드하는 것이 좋습니다

4 XMVECOTR으로 예를 산출

도 5는 함수를 기억하여 XMFLOATn를 입력하기 XMVECTOR 형식 변환

1.6.2 로딩 방법 및 저장 방법

로드 방법 :

XMMATRIX XM_CALLCONV XMLoadFloatn(const XMFLOATn * pSource);

저장 방법 :

void XM_CALLCONV XMStoreFloatn(XMFLOATn * pDestination,FXMVECTOR V);

1.6.3 통과 파라미터

효율성을 개선하기 위해, 매개 변수로 값 XMVECTOR 타입 스택없이 SSR / SSE2 레지스터로 직접 전송 될 수있다. 코드가 더 다양한 만들 단수가 아닌 플랫폼과 컴파일러에 의해 영향을 받는다, 우리는 FXMVECTOR를 사용하여 매개 변수의 XMVECTOR 유형을 제공 할 것입니다, GXMVECTOR, HXMVECTOR 및 CXMVECTOR 유형입니다.

1.6.4 일정한 벡터

XMVECTOR 정수의 타입의 예는 XMVECTORF32 형태로 표시한다. 예를 들면

static const XMVECTORF32 g_vHaifVector ={ 0.5f,0.5f,0.5f,0.5f };
static const XMVECTORF32 g_vZero = { 0.0f,0.0f,0.0f,0.0f };

시 초기화 구문 기본적으로 우리가 사용하고있는 XMVECTORF32 유형을 사용합니다

1.6.5 과부하 사업자

스칼라 및 벡터 곱셈 감산 XMVECTOR 형 과부하 대응 연산자를 제공한다

1.6.6 기타

DirectXMath 같은 근사 PI 잠 관련된 공통 수학 상수들의 세트를 정의한다 :

XM_CONST float XM_PI= 3.141592654f;
XM_CONST float XM_2PI   = 6.283185307f;
XM_CONST float XM_1DIVPI= 0.318309886f;
XM_CONST float XM_1DIV2PI   = 0.159154943f;
XM_CONST float XM_PIDIV2= 1.570796327f;
XM_CONST float XM_PIDIV4= 0.785398163f;

이 라디안 각도 변환 인라인 함수는 번호와 같은 두 개의 인라인 함수의 최대 값과 최소값을 찾아

1.6.7 세터 함수

DirectXMath 라이브러리는 XMVECTOR의 데이터 유형을 설정하기 위해 다음과 같은 기능을 제공

//返回0向量
XMVECTOR XM_CALLCONV XMVectorZero();
//返回(1,1,1,1)向量
XMVECTOR XM_CALLCONV XMVectorSplatone();
//返回(x,y,z,w)向量
XMVECTOR XM_CALLCONV XMVectorSet(float x,float y,float z,float w);
//返回(Value,Value,Value,Value)向量
XMVECTOR XM_CALLCONV XMVectorReplicate(float Value);
//返回(Vx,Vx,Vx,Vx)向量
XMVECTOR XM_CALLCONV XMVectorSplatX(FXMVECTOR V);
//返回(Vy,Vy,Vy,Vy)向量
XMVECTOR XM_CALLCONV XMVectorSplatY(FXMVECTOR V);
//返回(Vz,Vz,Vz,Vz)向量
XMVECTOR XM_CALLCONV XMVectorSplatZ(FXMVECTOR V);

1.6.8 벡터 함수

DriectXMath 라이브러리 다이 길이, 단면 제품의 제곱을 계산하는 그러한 벡터 길이 산출 크기 등 다양한 벡터 연산을 수행하는 기능을 제공하고, 두 개의 벡터들 등이 아닌 여기에 열거 사이의 각도는 프로토 타입 함수.

1.6.9 부동 소수점 오류

업무 관련 벡터 컴퓨터 다루는에서는 알아야 컴퓨터에서 부동 소수점 수를 비교하여 오류가 있다는, 미묘한 차이가있는 경우 수학과 같은 정규화 벡터의 주형으로서 동일한 두 수레 1 길지만 컴퓨터, 벡터 정규화 다이 길이는 약 1 일 수있다.

개요

(1) 발현 벡터의 형상과 수학

벡터가 크기와 방향 양자 모두를 갖는 물리량을 시뮬레이션하는데 사용될 수 후, 기하학적으로, 우리는 선분 벡터를 표시 한 벡터는, 우리가 할 수있는 (벡터의 꼬리 좌표 원점과 일치하는 위치로 변환된다)로 정규화 벡터

2 동작 벡터

덧셈, 뺄셈, 곱셈 스칼라 모듈 벡터 (길이), 법선 벡터 내적, 외적

3 종류 XMVECTOR

당신이 등을 나타내는 XMFLOAT2, XMFLOAT3, XMFLAOT4 벡터를 사용하여, 반원, 효율적으로 SIMD 연산을 사용할 수 있도록 DirectX는 일반적으로 유형 XMVECTOR DirectXMath 라이브러리 벡터를 설명하는 데 사용됩니다. 우리는 로딩 방법 및 저장 방법에 의해 XMFLOATn XMVECTOR와 사이의 상호 변환을 달성 할 수있다. 당신이 상수 벡터를 초기화하는 구문을 사용하려면, XMVECTORF32의 종류를 사용하는

4, 함수 파라미터 XMVECTOR 타입 (괄호 여러 매개 변수의 해당 함수의 뒤에있는) 점을 주목

플랫폼에 독립적 인 코드를 할 경우 효율성을 개선하기 위해, XMVECTOR이 매개 변수로, 그것은하지 않고 직접 SSE / SSE2 레지스터보다 스택에 증착 할 수있을 때, 우리는 FXMVECTOR (1-3), GXMVECTOR (4), HXMVECTOR을 사용할 수 있습니다 (5-6)와 CXMVECTOR (rest) 매개 변수의 종류에 전달 XMVECTOR

5, 몇 가지 일반적인 방법과 사업자

XMVECTOR 유형 오버로드 연산자는 덧셈, 뺄셈, 스칼라 벡터의 곱셈의 일부를 구현하는 데 사용

DirectXMath 라이브러리는 사각 몰드 다이들을 제공 ,, 두 벡터, 두 벡터의 외적 벡터의 내적을 계산하기위한 편리한 방법은 상기 벡터를 정규화한다.

추천

출처www.cnblogs.com/yaya12138/p/11442019.html