• Home
  • About
    • 게임 개발자 유정룡 photo

      게임 개발자 유정룡

      포트폴리오

    • Learn More
    • Email
    • Github
    • Bitbucket
  • Projects
    • All Projects
    • All Tags

Direct3D11 공부 20일차(CubeSky)

23 Jun 2021

Reading time ~1 minute

CubeSky

그럼 지금 이걸갖고 어떤걸 만들 수 있을까?

물론 각 면이 다른 오브젝트를 만들 수 있겠지만, 이걸 많이 사용하는 곳은 Sky다.

게임을 하면 아무리 움직여도 환경은 움직이지 않다.

만드는 방법은 간단하다 저 오브젝트를 카메라를 따라다니게 하면 된다.

그런데 지금까지 두르기 순서를 생각하면서 렌더링을 했다. 그런데 카메라를 따라다니면 카메라에서 저 오브젝트가 안보인다. 두르기 순서가 반대이기 때문이다.

그러면 쉐이더에서 그걸 반대로 뒤집어 주면 된다.

CubeSky.fx

RasterizerState FrontCounterClockWise_True
{
    FrontCounterClockWise = True;
};
technique11 T0
{
	pass P0
	{
        SetRasterizerState(FrontCounterClockWise_True);

		SetVertexShader(CompileShader(vs_5_0, VS()));
        SetPixelShader(CompileShader(ps_5_0, PS()));
    }
}

이 함수는 지금까지 시계방향으로 그려줬던 것을 반대로 시계 반대방향으로 그려주는 함수이다.

이렇게 하고,

CubeSky.cpp

void CubeSky::Update()
{
	Vector3 position;
	Context::Get()->GetCamera()->Position(&position);

	sphere->Position(position);
}

매 프레임마다 카메라를 따라다니게 하면

주면 환경이 만들어지긴 했는데 주면 오브젝트가 안보인다……

무슨 일인고 하니 간단하다 그냥 저 오브젝트에 가려저서 안보이는거다.

해결 방법은 Depth를 설정하는 방법이다.

DepthBuffer가 있긴 하지만, 이건 나중에 배우고 깊이에 따라 그려줄지 안그려줄지 이 상황만 설정하는것이다.

깊이에 따라 안그려주면 그냥 그린뒤 다시 켜주면 그때부터 깊이에 따라 그려주고 다시 꺼주면 반복이다.

이걸 생각하면 Sky를 그릴때 Depth를 꺼주고 오브젝트 그릴때 켜주면 된다.

CubeSky.fx

DepthStencilState DepthEnable_False
{
    DepthEnable = false;
};

technique11 T0
{
	pass P0
	{
        SetRasterizerState(FrontCounterClockWise_True);
        SetDepthStencilState(DepthEnable_False, 0);

		SetVertexShader(CompileShader(vs_5_0, VS()));
        SetPixelShader(CompileShader(ps_5_0, PS()));
    }
}

DepthEnable_False 이걸로 꺼주게 되면

잘 나온다.



DirectX Share Tweet +1