PostEffect.hlsl Shader 파일에 상수버퍼를 이용한 코드를 추가합니다.
cbuffer PS_Point : register(b11)
{
float2 Point;
float Size;
float PointPadding;
}
Scene Class 헤더 파일에 상수버퍼에 사용할 구조체를 선언합니다.
private 구역
struct Point // 상수버퍼용 구조체
{
Vector2 point; // 시작지점 변수(x,y)
float size; // 시야범위 변수
float padding; // 패딩용 변수
} _point;
ID3D11Buffer* PointBuffer; // 버퍼
// control을 위한 추가 변수들
float posx;
float posy;
float scale;
// fadein, fadeout 판별용 bool변수
bool fade;
Scene Class CPP 파일 내부에서 추가 작업 진행
// 1. 클래스 생성시 초기화
D3D11_BUFFER_DESC desc = { 0 };
desc.ByteWidth = sizeof(Point);
desc.Usage = D3D11_USAGE_DYNAMIC;
desc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;//상수버퍼
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
desc.MiscFlags = 0;
desc.StructureByteStride = 0;
HRESULT hr = D3D->GetDevice()->CreateBuffer(&desc, NULL, &PointBuffer);
assert(SUCCEEDED(hr));
D3D->GetDC()->PSSetConstantBuffers(11, 1, &PointBuffer);
posx = App.GetHalfWidth();
posy = App.GetHalfHeight();
scale = 200;
fade = true;
// 2. Update()함수에서 지속적으로 값을 넣어 갱신함
_point.point.x = posx;
_point.point.y = posy;
_point.size = scale;
D3D11_MAPPED_SUBRESOURCE mappedResource;
D3D->GetDC()->Map(PointBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
memcpy_s(mappedResource.pData, sizeof(Point), &_point, sizeof(Point));
D3D->GetDC()->Unmap(PointBuffer, 0);
// 3. 추가적으로 필요한 기능은 개인 취향껏 구현
gui & dwrite 를 사용하여 런타임중의 값변경을 좌측상단에 표시하였습니다.
시야의 범위가 점점 좁아지면 FadeOut, 점점 넓어지면 Fadein
'공부 > DirectX3D' 카테고리의 다른 글
[DirectX3D] PostEffect 블러(Blur)효과 적용하기 ( + Filter ) (0) | 2023.08.22 |
---|---|
[DirectX3D] 로딩씬(씬전환) (0) | 2023.08.21 |
[DirectX3D] RTT구현(미니맵만들기) (0) | 2023.08.16 |
[DirectX3D] 환경 맵핑(Environment Mapping) (0) | 2023.08.08 |
[DirectX3D] DxTex 큐브맵(CubeMap) 만들기 (0) | 2023.07.29 |
댓글