มาตรฐานพิกัด X, Y, Z?


12

ฉันค่อนข้างใหม่กับการพัฒนาเกม 3 มิติทุกชนิดอย่างไรก็ตาม เมื่อฉันอ่านบทช่วยสอนและตัวอย่างฉันพบว่าพิกัด X / Y / Z ดูเหมือนจะล้าหลังกว่าการคาดเดาครั้งแรกของฉัน

ฉันจินตนาการว่าหากมีคนกำลังเดินไปรอบ ๆ สนามตำแหน่ง X / Y ของพวกเขาจะเปลี่ยนไปและถ้าพวกเขากระโดดหรือเดินขึ้นหรือลงเนินเขาตำแหน่ง Z ของพวกเขาจะเปลี่ยนไป ข้อสันนิษฐานของฉันดูเหมือนจะผิดเพราะการเดินไปรอบ ๆ สนามดูเหมือนจะเปลี่ยน X / Z และกระโดดหรือขึ้นเขาลงไปตามทาง Y

1) ข้อสังเกตของฉันถูกต้องหรือไม่? 3D เป็นสิ่งใหม่สำหรับฉันและฉันอาจไม่ได้คิดถึงสิ่งต่าง ๆ อย่างเหมาะสม

2) ตรรกะเบื้องหลังการเคลื่อนไหวในแนวนอนคือ X / Z และการเคลื่อนที่แนวตั้งเป็น Y คืออะไร

3) ฉันจะใช้ X / Y เป็นแนวนอนในการเคลื่อนไหวในแนวนอนและ Z เป็นแนวตั้งใน XNA Framework หรือไม่


ระบบพิกัดซ้าย / ขวา DirectX เป็นมือซ้ายค่าเริ่มต้นใน OpenGL คือมือขวา
Jonathan Connell

คำตอบ:


19

สมมติฐานของคุณไม่ผิด: แต่ละเอ็นจินถือว่าพิกัดเหล่านี้แตกต่างกัน โดยทั่วไปการพูด X มักจะเป็นแกนของ East-West แต่ Y หรือ Z นั้นเป็นระดับความสูงหรือไม่ ตามที่ฉันเข้าใจ Quake 3, Source Engine และ Torque engine ต่างก็มี Z ตาม เครื่องมือสร้างแบบจำลอง 3DS Max ก็เช่นกัน มันไม่ใช่เรื่องแปลก

มันมีเหตุผลที่จะมีระบบพิกัดที่เรียงลำดับตามลำดับความสำคัญลดลงเพื่อให้การแทนค่าแบนราบลงในมิติที่น้อยลงนั้นง่ายต่อการเข้าใจ ตัวอย่างเช่นหากเกมของคุณตั้งอยู่บนแผนที่ความสูง 2D มันสมเหตุสมผลสำหรับ Z ที่ 'ขึ้น' เพราะจากนั้นพิกัด X และ Y ของคุณในแผนที่โลก 3 มิติโดยตรงไปยังพิกัด X และ Y บนแผนที่ความสูง ในทางกลับกันถ้าคุณคิดว่าในแง่ของการเรนเดอร์ (และนักพัฒนาโปรแกรมเกมจำนวนมาก) คุณเคยชินกับการ X และ Y เป็นพิกัดหน้าจอดังนั้นการเพิ่มแกนที่ 3 จะเข้าหรือออกจากหน้าจอตามธรรมชาติ

ใช้สิ่งที่ง่ายที่สุดสำหรับคุณ แต่พึงระวังว่าตัวเลือกใด ๆ เป็นไปตามอำเภอใจและคุณอาจจำเป็นต้องแปลงระหว่างสิ่งเหล่านี้และใช้ระบบพิกัดหลายระบบภายในโปรแกรมเดียว


