คำถามติดแท็ก shadow-mapping

2
จัดการ Projective Aliasing ในการแมป Shadow
ฉันเล่นซอกับการสร้างแบบจำลอง 3 มิติขั้นตอนง่าย ๆ เพื่อสร้างอาคารเล็ก ๆ สำหรับการพิมพ์ 3 มิติ ตัวอย่าง: เพื่อให้แบบจำลองบนหน้าจอที่อ่านง่ายขึ้นฉันได้ใช้การทำแผนที่เงาพื้นฐานสำหรับแสงทิศทางเดียว เนื่องจากฉากของฉันไม่เปลี่ยนไปฉันเพิ่งเรนเดอร์แผนที่เงาเมื่อใช้กล่องจัดแนวแกนของฉากเพื่อหาว่าขอบเขตของแผนที่เงาควรเป็นเท่าไหร่ เงาและขอบเขตดูเหมือนว่าฉันมีเมทริกซ์ทั้งหมดถูกต้อง แต่การเข้ามาใกล้ขึ้นเล็กน้อยดูแย่มาก: จากการอ่านที่ฉันทำฉันเข้าใจแพนเตอร์ปีเตอร์และสิ่งที่ฉันอาจทำเกี่ยวกับมัน แต่ขอบมอมแมมซึ่งฉันเชื่อว่าเป็นรูปแบบของนามแฝง projective ดูไม่ดีว่าฉันคิดว่ามีบางอย่างผิดปกติในการใช้งานพื้นฐานของฉัน ฉันแฮ็กพิกเซลแชร์เดอร์เพื่อแสดงขอบเขตเงาของเท็กเซล: ฉันได้รับการกรองแบบ bilinear ในพื้นผิว (โดยไม่ได้ฉันได้รับสิวที่ร้ายแรง) น่าเศร้าที่ความพยายามของฉันที่ PCF ล้มเหลวเช่นกัน - ดูเหมือนว่าจะมอมแมม: นี่คือตัวอย่างกรณีเดียวที่ปิดใช้งานการกรอง bilinear: สิ่งนี้มีลักษณะคล้ายนามแฝง projective "ทั่วไป" หรือไม่? สามารถเรนเดอร์แผนที่เงาแบบไดนามิกโดยใช้มุมมอง frustum ที่ตัดกับฉากหรืออาจจะเป็นแบบเรียงซ้อนแก้ปัญหาได้หรือไม่ แก้ไข: การเพิ่มโคลสอัพของการกรอง bilinear, การเปรียบเทียบเงาของโพสต์, เพื่อแสดงสิ่งที่ฉันได้รับ สิวเงาไม่ดีปรากฏขึ้นเนื่องจากขอบภายใน ฉันกำลังสร้างโมเดลด้วยบล็อกเสมือนแบบเรียงซ้อนและไม่ดำเนินการรวมกันอย่างเหมาะสม จากการอ่านของฉันการใช้การดำเนินการบูลีนบนโพลีเฮดนั้นไม่สำคัญ แต่จะช่วยให้ฉันสามารถใช้วอลลุ่มเงาคงที่รวมถึงทำความสะอาดสำหรับซอฟต์แวร์การพิมพ์ 3 มิติ

1
ปัญหาการแมปเงาของ WebGL รอบทิศทาง
ก่อนอื่นฉันอยากจะบอกว่าฉันได้อ่านบทความมากมายเกี่ยวกับการทำแผนที่เงาโดยใช้แผนที่ความลึกและ cubemaps และฉันเข้าใจว่ามันทำงานอย่างไรและฉันมีประสบการณ์การทำงานกับพวกเขาด้วยการใช้ OpenGL แต่ฉันมีปัญหาในการใช้งาน เทคนิคการทำแผนที่เงารอบทิศทางโดยใช้แหล่งกำเนิดแสงจุดเดียวในเครื่องมือกราฟิก 3 มิติของฉันชื่อ "EZ3" เอ็นจิ้นของฉันใช้ WebGL เป็น API กราฟิก 3D และ JavaScript เป็นภาษาการเขียนโปรแกรมสำหรับวิทยานิพนธ์ปริญญาตรีสาขาวิทยาศาสตร์คอมพิวเตอร์ โดยทั่วไปนี่คือวิธีที่ฉันใช้อัลกอริทึมการแมปเงาของฉัน แต่ฉันจะเน้นเฉพาะกรณีไฟจุดเพราะพวกเขาสามารถเก็บการแมปเงารอบทิศทาง ครั้งแรกที่ฉันใช้งานการเลือกสรรด้านหน้าแบบนี้: if (this.state.faceCulling !== Material.FRONT) { if (this.state.faceCulling === Material.NONE) gl.enable(gl.CULL_FACE); gl.cullFace(gl.FRONT); this.state.faceCulling = Material.FRONT; } ประการที่สองฉันสร้างโปรแกรมความลึกเพื่อบันทึกค่าความลึกสำหรับใบหน้า cubemap แต่ละอันนี่คือรหัสโปรแกรมความลึกของฉันใน GLSL 1.0: Vertex Shader: precision highp float; attribute vec3 position; uniform …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.