수업기록 #directX

다이렉트 X를 사용하면서 알아야할 자료형

중요한 키워드는 무엇이냐? 버텍스_프로세싱


버텍스 프로세싱

그리기의 최소 단위 점들을 연결해서 모아두은 면. (가장 작은 면은 삼각형 폴리곤) 컴퓨터는 삼각형으로 그리게 된다.

그리기 연산의 최소 단위 버텍스 버텍스는 점이다.

3D 그리기를 할 때에는 점단위로 연산을 해서 그려내겠다. 정점 연산 + 조명 연산(처리)을 합성한 것이 버텍스 프로세싱임.

정점의 연산은 점단위로 좌표 변환의 연산을 통해서 3D로 인지하게끔 만드는 과정이다. 조명의 연산은

  1. 색상 판단을 위해 (현실에서 빛 반사를 통해 색상을 인지하듯이.)
  2. 명암 표현을 하기 위해 입체감을 느낄 수 있게 되기 때문에

중요한 키워드다. 버텍스 프로세싱은. 3D의 중요한 키워드니 잊지 말도록 하자.


고정된 렌더링 파이프 라인의 의한 셰이더가 다이렉트 X의 셰이더. 그렇기에 HLSL이란 언어를 통해서 조금더 자유로운 형태의 셰이딩을 할 수 있게 될 것이다. (특정 연산을 강제적으로 GPU로 돌리기 때문에 프레임 방어 혹은 퍼포먼스에 도움이 된다.) 윈도우 초기화 했듯이 디바이스 장치 초기화1

다이렉트를 사용하려면 아래와 같은 헤더를 넣고

#include <d3d9.h>
#include <d3dx9.h>

VC++ 디렉터리 포함 디렉터리 SDK 설치 경로Include 폴더 잡아주기 (헤더파일 경로를 절대 경로로 포함하게 됨) 2안)위 과정 후에 매크로 탭 눌러서, (DXSDK_DIR)이라는 파일이 있음. (즉, SDK가 설치된 절대 경로를 매크로화 시킴) 이걸 삽입하고, 뒤에다 include라고 써주면 됨.

VC++ 디렉터리 라이브러리 디렉터리(DXSDK_DIR)lib\x64

구성 모든 구성이 아닌 디버그 모드와 릴리즈 모드의 저장을 분리하는 것을 권장하게 됨.

#pragma comment(lib,"d3d9.lib) #pragma comment(lib,"d3dx9.lib)

D3DXVEVTOR3

벡터는 방향과 크기를 가진다. 빗변을 벡터의 크기(혹은 스칼라)라고 표현하기도 함.

현실에는 위치 벡터라는 의미는 존재하지 않지만 게임 프로그래밍에는 위치를 저장하는 구조체 용도로도 벡터를 사용하기에 위치 벡터라는 용어를 가짐.

vPos - 위치 벡터
vDir - 방향 벡터 1
vLook - 방향 벡터 2
vNormal -  법선 벡터(방향 벡터)

벡터의 상등

방향과 크기가 같은 벡터는 완전히 일치하는 벡터다. (원점을 기준으로 가져다 두었을 때 같으면, 같다는 뜻)

(렌더링 파이프라인 점하나가 모니터의 픽셀로 변환되어가는 과정)


자료형) 1. 벡터

벡터란 무엇인가? 점들의 상태 로컬 스페이스라고 불리는 정점 좌표의 정보를 저장하기 위하여 우리는 벡터를 배우는 것이다.

자료형 자체가 연산자 오버로딩이 되어 있긴하다.

벡터의 더하기 대응하는 원소끼리 더해주면 된다(x는 x끼리, y는 y끼리) 보통은 위치벡터와 방향 벡터를 더해줘서 움직임을 주는 형태로 사용함

벡터의 빼기 위치 벡터끼리 빼는 것을 자주 사용하게 되는데 뒤쪽 항이 앞쪽 항을 바라보는 형태로 벡터가 나오게 됨. (A-B)는 B가 A를 바라보는 방향이 나옴. (추적 같은 것들을 할 때 사용하는 경우가 많다.)

플레이어를 따라다니는 몬스터를 만들어보자.

플레이어의 위치벡터와 몬스터의 위치벡트를 빼고, 이를 방향 벡터로 전환하면 추적이 끝! 그런데, 그렇게 되면 너무 빠르게 도달하기 때문에 단위 벡터로 변환을 해주어야하지 않을까??

맞다. 단위 벡터는 크기가 1인 벡터. 즉 방향을 나타내는 용도로 사용하기도 한다. 그래서 방향 벡터를 단위 벡터로 만들어주게 되는데, 그것을 벡터의 정규화라고 한다.

(빗변을 1로 만들어주는 만큼 나눠주고, 밑변과 높이도 똑같이 나눠주면 됨 (z도 마찬가지겠지))


벡터의 곱하기

스칼라 곱셈 벡터의 곱셈

수학 기호 내적 : A•B(도트) 외적 : AXB(크로스)

두 방향 벡터를 가지고 활용을 함. 내적 : 스칼라 곱(스칼라 곱 아님) 결과값이 상수 : 내적을 하면 스칼라값이 나오며 그 값을 역함수를 돌리면 각도를 구할 수 있게 된다(즉 끼인 각의 도출) 외적 : 벡터 곱 결과값이 방향 벡터 :

내적은 본디 물리량을 구하는 용도다. 그러나 이를 통해서 두 방향 벡터가 단위 벡터일 때, 내적을 역함수에 넣으면 끼인 각이 나온다.(라디안 상태) (벡터 1의 크기 * 벡터 2의 크기 * 코사인 세타) 는 acos(벡터의 내적) (근데 이 두개는 단위 벡터로 만들어서 사용하니까 둘다 1 코사인 세타는 acos(벡터의 내적)) 외적은 3D에서 사용하게 되는데 축 회전에 대해서 이해를 좀 해야 한다. 외적은 두 방향 벡터에 직교를 이루는 방향 벡터를 구하기 위해 사용한다.

3D 상에서는 각 물체가 축을 가지고 있기 때문에 그 축을 기준으로 회전을 한다. 그 ‘축’을 구하기 위해 외적을 하게 되는 것

업에서 룩을 하면 오른쪽. 룩에서 업을 하면 왼쪽 방향을 구함 카메라 구현 시에 많이 사용하게 된다.

25-05-22 내적으로 추적

Footnotes

  1. 다이렉트 x를 제대로 사용하려면 디바이스 장치 초기화가 필요하다.