ฉันเปิดโปรแกรม 3D ของฉันเองใน JavaScript และใช้เฉพาะภาพวาดบนผ้าใบไม่มี WebGL นี่เป็นโคลน Minecraft อีกอัน; ฉันรักกล่องอย่าตัดสินฉัน
จนถึงตอนนี้ทุกอย่างใช้งานได้อย่างยอดเยี่ยมยกเว้นสิ่งหนึ่ง: ในแบบ 3 มิติเมื่อจุดยอดเยี่ยมอยู่ด้านหลังระนาบรูปวาดใกล้การฉายภาพบนหน้าจอของพวกเขาออกมาแปลก ๆ (สมมติว่าจุดยอดอื่น ๆ ที่ใช้ติดตามเครื่องบินอยู่ด้านหน้า)
ฉันพยายามตัดจุดเหล่านี้ แต่จากนั้นฉันสามารถเห็นรางพื้นผิวที่ใช้จุดยอดเหล่านี้ ใน WebGL / OpenGL การ์ดกราฟิกจะดูแลจุดเหล่านี้และระนาบแสดงผลอย่างถูกต้อง แต่ฉันไม่สามารถเข้าถึงฮาร์ดแวร์ได้ดังนั้นฉันจะต้องใช้รหัสนี้เอง
ฉันไม่แน่ใจว่าสิ่งที่จะทำให้มันในขณะนี้สิ่งสุดท้ายที่อยู่ในใจคือการย้อนกลับการฉายของจุดที่อยู่เบื้องหลังระนาบการตัดของผู้เล่นซึ่งดูเหมือนว่ามีเหตุผลเพราะฉันต้องฉายจุดไปยังหน้าจอที่อยู่ข้างหน้า ของจุดสุดยอด
นี่คือความคิดของฉัน:
นี่คือภาพบางส่วนที่แสดงให้เห็นถึงสิ่งที่เกิดขึ้น:
จากระยะไกลกล่องสีฟ้าจะแสดงผลได้ดีอย่างสมบูรณ์
เมื่อจุดยอดหนึ่งไปด้านหลังระนาบการเล็มของผู้เล่นฉันจะฉายภาพย้อนกลับ แต่มันก็ดูไม่ถูก:
focalLength *= -1;
2d.x = x*focalLength/z;
2d.y = y*focalLength/z;
โปรดทราบว่าช่องสีเทาด้านหลังจะถูกลบออกอย่างสมบูรณ์เนื่องจากจุดยอดทั้งหมดที่ใช้วาดใบหน้านั้นอยู่ด้านหลังโปรแกรมเล่น
นี่คือสิ่งที่เกิดขึ้นเมื่อค้นหาขึ้นหรือลง
ฉันไม่รู้ว่าจะทำอย่างไรกับคณิตศาสตร์ที่อยู่เบื้องหลังสิ่งนี้ฉันหวังว่าจะมีใครบางคนประสบปัญหาเดียวกันแล้วและสามารถช่วยฉันได้
lineTo(x,y)
ฟังก์ชั่นจึงยังสามารถเรียกใช้ได้ แต่ฉันไม่รู้ว่ามันทำงานอย่างไร ... มันเป็นมิติที่แปลกประหลาดฉันเห็นด้วย