Visual Studio 프로젝트 이름 우클릭 > 추가 > 기존 항목으로 프로젝트에 외부 파일이나 새로 가져온 파일 추가 가능
책에서 하라는대로 했는데 빌드가 안됨. > 가져온 common 폴더 파일 일일이 gpt로 디버깅
LNK2019: 확인할 수 없는 외부 기호 'main' : 프로젝트 우클릭 > 속성 > 링커 > 시스템 > Windows (/SUBSYSTEM:WINDOWS)
hr failed in ...
d3dUtil.cpp line 127;
error: 지정된 경로를 찾을 수 없습니다
https://yangttoji.tistory.com/3

그람-슈미트 직교화 : 벡터 집합에서 서로 정사영 벡터 계속 빼고 빼서 정규 직교 집합 만드는 과정
SIMD (Single Instruction, Multiple Data) 명령 : 명령어 한 개로 데이터 여러 개 동시 처리
DirectXMath : Direct3D를 위한 표준 3D 수학 라이브러리
XMVECTOR
XMFLOAT2나 XMFLOAT3 등을 사용하는게 권장됨.XMFLOAT2 같은 거 SIMD로 연산하려면 XMVECTOR 형식으로 변환해야됨XMFLOATn 쓰는게 좋다고 함.XMFLOATn를 XMVECTOR로 변환해서 연산 > XMFLOATn으로 변환하여 다시 저장적재 함수 : XMVECTOR XM_CALLCONV XMLoadFloat2(const XMFLOAT2 *pSource);
저장 함수 : void XM_CALLCONV XMStoreFloat2(XMFLOAT2 *pDestination, FXMVECTOR V);
(성분 하나만) 조회 함수 : float XM_CALLCONV XMVectorGetX(FXMVECTOR V);
(성분 하나만) 설정 함수 : XMVECTOR XM_CALLCONV XMVectorSetX(FXMVECTOR V, float x);
XMVECTOR 인스턴스가 함수 인자로 들어갈 때 값이 스택이 아니라 SSE/SSE2 레지스터를 통해 함수에 전달돼야 함. (효율적으로 정렬 보장하기 위해)
일단 플랫폼/컴파일러 의존성 없애려면 XM_CALLCONV라는 호출 규약 지시자 붙여야 됨.
몇 번째 매개변수냐에 따라 형식을 다르게 지정. (GXMVECTOR, HXMVECTOR 등)
생성자면 지시자도 안 붙이고 규칙도 다름.
상수(const) XMVECTOR 인스턴스에는 XMVECTORF32 형식을 사용해야 함.
{0.0f,0.0f,0.0f,0.0f) 같이 특정한 값으로 초기화하려고 할 땐 XMVECTOR 안되고 XMVECTORF32 써야 함.
XMVECTOR는 함수로 초기화해야됨.
XMVECTOR XM_CALLCONV operator+ (FXMVECTOR V);
c++은 operator+ 이런식으로 연산자를 오버로딩해서 커스텀 자료형로도 연산자로 연산할 수 있음.
XMVector3ComponentsFromNormal(&projW, &perpW, w, n); : w를 n 기준으로 직교 분해