본문 바로가기

전체 글339

6. Material 기존 방식으로는 물체를 만들 때 Shader, Texture, Mesh를 외부에 선언해서 합쳐주는 방식으로 사용했었음(테스트 목적) 그런데 이렇게 하면 물체가 많아지면 감당할 수 없음 그럼 하나의 객체에 묶어줘야 하나? 반은 맞다 하나의 묶어주는 대신 Material이라는 객체를 별도로 파서 같은 성질을 가진 객체들은 그 Material을 적용하는게 좋음 즉, Material은 쉐이더에서 관리하는 인자들을 모아서 하나의 클래스로 관리하는 것이다. *Material을 추가하면서 발생하는 변경점 1. ConstantBuffer의 Init에서 어떤 레지스터에 사용할 것인지를 넣어준다 ->Transform 용도, Material 용도 등 ->Init 함수에서 enum class를 받는데, 그 이유는 용도에 따라.. 2023. 1. 18.
5. Depth Stencil Buffer/View 투영이란? 원근법에서는 깊이는 어떻든간에 비율로 보겠다는 것 그렇지만 깊이도 무시할 수 없다 깊이값에 따라 어떤 사물은 가려지고 어떤 사물은 그려지기 때문 DX12에서는 깊이값에 따라 물체를 그려야 할지 말아야 할지를 결정함 (정확히는 물체보다는 픽셀 단위) 스텐실이란? 판에 구멍을 뚫고 잉크를 통과시켜 찍어내는 공판화 기법 *깊이 스텐실 버퍼에 float로 값을 넣는데, 스텐실을 안쓴다면 4바이트를 전부 깊이값으로 쓰고, 스탠실을 쓴다면 3바이트만 깊이로 쓰고 남은 1바이트는 스텐실 값으로 쓴다 *스텐실 작업은 이 1바이트 값을 이용해 스텐실 값 n을 가진 픽셀에 한해서 추가적인 작업을 진행한다 *DepthStencilBuffer/View를 추가해서 바뀌는 부분 1. DepthStencilBuffer .. 2023. 1. 17.
230116_D2D 삼각형 그리기 D3DCompileFromFile은 쉐이더코드를 컴파일해서 바이너리로 만들어주는 함수 ID3DBlob에 저장됨 ID3DBlob은 컴파일된 쉐이더 코드를 저장하는데 사용된다. 1. Device, Context 생성 - 초기화 단계 2. SwapChain 생성 - 생성되면서 BackBuffer를 가져오고 GetBuffer 함수를 통해 가져올 수 있다. 3. SwapChain을 통해 RenderTargetView 생성 - 가져온 BackBuffer를 통해 RenderTargetView를 생성할 수 있다. 4. 쉐이더 컴파일 및 쉐이더 생성 (Vertex, Pixel) - 쉐이더 코드 컴파일 (ID3DBlob에 저장됨) 후 그 코드를 통해 Shader를 만들 수 있다. ID3DBlob* vsBlob; ID3D1.. 2023. 1. 16.
4. Texture Mapping - 텍스쳐 매핑(Texture Mapping)이란? 3D 컴퓨터 그래픽에서 텍스쳐를 모델의 표면에 부착하는 것 - UV 좌표계란? - 텍스쳐 이미지의 2D 좌표를 3D 모델의 표면에 매핑할 때 사용되는 좌표계 - U는 가로축, V는 세로축을 나타낸다. - 3D 모델의 표면의 정점에는 UV 좌표가 할당되어 있고, 그 좌표를 통해 텍스쳐 이미지를 3D 모델 표면에 매핑할 수 있다. *Texture를 사용하면서 바뀌게 된 점 1. uv좌표가 추가됨에 따라 Shader에서 받는 인자도 추가됨 Texture2D tex_0 : register(t0); SamplerState sam_0 : register(s0); struct VS_IN { float3 pos : POSITION; float4 color : COLO.. 2023. 1. 16.