🕹️자체엔진/DirectX 11 개인공부

DirectX11 공부 4주차. 정반사광, 인스턴싱

Mawile 2021. 11. 17.

pinterest

 

안녕하세요오오옷!!

ㅠㅠㅠㅠ rastertek directx11 강좌사이트 끄적끄적해보다가... (빠밤..!!)

저가 매우 궁금해하던 인스턴스 구현에 관한 내용도 있더라구요!! ㅠㅠ

 

인스턴스 구현부분은 사실 rastertek에서 37번째에서 다뤄질 내용이였지만,

궁금증을 못참고 바로 임시로 건너뛰어버렸습니다..

 

"어떻게 하면 여러개의 도형을 그릴까?" 라는 궁금증이 사실 예전부터 있었습니다..

흑... 그걸 달성!! 해서 기분좋네요.

 

물론 rastertek강의 그대로 따라하는건 저의 성미에 맞지않기때문에 또 저 맘대로 수정했습니다 ㅋㅋㅋ

rastertek강의에서는 (5. 텍스쳐)에 관한 소스코드에 이어서 진행했지만,

저는 (10. 정반사광)로 이어서 진행했습니다.

 

왜냐하면 (5. 텍스쳐) 이부분은 아직3d도 아니기도하고.. 빛구현도 안했을때라서 ..

3d 모델 렌더링이랑 빛구현 다 거치고 난뒤의 내용으로 진행했답니다~~

 

참고

https://www.rastertek.com/

 

RasterTek - DirectX 10, DirectX 11, and DirectX 12 Tutorials

The purpose of this website is to provide tutorials for graphics programming using DirectX 10, DirectX 11, and DirectX 12. The DirectX tutorials are written using C++ with HLSL and use shader version 4.0, 5.0, and 5.1. I also have tutorials for different p

www.rastertek.com

 

4주차. 정반사광, 인스턴싱

우선 인스터싱을 구현하려면 기존코드에서 몇가지

바꿔야할 대표적인 사항(그렇다고 밑에서 말한것이 다(all)는 아닙니다.)이있습니다.

 

1. 인덱스버퍼 제거

 

2. 인덱스의 갯수를 그리는게 아니라 인스턴스의 갯수로 그린다.

 

3. InputLayout에 인스턴스의 xyz좌표를 계산하는 요소 추가

 

SemanticName은 셰이더에서 처리할 시맨틱의 이름입니다.

InputSlot은 인스턴스버퍼에 입력할 슬롯의 갯수입니다.

Format은 xyz와 같이 3개를 다룰거기때문에 rgb까지만

AlignedByteOffset은 시맨틱 순서를 정렬할거냐? 물어보는겁니다.

InputSlotClass는 인스턴스 이기때문에 변경

InstancedataStepRate는 정점버퍼를 한번 처리할때마다 인스턴스를 한번에 1개를 처리한다는 의미

SemanticIndex는 시맨틱의 순서입니다. 2로한 이유는 버텍스 셰이더 파일에 이미 카메라의 위치를 계산하는 원소가 시맨틱1번으로 되있기때문에 2로했습죠~

 

마지막으로 실행화면!!!

 

심심해서 텍스쳐 재질도 바꿔봤습니다 우헤헤~

크으으....ㅠㅠㅠㅠ

진짜 감동적인 순간이네요...

 

자체 게임엔진 만들수있는 그날까지!! 오오오옹우~~

 

그럼 안녕!

 


댓글