결과물

정규화 된 타일맵에서의 위치를 구한다.

 


코드

Terrain.cpp

현재 위치의 높이를 float으로 반환

GetHeightDemo.cpp

 


추가

이 방법의 단점

더보기

각타일이 크기가 정규화 되어야 사용가능하다.

비정규화된 맵에서 높이를 가져오려면 Trace를 사용해야한다.

'DirectX 11 > 코드 분석' 카테고리의 다른 글

Normal vector / Shadow  (0) 2022.02.09
Height map  (0) 2022.02.08
Texture Sampler  (0) 2022.02.08
Texture  (0) 2022.02.08
Grid / Camera  (0) 2022.02.08

결과물

 

각 타일의 수직벡터 Line debuging


코드

Terrian.fx

 

Terrian.cpp

[ 여기서 구하고자 하는 Normal값은 각 타일 삼각형의 노멀값이다 // 음영을 계산하기 위해 구함 ]

'DirectX 11 > 코드 분석' 카테고리의 다른 글

Get Height  (0) 2022.02.09
Height map  (0) 2022.02.08
Texture Sampler  (0) 2022.02.08
Texture  (0) 2022.02.08
Grid / Camera  (0) 2022.02.08

결과물

 


코드

 


추가

Height map

더보기

채널의 값을 불러와 높이정보로 사용할 수 있는 이미지를 뜻한다.

모두 흑백사진인데 이는 검은색( 0, 0, 0 ) 흰색 ( 1, 1, 1 ) 색상값을 통하여

0 ~ 1까지의 높이 비율로 표현할 수 있다.

많은 HeightMap

 

'DirectX 11 > 코드 분석' 카테고리의 다른 글

Get Height  (0) 2022.02.09
Normal vector / Shadow  (0) 2022.02.09
Texture Sampler  (0) 2022.02.08
Texture  (0) 2022.02.08
Grid / Camera  (0) 2022.02.08

결과물


코드

TextrueSampler.fx

픽셀셰이더 두개

 


'DirectX 11 > 코드 분석' 카테고리의 다른 글

Normal vector / Shadow  (0) 2022.02.09
Height map  (0) 2022.02.08
Texture  (0) 2022.02.08
Grid / Camera  (0) 2022.02.08
Index Buffer / World Scale, World Translation  (0) 2022.02.08

결과물


코드

TextureDemo.cpp

 


Texture.fx

 


추가

셰이더 리소스 뷰(Shader Resource View)

더보기

먼저 "리소스 뷰"는 리소스를 파이프라인에 연결해주는 객체이다.

'View' 라는 단어가 붙은 이유는 리소스를 특정 '시각'으로 해석한다는 의미이다.

 

그래서 종류가 4가지가 있는데 그중 셰이더 리소스 뷰는 

프로그램 가능 셰이더 단계가 리소스를 읽을 수 있게 한다.

프로그램 가능 셰이더 단계: vs, ps, gs...

읽을 수만 있기 때문에 기록하지는 못한다.

 

Sampler

더보기

계산된 픽셀에 맞도록 이미지를 맞춰주는것

이미지를 맞춰주는것 : address mode라는것과 filter가 있다.

 

  • address mode

uv좌표에서 u값이나 v값이 1이 넘어가면 어떻게 될까?

그 부분을 어떻게 처리할지 설정하는게 address mode이다.

u값, v값이 1보다 큰 픽셀에 어떻게 처리되는지 설정이 된다.
  • filter

우리가 넣을 텍스쳐는 크기가 정해져있다.

근데 그 텍스쳐를 매핑한 (정점4개로 이루어진)사각형의 크기가 크면 확대될것이고

사각형의 크기가 작으면 축소될것이다.

 

이는 즉 축소된다면 픽셀은 줄어들것이고 그 픽셀들의 색상은 어떻게 결정하고

확대되면 픽셀은 늘어날것인데 추가된 픽셀의 색상은 어떻게 결정할것인가?

=> 여러가지 보간방법으로 색상을 결정하는게 filter의 역할이다.

각 다른 보간법 / Anisotropic는 게임설정에 많이 나오던 MSAA와 연결된다.

※Linear의 식은 'A'------랜덤한 지점'x'------'B' 가 있다면

(1 - x) * A + x * B 이다.

 

 

보간기(Interpolator)

더보기

 

uv값은 정점의 실수 값이다. 

픽셀셰이더는 픽셀에 대한 계산인데 어떻게 계산이 될까? 궁금했다.

 

그건 레스터라이저단계에서 레스터라이저가

정점의 위치데이터를 가지고 픽셀들을 계산해준다면

같은 레스터라이저 단계에서 "보간기"라는게 정점의 다른데이터들을 픽셀에 맞게 보간해준다.

다른데이터 : 정점의 Normal값, 정점의 uv값...등등

그래서 픽셀셰이더에서 보간기로 수정된 uv값을 이용하여 계산할 수 있다.

 

텍스쳐 추가시

더보기

텍스쳐를 추가할때 사이즈를 2의 n승 에 맞게 가져오는게 성능상 좋다.

자동으로 2의n승에 맞게 사이즈가 조정되어 가져온다고한다.

ex) 589사이즈로 가져온다면 512로 조정된다.

 

 

https://www.3dgep.com/texturing-lighting-directx-11/

 

Texturing and Lighting in DirectX 11

In this tutorial you will learn how to implement Texturing and Lighting using a Pixel Shader in DirectX 11.

www.3dgep.com

 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=masca140&logNo=220719096462 

 

Direct3D 11의 자원들 (1)

자원을 이야기 하자면 자원 사용의 두 측면을 모두 살펴보는 것이 타당하다. 응용 프로그램의 관점에서 중...

