DirectX 11 3d

220427

슬뷔 2023. 5. 8. 23:56

framwork 전체적인 흐름

 

Engine

Level -> 많은 object (component 기반)

 

기본적인 component가 제공해주지 못하는걸 script로 구현

 

재질 = 쉐이더

쉐이더 -> hlsl 코드

재질 -> 사용하고자 하는 쉐이더, 전달하려는 리소스까지 포함

 

인스턴싱 조건 - 재질, mesh 같아야 한다 

(위치 다르게 설정 가능)

 

 

원근 투영 / 직교 투영

뷰행렬 유도

 

탄젠트 공간(Tangent space)

물체의 표면을 기준으로 법선 벡터 방향을 Z축으로 놓는 공간.

면을 기준으로 노멀 값.

3개의 벡터를 기준으로 되어있다.

 

T : Tangent vector (접선 벡터)

B : Binormal vector (종법선 벡터)

N : Normal vector (법선 벡터)

 

한 점의 법선(normal)벡터, 그리고 접선(tangent)벡터, 그리고 법선과 접선을 외적한 바이노멀(binormal)벡터를 축으로 하는 공간이다.

 

왜 tangent space라고 부르나요?

평면을 옆에서 봤을 때 밑면과 이루는 탄젠트 값이 즉 이 평면의 기울기를 결정하기 때문에 tangent space 라고 부른다.

 

폴리곤의 평면에서 수직인 법선(normal)로 폴리곤의 기울기 값을 만들고,

접선의 나머지 두 축으로 어느방향으로 기울었는지를 나타내어, 이 세개의 축을 가지고 만든 좌표계를 접선 좌표계라고 부르고 이 좌표계가 존재하는 공간을 접선 공간(tangent space)이라고 한다. 

 

# 큐브 만들기

 

1. Index Buffer 

@ 개념 
 - 정점 버퍼에 들어간 순서인 index를 이용하여 삼각형을 구성하는 buffer

 

이런 큐브를 기존에 사용하던 Vertex Buffer 방식으로 표현하려면?
한 삼각형에는 3개의 정점이 필요. 
한 면에는 2개의 삼각형이 필요.
총 6개의 면이므로 3x2x6 = 36개의 정점 데이터가 필요하다.

+) 정점의 갯수에는 민감해야 하는 이유? PS나 XBOX같은 콘솔 플랫폼의 경우는 제한된 메모리 내에서 그래픽 카드의 최고 성능을 발휘해야 한다. 따라서 메모리 사용량이 너무 많으면 performance 측면에서 좋지 않다.

일반적으로 Vertex Buffer를 이용할 때 36개의 정점이 필요한 이런 경우에 이 정점의 갯수를 줄일 수 있는 방법은 없을까? 바로 중복된 정점을 이용하는 것이다. 즉 36개의 정점 데이터가 필요한 것이 아니라 육면체에  최소로 필요한 8개의 정점 데이터만 있으면 된다. 

'DirectX 11 3d' 카테고리의 다른 글

230509 skybox 개선 (스피어->큐브)  (0) 2023.05.11
230508  (0) 2023.05.11
220504  (0) 2023.05.10
220503  (0) 2023.05.09
220502  (0) 2023.05.09