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