3D XNA 게임에 그림자를 추가하고 싶습니다. 하나의 조명과 하나의 카메라로 테스트 환경을 설정했습니다. 그러나 나는 내 접근 방식으로 인공물을 만난다.
http://pastebin.com/zXi0hmsU 의 셰이더 코드 를 사용하여 최종 결과를 렌더링하고 http://pastebin.com/rY4Gcj9N 을 사용하여 그림자 맵을 만듭니다. 이 코드는 매우 직설적이며 빛의 관점에서 뎁스 맵을 생성 한 다음이를 카메라 공간에 투영하고 폐색 여부를 확인합니다.
그러나 대부분의 각도에서 나는 꽤 추악한 결과를 얻었습니다.
장면은 몇 가지 간단한 큐브 (손으로 구성되어 외부를 향하고 후면이 컬링 됨), 하나의 조명 (왼쪽 상단 모서리에 표시된 그림자 맵-괜찮아 보입니다)과 하나의 카메라로 구성됩니다.
그림자 맵에 대한 내 RenderTarget은
int shadowMapSize = 512;
RenderTarget2D shadowMap = new RenderTarget2D(GraphicsDevice, shadowMapSize,
shadowMapSize, true, GraphicsDevice.PresentationParameters.BackBufferFormat,
DepthFormat.Depth24Stencil8);
GraphicsDevice.SetRenderTarget(shadowMap);
GraphicsDevice.Clear(Color.White);
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
그런 다음 CreateShadowMap
효과가 적용된 다음 LambertWithShadows 효과가 적용됩니다. 마지막으로 그림자 맵은을 사용하여 그려집니다 SpriteBatch
.
나머지 코드는 쉐이더에 올바른 값을 제공하는 것입니다. 필요한 경우 잘 제공 할 수 있습니다.