ฉันชอบคำตอบอีกสองคำตอบที่ดีกว่า แต่เนื่องจากนี่เป็นคำตอบที่ได้รับการยอมรับข้อสังเกตที่ชี้ให้เห็นว่า Y เป็นแนวตั้งและ Z กำลังเข้าสู่หน้าจอเป็นวิธีที่ API ฮาร์ดแวร์ 3D ส่วนใหญ่ตั้งค่าให้ทำงาน (DirectX และ OpenGL) . หากคุณต้องการระบบของคุณเองให้ระวังสิ่งนี้เนื่องจากอาจจำเป็นต้องใช้การแปลบางอย่าง (บางสิ่งที่ใช้อย่างไม่ถูกต้อง แต่มักจะสามารถทำงานได้ตามที่ต้องการดังนั้น 'อาจจะเป็น' :))
James

1
ในทางเทคนิคแล้ว OpenGL นั้น Z จะออกมาจากหน้าจอโดยปริยายเมื่อคุณรวมทิศทางดังนั้นแม้ว่าทั้งสองและ DirectX จะมี Z ขนานกับทิศทางการดู แต่พวกมันก็ยังไม่เข้ากัน! เมื่อทำงานกับ 3D คุณจะต้องมีความสามารถในการทำงานจากระบบพิกัดหนึ่งไปสู่อีกระบบหนึ่งผ่านการหมุนการแปลและการปรับขนาด - แน่นอนว่านี่คือแบบจำลองที่เกิดขึ้นในโลก - ดังนั้นจึงไม่มีจุดใดที่ยึดติดกับแนวคิดใด ๆ มาตรฐาน.
Kylotan

เพียงแค่ชี้ให้เห็นเมื่อจัดการกับสามเหลี่ยมหลายล้านบางทีคุณต้องทำน้อยกว่าเพื่อต่อสู้กับระบบ coordiante ของฮาร์ดแวร์อาจจะดีกว่า;) สิ้นสุดวันทำให้เกมสนุกแม้จะมีระดับความเครียด .. ทำสิ่งที่คุณต้องการ: )
James

แนวคิดของ "Z" ที่เข้า / ออกจากหน้าจอหรือความสูงนั้นค่อนข้างทำให้เข้าใจผิด มันอาจจะง่ายกว่าที่จะคิดการเปลี่ยนแปลง เราส่งพิกัดจุดยอด 3D / 4D ซึ่งจะถูกเปลี่ยนเป็นพื้นที่หน้าต่าง 2D ในที่สุด แต่มีค่าความลึก ความคิดที่ว่า API ทำแผนที่พิกัดสามมิติของ X, Y หรือ Z ถึง "ความลึก" โดยเนื้อแท้นั้นไม่ถูกต้องจริงๆ - คุณสามารถสร้างการแปลงใด ๆ ที่แลกเปลี่ยนความหมายของพิกัดได้ ในตอนท้ายของการแปลงนั้นคุณจะยังคงได้รับพิกัดพื้นที่หน้าต่าง 2D และค่าความลึก
PatrickB

1
ฉันไม่แน่ใจทั้งหมดที่เราไม่เห็นด้วยกับที่เหลือแม้ว่า: แน่นอนคุณสามารถใช้พื้นที่ประสานงานที่คุณต้องการตราบใดที่คุณสามารถฉายถึง x, y, ความลึกในตอนท้าย แต่คำถามนี้เกี่ยวกับสาเหตุของการประชุมบางอย่าง สำหรับระบบพิกัดและการประชุมนั้นเชื่อมโยงกับแนวคิดโลกแห่งความจริงอย่างหลีกเลี่ยงไม่ได้
Kylotan

6

ลองนึกภาพดูแผ่นกระดาษที่ยื่นออกมาข้างหน้าคุณด้วยแผนภูมิบนแกนโดยทั่วไปจะมีป้าย X อยู่ด้านล่างและ Y ขึ้นในแนวตั้ง นี่จะทำให้ Z เป็นแกนออกไปตามพื้น

มันเป็นเพียงแค่การประชุม แต่มันใช้กราฟิกเป็นจำนวนมากซึ่งเราคิดว่า Z เป็นส่วนลึกเข้าไปในฉาก

ในสาขาอื่นเช่น CAD เวอร์ชันของคุณจะเป็นเรื่องธรรมดา


4

แนวคิดคือแกน x และ y ยังคงเหมือนเดิม - y 'ขึ้น' บนหน้าจอและ x อยู่ตรงข้าม

