คำถามติดแท็ก projection-matrix

2
ทำไมเราต้องการพิกัดที่สี่เพื่อหารด้วย z
ฉันอ่านคำตอบที่นี่: กราฟิกการ์ดทำหน้าที่อย่างไรกับองค์ประกอบที่สี่ของเวกเตอร์เป็นตำแหน่งสุดท้าย "องค์ประกอบที่สี่เป็นกลอุบายในการติดตามการฉายภาพเปอร์สเปคทีฟเมื่อคุณฉายภาพเปอร์สเปคทีฟคุณต้องการหารด้วย z: x '= x / z, y' = y / z แต่นี่ไม่ใช่การดำเนินการที่ สามารถดำเนินการได้โดยเมทริกซ์ 3x3 ที่ทำงานบนเวกเตอร์ของ x, y, z เคล็ดลับที่กลายเป็นมาตรฐานสำหรับการทำเช่นนี้คือการผนวกพิกัดที่สี่, w, และประกาศว่า x, y, z จะถูกหารด้วย w เสมอ หลังจากการแปลงทั้งหมดถูกนำไปใช้และก่อนการแรสเตอร์ แต่ฉันไม่เข้าใจว่าทำไมเราจึงหารด้วย z ด้วยเมทริกซ์ 3x3 ไม่ได้? เราไม่สามารถคูณด้วย 1/z 0 0 0 1/z 0 0 0 1/z เพื่อรับ [x/z y/z 1] …

5
ฉันจะฉายจุดหลังกล้องได้อย่างถูกต้องได้อย่างไร?
ฉันกำลังสร้างเกม 3 มิติโดยใส่เครื่องหมายอัศเจรีย์เหนือจุดสนใจ เพื่อที่จะหาว่าในหน้าจอ 2D ที่ฉันควรวางเครื่องหมายของฉันฉันกำลังฉายจุด 3D ด้วยตนเองที่เครื่องหมายควร ดูเหมือนว่านี้: ดูดีทีเดียว เมื่อเครื่องหมายอยู่นอกหน้าจอฉันเพียงแค่คลิปพิกัดเพื่อให้พอดีกับหน้าจอ ดูเหมือนว่านี้: จนถึงตอนนี้ความคิดก็ไปได้สวย อย่างไรก็ตามเมื่อจุดที่น่าสนใจอยู่ด้านหลังกล้องพิกัด X, Y ที่ได้จะกลับด้าน (เหมือนเป็นบวก / ลบ) และฉันก็ได้เครื่องหมายที่ปรากฏบนมุมตรงข้ามของหน้าจอดังนี้: (จุดที่คาดการณ์ไว้จากนั้นเป็นจุดปลายของเครื่องหมายไม่ต้องคำนึงถึงการหมุนของเครื่องหมาย) มันสมเหตุสมผลแล้วเนื่องจากพิกัดที่อยู่เบื้องหลัง frustum นั้นกลับด้านใน X และ Y ดังนั้นสิ่งที่ฉันทำคือสลับกลับพิกัดเมื่ออยู่ด้านหลังกล้อง อย่างไรก็ตามฉันยังไม่รู้ว่าอะไรเป็นเงื่อนไขที่แน่นอนเมื่อพิกัดควรกลับด้าน นี่คือสิ่งที่รหัสการคาดการณ์ของฉันดูเหมือน (ใน C # กับ SharpDX): public override PointF ProjectPosition(float viewportWidth, float viewportHeight, float y) { var projectionMatrix = Matrix.PerspectiveFovRH(GetCalibratedFOV(Camera.FOV, …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.