ฉันต้องการลองเพิ่มเงาให้กับเกม 3D XNA ฉันได้ตั้งค่าสภาพแวดล้อมการทดสอบด้วยแสงเดียวและกล้องหนึ่งตัว อย่างไรก็ตามฉันพบสิ่งประดิษฐ์ด้วยวิธีการของฉัน
ฉันใช้รหัส shader จาก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
สุดท้ายแผนที่เงาจะถูกดึงมาใช้
ส่วนที่เหลือของรหัสประกอบด้วยเพียงแค่ให้ค่าที่ถูกต้องให้กับเฉด หากจำเป็นฉันสามารถให้บริการได้เช่นกัน