250623

凡愚·2025년 6월 23일

개발 일지

목록 보기
211/350

✅ What I did today


  • DirectX 12를 이용한 3D 게임 프로그래밍 입문


📖 DirectX 12를 이용한 3D 게임 프로그래밍 입문


서문

Visual Studio 프로젝트 이름 우클릭 > 추가 > 기존 항목으로 프로젝트에 외부 파일이나 새로 가져온 파일 추가 가능

책에서 하라는대로 했는데 빌드가 안됨. > 가져온 common 폴더 파일 일일이 gpt로 디버깅

LNK2019: 확인할 수 없는 외부 기호 'main' : 프로젝트 우클릭 > 속성 > 링커 > 시스템 > Windows (/SUBSYSTEM:WINDOWS)

hr failed in ...
d3dUtil.cpp line 127;
error: 지정된 경로를 찾을 수 없습니다

https://yangttoji.tistory.com/3

Part 1. 기초 필수 수학

그람-슈미트 직교화 : 벡터 집합에서 서로 정사영 벡터 계속 빼고 빼서 정규 직교 집합 만드는 과정

1.6 DirectXMath 라이브러리의 벡터

SIMD (Single Instruction, Multiple Data) 명령 : 명령어 한 개로 데이터 여러 개 동시 처리

DirectXMath : Direct3D를 위한 표준 3D 수학 라이브러리

1.6.1 벡터 형식들

XMVECTOR

  • 32비트 부동소수점 값 네 개. SIMD로 한꺼번에 처리 가능.
  • 메모리 저장할 때 주소가 16의 배수여야 함.
  • 그래서 지역 변수나 전역 변수가 아니라 클래스 자료 멤버에는 이 형식 대신 XMFLOAT2XMFLOAT3 등을 사용하는게 권장됨.
  • XMFLOAT2 같은 거 SIMD로 연산하려면 XMVECTOR 형식으로 변환해야됨
  • 포인터로 선언하면 되는거 아닌가 생각했는데, 매뉴얼피셜로 가능은 하지만 그냥 저장할 땐 XMFLOATn 쓰는게 좋다고 함.
  • XMFLOATnXMVECTOR로 변환해서 연산 > XMFLOATn으로 변환하여 다시 저장

1.6.2 적재 및 저장 함수

적재 함수 : 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);

1.6.3 매개변수 전달

XMVECTOR 인스턴스가 함수 인자로 들어갈 때 값이 스택이 아니라 SSE/SSE2 레지스터를 통해 함수에 전달돼야 함. (효율적으로 정렬 보장하기 위해)
일단 플랫폼/컴파일러 의존성 없애려면 XM_CALLCONV라는 호출 규약 지시자 붙여야 됨.
몇 번째 매개변수냐에 따라 형식을 다르게 지정. (GXMVECTOR, HXMVECTOR 등)
생성자면 지시자도 안 붙이고 규칙도 다름.

1.6.4 상수 벡터

상수(const) XMVECTOR 인스턴스에는 XMVECTORF32 형식을 사용해야 함.
{0.0f,0.0f,0.0f,0.0f) 같이 특정한 값으로 초기화하려고 할 땐 XMVECTOR 안되고 XMVECTORF32 써야 함.
XMVECTOR는 함수로 초기화해야됨.

1.6.5 overloading된 연산자들

XMVECTOR XM_CALLCONV operator+ (FXMVECTOR V);

c++은 operator+ 이런식으로 연산자를 오버로딩해서 커스텀 자료형로도 연산자로 연산할 수 있음.

XMVector3ComponentsFromNormal(&projW, &perpW, w, n); : w를 n 기준으로 직교 분해

0개의 댓글