blog.naver.com

 

'DirectX 11 > 코드 분석' 카테고리의 다른 글

Height map  (0) 2022.02.08
Texture Sampler  (0) 2022.02.08
Grid / Camera  (0) 2022.02.08
Index Buffer / World Scale, World Translation  (0) 2022.02.08
World, View, Projection  (0) 2022.02.08

결과물


코드

GrideDemo.cpp


Camera.cpp

 

Freedom.cpp ( class Freedom : public Camera )

 

'DirectX 11 > 코드 분석' 카테고리의 다른 글

Texture Sampler  (0) 2022.02.08
Texture  (0) 2022.02.08
Index Buffer / World Scale, World Translation  (0) 2022.02.08
World, View, Projection  (0) 2022.02.08
Triangle  (0) 2022.02.07

결과물

 


코드

IndexDemo.cpp

 


추가

DXGI_FORMAT

더보기

마지막에

GetDC()->IAsetIndexBuffer(indexBuffer, DXGI_FORMAT_R32_UINT, 0); 인 부분이 있는데

여기서 DXGI_FORMAT이란

 

리소스를 어떻게 해석할것인가 인데

리소스 :  Direct3D 파이프라인에서 액세스할 수 있는 메모리 영역, buffer유형과 texture유형이 있다.

 

종류에 R32G32B32, R16,G16,B16,A16...이런식으로 있다고 색과 관련된건아니다.

그냥 데이터가 몇개인지 분류하는 형식이다.

 

예를들어

DXGI_FORMAT_R32 는 어떤 32bit짜리 데이터하나가 있다는것이고

DXGI_FORMAT_R32B32는 어떤 32bit짜리 데이터형 A와 어떤 32bit짜리 데이터형 B가 있다는것이다.

 

그러므로 IAsetIndexBuffer(indexBuffer, DXGI_FORMAT_R32_UINT, 0); 코드에서

DXGI_FORMAT_R32_UINT가 넘어가는 이유는

indexBuffer가 4byte(32bit)UINT 으로 구성되어있다고 뜻하는 말이다.

 

https://docs.microsoft.com/en-us/windows/win32/direct3d10/d3d10-graphics-programming-guide-resources-types#texture-resources

 

Resource Types (Direct3D 10) - Win32 apps

All resources used by the Direct3D pipeline derive from two basic resource types: buffers and textures. A buffer is a collection of raw data (elements); a texture is a collection of texels (texture elements).

docs.microsoft.com

 

 

'DirectX 11 > 코드 분석' 카테고리의 다른 글

Texture Sampler  (0) 2022.02.08
Texture  (0) 2022.02.08
Grid / Camera  (0) 2022.02.08
World, View, Projection  (0) 2022.02.08
Triangle  (0) 2022.02.07

결과물

 


코드

World.cpp

 


World.fx

전역변수 생성


추가

UpdateSubresource

더보기

CPU에서 VRam으로 값을 복사해 넘겨주는데 두가지 방법이 있다.

그중 하나가 UpdateSubresource이다.

속도가 늦은편이라 대체로 CPU에서 업데이트가 드문드문할때 추천한다고 한다.

드문드문 : 프레임당 한번이하

Default Buffer의 경우, UpdateSubResource를 사용해서만 업데이트 할 수 있다.

Default Buffer는 속성중 Resource Usage Type이 DEFAULT인걸 뜻한다.

 

공간변환

더보기

정점위치에 공간행렬을 곱하면 그 공간으로 변환이 된다.

공간행렬은 각 공간의 원점과 세 축을 알면 만들 수 있다.

그래서 Vertex Shader에서 mul함수를 사용하는것

mul : multiply 곱셈

 

World

더보기

정점의 로컬공간으로도 움직일수 있는데 왜 world공간이 필요한가? 한다면

한번에 모두 이동시키기 편하기 때문이다.

 

정점은 모든 정점을 다 일일히 이동시켜줘야한다. = 매우 반복적이고 느림

world공간으로 계산한다면 한번에 모두 이동시킬수 있다.

 

그래서 거의 대부분 그려질 클래스들은 모두 정점버퍼를 가지고있고

그 정점을 움직이기 위해 world매트릭스를 가지고 있다.

 

 

https://grandstayner.tistory.com/entry/DirectX-11-UpdateSubResource-Map-Unmap-CopyResource-CopySubresourceRegion%EC%9D%98-%ED%8C%81

 

DirectX11 - UpdateSubResource(), Map() ~ Unmap(), CopyResource(), CopySubresourceRegion()의 팁

DirectX 11에서는 Resource에 데이터를 넣는 함수는 4개가 존재한다. UpdateSubresource(), Map() ~ Unmap(), CopyResource(), CopySubresourceRegion() 이 함수들은 자주 사용되는 만큼 어느 정도는 알고 사용해..

grandstayner.tistory.com

https://gamedevforever.com/230

 

D3D11에서 Lock ??

제가 연재하는 날은 아니지만, 최근 플밍 관련 글도 자주 올라오지 않고, 겸사 겸사 정리하고 있던 내용도 있던 찰나에 불쑥 제가 한번 난입했습니다. ㅎㅎㅎ. 다들 DirectX11 공부를 하고 계신지

gamedevforever.com

'DirectX 11 > 코드 분석' 카테고리의 다른 글

Texture Sampler  (0) 2022.02.08
Texture  (0) 2022.02.08
Grid / Camera  (0) 2022.02.08
Index Buffer / World Scale, World Translation  (0) 2022.02.08
Triangle  (0) 2022.02.07

+ Recent posts