z - มิติที่สามโปรเจ็กต์กลับเข้าสู่หน้าจอ (โดยไม่สนใจประเด็นเรื่องความถนัดที่นี่) ใน 3 มิติสิ่งนี้ค่อนข้างแปลก แต่สำหรับการวางตำแหน่งสิ่งต่าง ๆ ในพื้นที่หน้าจอมันสมเหตุสมผลมากกว่า

3) คุณสามารถถ้าคุณต้องการ แต่มันจะเจ็บปวดและ clunky ฉันอยากจะแนะนำให้รู้จักกับ Z-projects-in / out-the-monitor


1

1) ใช่ข้อสังเกตของคุณถูกต้อง

2) ระบบพิกัด XYZ ทั่วโลกแบบมาตรฐานนั้นสมเหตุสมผลเมื่อคุณคิดว่าเป็นนักกีฬาคนแรกเมื่อคุณมองผ่านสายตาของตัวละครในฉากด้วยเมทริกซ์การแปลงว่างเปล่า (เอกลักษณ์) เช่นเดียวกับเมื่อคุณวาดระบบพิกัดบนแผ่นกระดาษ X ชี้ไปทางขวาและ Y ชี้ขึ้น ตามกฎมือขวา (x-> thumb, y-> นิ้วชี้, z-> นิ้วกลาง), Z ชี้ไปทางคุณ

3) มันจะไม่ผิด แต่มันจะเป็นการเบี่ยงเบนความสนใจจากมาตรฐาน มีสามปัญหาที่ฉันสามารถนึกได้ในขณะนี้: (a) สมมติว่าวันหนึ่งคุณต้องการใช้ห้องสมุดฟิสิกส์ที่ใช้กรอบพิกัดมาตรฐาน หากคุณไม่ปฏิบัติตามมาตรฐานตอนนี้คุณต้องคิดเกี่ยวกับการเปลี่ยนแปลงที่นำคุณจากโลกของคุณสู่โลกฟิสิกส์ อาจรำคาญเมื่อคุณต้องการแก้ไขข้อบกพร่อง (b) เมื่อคุณต้องการแบ่งปันรหัสกับใครบางคนหรือนำคนอื่นมาช่วยในการพัฒนาพวกเขาจะต้องคุ้นเคยกับการประชุมของคุณ (c) เมื่อใช้โมเดล 3 มิติมาตรฐานคุณจะต้องมีการเปลี่ยนแปลงข้างต้นเพื่อป้องกันไม่ให้มองไปด้านข้าง

ตอนนี้เพื่อเพิ่มคำถาม 2 มันมีประโยชน์มากที่จะคิดว่า X, Y และ Z ไม่ใช่เพียงแค่ตัวอักษรสามตัว แต่มีความถูกต้องทั้งด้านบนและด้านหลัง ตัวละครทุกตัวในฉากนั้นมีระบบพิกัดท้องถิ่นติดอยู่กับพวกเขาและในกรอบพิกัดท้องถิ่นของพวกเขา X นั้นถูกต้องเสมอ Y คือ up และ Z อยู่ข้างหลัง เมื่อคุณมีสิ่งนี้ตอนนี้คุณสามารถเข้าใจเวกเตอร์ที่คุณพิมพ์ออกมาหรือเขียนอัลกอริทึมของคุณในแบบที่สมเหตุสมผล สมมติว่าคุณมีตัวละคร A และ B สองตัวและคุณต้องการทำอะไรสักอย่างถ้าตัวละครตัวหนึ่งกำลังเผชิญหน้ากัน คุณสามารถหาตำแหน่งของ B ในกรอบพิกัดของ A (Ta ^ -1 * p_b) ดูเวกเตอร์ที่คุณได้รับและดูว่า Z (ด้านหลัง) เป็นลบและ X (ขวา) และ Y (ขึ้น) มีขนาดเล็กเพราะเวกเตอร์นั้น บอกให้คุณทราบว่าถอยหลังไปทางขวาและสูงกว่า B นั้นเกี่ยวกับ A

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.