6
การเรนเดอร์ tilemap ที่ไร้รอยต่อ (ภาพที่อยู่ติดกันแบบไร้ขอบ)
ฉันมีเอ็นจิ้นเกม 2D ที่ดึงแผ่นกระเบื้องโดยการวาดแผ่นจากภาพชุดไพ่ เนื่องจากตามค่าเริ่มต้นแล้ว OpenGL สามารถห่อทั้งพื้นผิว ( GL_REPEAT) และไม่ได้เป็นส่วนหนึ่งของมันเท่านั้นไทล์แต่ละอันจึงแยกออกเป็นพื้นผิวแยกต่างหาก จากนั้นพื้นที่ของไทล์เดียวกันจะแสดงผลติดกัน นี่คือสิ่งที่ดูเหมือนว่าเมื่อทำงานตามที่ตั้งใจไว้: อย่างไรก็ตามทันทีที่คุณแนะนำการปรับสัดส่วนแบบตะเข็บปรากฏ: ทำไมสิ่งนี้ถึงเกิดขึ้น ฉันคิดว่าเป็นเพราะการกรองเชิงเส้นเป็นการผสมผสานเส้นขอบของคณะสี่คน แต่มันก็ยังคงเกิดขึ้นกับการกรองแบบจุด วิธีแก้ปัญหาเดียวที่ฉันพบคือการรับประกันว่าการวางตำแหน่งและการปรับขนาดทั้งหมดจะเกิดขึ้นที่ค่าจำนวนเต็มและใช้การกรองแบบจุดเท่านั้น สิ่งนี้สามารถลดคุณภาพการมองเห็นของเกม (โดยเฉพาะการวางตำแหน่งพิกเซลย่อยไม่ทำงานอีกต่อไปดังนั้นการเคลื่อนไหวจะไม่ราบรื่น) สิ่งที่ฉันได้ลอง / พิจารณา: การลดรอยหยักจะลด แต่ไม่ได้กำจัดรอยตะเข็บทั้งหมด การปิดการทำแผนที่ไม่มีผล เรนเดอร์แต่ละแผ่นแยกกันและขับขอบ 1px - แต่นี่เป็นการลดประสิทธิภาพเนื่องจากมันไม่สามารถแสดงพื้นที่ของกระเบื้องได้ในคราวเดียวและสร้างสิ่งประดิษฐ์อื่น ๆ ตามขอบของพื้นที่โปร่งใส เพิ่มเส้นขอบ 1px รอบ ๆ รูปภาพต้นทางและทำซ้ำพิกเซลสุดท้าย - แต่จากนั้นจะไม่มีกำลังไฟสองอีกต่อไปทำให้เกิดปัญหาความเข้ากันได้กับระบบที่ไม่มีการสนับสนุน NPOT การเขียน shader ที่กำหนดเองเพื่อจัดการกับภาพที่มีการเรียงต่อกัน - แต่แล้วคุณจะทำอะไรที่แตกต่างออกไป? GL_REPEATควรจับพิกเซลจากด้านตรงข้ามของภาพที่ขอบและไม่เลือกความโปร่งใส เรขาคณิตอยู่ติดกันอย่างแน่นอนไม่มีข้อผิดพลาดในการปัดเศษจุดลอยตัว ถ้า Shader ส่วนจะเขียนยากที่จะกลับมามีสีเดียวกันตะเข็บหายไป ถ้าพื้นผิวมีการกำหนดให้GL_CLAMPแทนGL_REPEAT, ตะเข็บหายไป …