Tôi muốn thử thêm bóng vào trò chơi XNA 3D. Tôi đã thiết lập một số môi trường thử nghiệm với một đèn và một camera. Tuy nhiên, tôi đang chạy vào các hiện vật với cách tiếp cận của tôi.
Tôi đang sử dụng mã shader từ http://pastebin.com/zXi0hmsU để hiển thị kết quả cuối cùng và http://pastebin.com/rY4Gcj9N để tạo bản đồ bóng. Mã này khá đơn giản và liên quan đến việc sản xuất sơ đồ độ sâu từ góc nhìn sáng, sau đó chiếu nó vào không gian máy ảnh và kiểm tra các chỗ ẩn.
Tuy nhiên, từ hầu hết các góc độ tôi đang nhận được kết quả khá xấu xí
Khung cảnh bao gồm một số hình khối đơn giản (được xây dựng bằng tay, hướng ra ngoài, mặt sau bị loại bỏ), một ánh sáng (bản đồ bóng hiển thị ở góc trên cùng bên trái - trông ổn) và một camera.
RenderTarget của tôi cho các bản đồ bóng được khởi tạo bởi
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;
Sau đó, CreateShadowMap
hiệu ứng được áp dụng, tiếp theo là hiệu ứng LambertWithShadows. Cuối cùng, bản đồ bóng được vẽ bằng cách sử dụng a SpriteBatch
.
Phần còn lại của mã bao gồm chỉ đơn giản là cung cấp các giá trị chính xác cho các shader. Nếu cần thiết, tôi có thể cung cấp nó tốt.