ทำไม
เพราะกล้องแสดงมุมมองการฉาย
แต่ในกรณีของกล้อง 3D (กล้องเสมือนจริง) กล้องจะเคลื่อนไหวแทนโลก ฉันได้อธิบายอย่างละเอียดภายหลังคำตอบนี้
การทำความเข้าใจทางคณิตศาสตร์
มุมมองโปรเจคชั่นเคลื่อนที่ไปรอบ ๆ อวกาศและเปลี่ยนทิศทางของมัน สิ่งแรกที่สังเกตได้คือการฉายภาพที่ต้องการบนหน้าจอจะไม่เปลี่ยนแปลงตามทิศทางการมอง
ด้วยเหตุนี้เราจึงเปลี่ยนสิ่งอื่น ๆ เพื่อให้ได้ภาพที่ต้องการ
ความเข้าใจจาก http://opengl.org
เพื่อให้ภาพลักษณ์ของการเคลื่อนไหวกล้องแอพพลิเคชั่น OpenGL ของคุณต้องย้ายฉากด้วยการกลับกันของการเปลี่ยนแปลงของกล้อง ที่เกี่ยวข้องกับ OpenGL ไม่มีกล้อง โดยเฉพาะอย่างยิ่งกล้องจะอยู่ที่พิกัดตาเสมอ (0, 0, 0)
ความเข้าใจจาก http://open.gl
และต้องการแชร์บรรทัดต่อไปนี้จากส่วนดูเมทริกซ์ของhttp://open.gl/transformations
ในการจำลองการเปลี่ยนแปลงของกล้องคุณต้องเปลี่ยนโลกด้วยค่าผกผันของการแปลงนั้น ตัวอย่าง: หากคุณต้องการเลื่อนกล้องขึ้นคุณต้องเลื่อนโลกลงแทน
ทำความเข้าใจกับมุมมอง
ในโลกแห่งความเป็นจริงเราเห็นสิ่งต่าง ๆ ในแบบที่เรียกว่า "มุมมอง"
มุมมองหมายถึงแนวคิดที่ว่าวัตถุที่อยู่ไกลออกไปดูเหมือนจะเล็กกว่าวัตถุที่อยู่ใกล้คุณ มุมมองยังหมายความว่าหากคุณกำลังนั่งอยู่กลางถนนตรงคุณจะเห็นเส้นขอบถนนเป็นเส้นบรรจบสองเส้น
นั่นคือมุมมอง มุมมองเป็นสิ่งสำคัญในโครงการ 3 มิติ หากไม่มีมุมมองโลกแห่ง 3D จะดูไม่เหมือนจริง
แม้ว่าสิ่งนี้อาจดูเป็นธรรมชาติและชัดเจน แต่สิ่งสำคัญคือต้องพิจารณาว่าเมื่อคุณสร้างการแสดงผล 3 มิติบนคอมพิวเตอร์คุณกำลังพยายามจำลองโลก 3 มิติบนหน้าจอคอมพิวเตอร์ซึ่งเป็นพื้นผิว 2 มิติ
ลองจินตนาการว่าด้านหลังหน้าจอคอมพิวเตอร์มีฉาก 3 มิติที่แปลกและคุณกำลังดูผ่าน "แก้ว" ของหน้าจอคอมพิวเตอร์ของคุณ เมื่อใช้เปอร์สเปคทีฟเป้าหมายของคุณคือการสร้างโค้ดที่แสดงสิ่งที่ "ฉาย" บนหน้าจอแก้วของคุณราวกับว่ามีโลก 3 มิติที่แท้จริงอยู่ด้านหลังหน้าจอ ข้อแม้เดียวคือโลก 3 มิตินี้ไม่จริง ... มันเป็นเพียงการจำลองทางคณิตศาสตร์ของโลก 3 มิติ
ดังนั้นเมื่อใช้การเรนเดอร์ 3D เพื่อจำลองฉากในแบบ 3 มิติแล้วฉายฉาก 3D ลงบนพื้นผิว 2 มิติของหน้าจอกระบวนการนี้เรียกว่าการฉายภาพมุมมอง
เริ่มต้นด้วยการจินตนาการสิ่งที่คุณต้องการบรรลุ หากวัตถุอยู่ใกล้กับผู้ดูวัตถุนั้นจะต้องใหญ่ขึ้น หากวัตถุนั้นอยู่ไกลออกไปวัตถุนั้นจะต้องเล็กกว่า นอกจากนี้หากวัตถุเคลื่อนที่ห่างจากตัวแสดงเป็นเส้นตรงคุณต้องการให้มันมาบรรจบกันที่กึ่งกลางของหน้าจอขณะที่มันเคลื่อนที่ออกไปไกลกว่าระยะทาง
แปลมุมมองเป็นคณิตศาสตร์
เมื่อคุณดูภาพประกอบตามรูปต่อไปนี้ให้จินตนาการว่าวัตถุอยู่ในตำแหน่งในฉาก 3 มิติของคุณ ในโลก 3 มิติตำแหน่งของวัตถุสามารถอธิบายได้เป็น xW, yW, zW หมายถึงระบบพิกัด 3 มิติที่มีจุดกำเนิดในจุดตา นั่นคือสิ่งที่วัตถุถูกวางตำแหน่งจริงในฉาก 3 มิติเหนือหน้าจอ
เมื่อผู้ดูมองวัตถุนี้บนหน้าจอวัตถุ 3 มิติจะ "ฉาย" ไปยังตำแหน่ง 2D ที่อธิบายว่าเป็น xP และ yP ซึ่งอ้างอิงระบบพิกัด 2D ของหน้าจอ (ระนาบการฉายภาพ)
ในการใส่ค่าเหล่านี้ลงในสูตรทางคณิตศาสตร์ฉันจะใช้ระบบพิกัด 3 มิติสำหรับพิกัดโลกโดยที่แกน x ชี้ไปทางขวา y ชี้ขึ้นและ z จุดบวกภายในหน้าจอ ต้นกำเนิด 3 มิติหมายถึงตำแหน่งของสายตาของผู้ดู ดังนั้นแก้วของหน้าจออยู่บนระนาบมุมฉาก (ที่มุมฉาก) ถึงแกน z, ที่ z บางอันที่ฉันจะเรียกว่า zProj
คุณสามารถคำนวณตำแหน่งที่คาดการณ์ xP และ yP โดยการหารตำแหน่งโลก xW และ yW ด้วย zW ดังนี้:
xP = K1 * xW / zW
yP = K2 * yW / zW
K1 และ K2 เป็นค่าคงที่ที่ได้มาจากปัจจัยทางเรขาคณิตเช่นอัตราส่วนภาพของระนาบการฉายภาพของคุณ (วิวพอร์ตของคุณ) และ "มุมมองภาพ" ของดวงตาซึ่งคำนึงถึงระดับการมองเห็นมุมกว้าง
คุณสามารถดูว่าการแปลงสภาพนี้จำลองมุมมองได้อย่างไร จุดที่อยู่ใกล้ด้านข้างของหน้าจอจะถูกผลักไปที่กึ่งกลางเมื่อระยะทางจากตาเพิ่มขึ้น (zW) ในขณะเดียวกันคะแนนที่อยู่ใกล้กับศูนย์กลาง (0,0) จะได้รับผลกระทบน้อยกว่ามากจากระยะห่างจากดวงตาและอยู่ใกล้กับศูนย์กลาง
การหารด้วย z นี้เป็น "การแบ่งมุมมอง" ที่มีชื่อเสียง
ตอนนี้ให้พิจารณาว่าวัตถุในฉาก 3 มิตินั้นถูกกำหนดให้เป็นชุดของจุดยอด ดังนั้นการใช้การแปลงรูปแบบนี้กับจุดยอดทั้งหมดของเรขาคณิตทำให้คุณมั่นใจได้ว่าวัตถุจะหดตัวเมื่ออยู่ห่างจากจุดสายตามากขึ้น
คดีสำคัญอื่น ๆ
- ในกรณีของกล้อง 3D (กล้องเสมือนจริง) กล้องจะเคลื่อนไหวแทนโลก
เพื่อให้เข้าใจกล้อง 3 มิติได้ดียิ่งขึ้นลองจินตนาการว่าคุณกำลังถ่ายภาพยนตร์ คุณต้องตั้งค่าฉากที่คุณต้องการถ่ายและคุณต้องการกล้อง เพื่อให้ได้ภาพคุณจะท่องไปทั่วฉากด้วยกล้องถ่ายภาพวัตถุในฉากจากมุมและมุมมองที่แตกต่างกัน
กระบวนการถ่ายทำเดียวกันนี้เกิดขึ้นกับกล้อง 3D คุณต้องมีกล้อง "เสมือน" ซึ่งสามารถท่องไปทั่วฉาก "เสมือน" ที่คุณสร้างขึ้น
รูปแบบการถ่ายภาพยอดนิยมสองรูปแบบเกี่ยวข้องกับการดูโลกผ่านสายตาของตัวละคร (หรือเรียกอีกอย่างว่ากล้องคนแรก) หรือเล็งกล้องไปที่ตัวละครและทำให้พวกมันอยู่ในมุมมอง
นี่คือหลักฐานพื้นฐานของกล้อง 3D: กล้องเสมือนจริงที่คุณสามารถใช้เพื่อท่องไปรอบ ๆ ฉาก 3 มิติและแสดงภาพจากมุมมองที่เฉพาะเจาะจง
ทำความเข้าใจเกี่ยวกับอวกาศโลกและพื้นที่ดู
ในการเขียนโค้ดพฤติกรรมประเภทนี้คุณจะแสดงเนื้อหาของโลก 3 มิติจากมุมมองของกล้องไม่ใช่เพียงจากมุมมองระบบพิกัดโลกหรือจากมุมมองคงที่อื่น ๆ
โดยทั่วไปแล้วฉาก 3 มิติจะมีชุดของโมเดล 3 มิติ แบบจำลองถูกกำหนดให้เป็นชุดของจุดยอดและรูปสามเหลี่ยมอ้างอิงถึงระบบพิกัดของตัวเอง พื้นที่ที่โมเดลถูกกำหนดเรียกว่าพื้นที่ model (หรือ local)
หลังจากวางวัตถุจำลองลงในฉาก 3 มิติแล้วคุณจะเปลี่ยนจุดยอดของโมเดลเหล่านี้โดยใช้เมทริกซ์ "การแปลงสภาพโลก" แต่ละวัตถุมีเมทริกซ์โลกของตัวเองที่กำหนดว่าวัตถุอยู่ในโลกและวิธีการที่จะเน้น
ระบบอ้างอิงใหม่นี้เรียกว่า "พื้นที่โลก" (หรือพื้นที่โลก) วิธีง่ายๆในการจัดการคือการเชื่อมโยงโลกแปลงเมทริกซ์กับแต่ละวัตถุ
ในการใช้งานพฤติกรรมของกล้อง 3D คุณจะต้องดำเนินการตามขั้นตอนเพิ่มเติม คุณจะอ้างอิงโลกไม่ใช่แหล่งกำเนิดของโลก แต่อ้างอิงถึงระบบอ้างอิงของกล้อง 3D เอง
กลยุทธ์ที่ดีคือการใช้กล้องเป็นวัตถุ 3 มิติที่แท้จริงในโลก 3 มิติ เช่นเดียวกับวัตถุ 3 มิติอื่น ๆ คุณใช้เมทริกซ์ "การแปลงสภาพโลก" เพื่อวางกล้องในตำแหน่งและทิศทางที่ต้องการในโลก 3 มิติ เมทริกซ์การแปลงโลกของกล้องนี้แปลงวัตถุกล้องจากการหมุนแบบดั้งเดิม (ตามแนวแกน z) ไปยังโลกจริง (ตำแหน่ง xc, yc, zc) และการหมุนโลก
รูปต่อไปนี้แสดงความสัมพันธ์ระหว่างระบบพิกัดโลก (x, y, z) และระบบพิกัดมุมมอง (กล้อง) (x ', y', z ')