เหตุใด DirectX จึงใช้ระบบพิกัดซ้าย?


52

ฉันถือว่าการโพสต์ใน Stack Overflow แต่คำถามก็ทำให้ฉันรู้สึกว่าเป็นเรื่องส่วนตัวเกินไปเพราะฉันไม่สามารถคิดถึงคำอธิบายทางเทคนิคที่สมเหตุสมผลสำหรับทางเลือกของ Microsoft ในเรื่องนี้ แต่คำถามนี้บั๊กฉันมานานและปัญหายังคงเกิดขึ้นในโครงการของฉันและฉันไม่เคยเห็นความพยายามที่จะอธิบายสิ่งนี้:

OpenGLใช้ระบบพิกัดขวามือโดยที่ส่วน + Z ของระบบพิกัดโลกขยายไปยังผู้ชม

DirectXใช้ระบบซ้ายมือที่ส่วน + Z ของพิกัดโลกขยายไปถึงหน้าจอห่างจากผู้ชม

ฉันไม่เคยใช้Glide APIดังนั้นฉันจึงไม่รู้ว่ามันทำงานอย่างไร แต่จากสิ่งที่ฉันสามารถรวบรวมได้ก็ใช้ระบบมือซ้ายเช่นกัน

มีเหตุผลทางเทคนิคสำหรับสิ่งนี้หรือไม่? และถ้าไม่เป็นเช่นนั้นมีความได้เปรียบทางความคิดบางอย่างเกี่ยวกับความถนัดเฉพาะของระบบพิกัดหรือไม่? ทำไมหนึ่งจะเลือกหนึ่งมากกว่าอีก?


5
ดูเหมือนว่าจะถามว่าทำไมภาษาอาหรับและภาษาฮิบรูจึงเขียนจากขวาไปซ้ายในขณะที่ภาษาอื่นทุกภาษามีซ้ายไปขวา
Gabe

17
ฉันแค่พยายามที่จะเข้าใจว่าทำไมมันถึงมีความไม่ลงรอยกันระหว่างกราฟิก API ซึ่งเป็นรากฐานที่แข็งแกร่งในวิชาคณิตศาสตร์ ทิศทางของตัวอักษรเซมิติกนั้นไม่ได้เกิดขึ้นแน่นอนในกฎที่ไม่เปลี่ยนรูป
greyfade

3
คำถามนี้มีการอ้างอิงในทำไมเราไม่จ้างโปรแกรมเมอร์ NET. (2011-03-25)
Peter Mortensen

2
ไม่ว่า OpenGL หรือ Direct3D จะเป็นมือขวาหรือมือซ้ายล้วนๆ การเปลี่ยนแปลงในอดีตไปทางซ้ายในพื้นที่คลิปในขณะที่พื้นที่หน้าจอในภายหลังเป็นมือขวาเช่นในพื้นที่หน้าจอของ D3D การหมุนจาก X เป็น Y เมื่อดูจากด้าน + Z เป็นการหมุนทวนเข็มนาฬิกา และทั้งสองระบบอนุญาตให้นักพัฒนาใช้พื้นที่ของทั้ง chirality
ตำนาน 2k

1
@PeterMortensen มันตลกดีที่ผู้เกลียดชัง. NET ทุกคนไม่รู้ด้วยซ้ำว่ามันคืออะไร สิ่งที่พวกเขาอาจอ้างถึงคือ ASP.NET Webforms ซึ่งเป็นเฟรมเวิร์ก .NET สามารถอธิบายได้ว่าเป็นไลบรารีคลาสพื้นฐานและ CLR
มัฟฟินแมน

คำตอบ:


64

ฉันรู้ว่านี่เป็นโพสต์เก่า แต่ฉันเห็นโพสต์นี้อ้างอิงและไม่ชอบน้ำเสียงของคำตอบที่เลือก

ดังนั้นฉันจึงตรวจสอบเล็กน้อย!

  1. DirectX คือเก่า เปิดตัวครั้งแรกในปี 1995 เมื่อโลกมีมากกว่าNvidiaและATI DirectX vs OpenGL นั่นมากกว่า 15 ปีแล้วที่ผู้คน
  2. Glide ของ 3dfx Interactive (หนึ่งในคู่แข่งของ DirectX ย้อนกลับไปในวันนั้น OpenGL ไม่ได้มีความหมายสำหรับการเล่นเกมในตอนนั้น) ใช้ระบบพิกัดซ้ายมือ
  3. POV-RayและRenderMan (ซอฟต์แวร์เรนเดอร์ของ Pixar) ใช้ระบบพิกัดซ้ายมือ
  4. DirectX 9+ สามารถทำงานกับระบบพิกัดทั้งสองได้
  5. ทั้งWPFและXNA (ซึ่งทำงานกับ DirectX ภายใต้ซีน) ใช้ระบบพิกัดขวา

จากนี้ฉันสามารถคาดเดาเกี่ยวกับสองสิ่ง:

  • มาตรฐานอุตสาหกรรมนั้นไม่ได้มาตรฐานเหมือนคนทั่วไป
  • Direct3Dถูกสร้างขึ้นในเวลาที่ทุกคนทำในแบบของตัวเองและนักพัฒนาอาจไม่รู้จักดีขึ้น
  • ถนัดมือซ้ายเป็นทางเลือก แต่เป็นธรรมเนียมในโลก DirectX
  • ทุกคนคิดว่า DirectX สามารถใช้งานได้ด้วยมือซ้ายเท่านั้น
  • ในที่สุด Microsoft ก็เรียนรู้และปฏิบัติตามมาตรฐานใน API ใหม่ใด ๆ ที่สร้างขึ้น

ดังนั้นข้อสรุปของฉันจะเป็น:

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


11
DirectX เป็นเด็กทารกที่สวมเสื้อผ้าห่อตัวเมื่อเทียบกับคอมพิวเตอร์กราฟฟิคสามมิติและค่อนข้างเล็กเมื่อเทียบกับโปรแกรมคอมพิวเตอร์ที่ต้องจัดการกับระบบพิกัดสามมิติหลายอย่างและเปลี่ยนไปมาระหว่างพวกเขา มันเป็นช่วงกลางทศวรรษ 1970 เมื่อฉันเข้าเรียนวิชากราฟิกเป็นครั้งแรกและแม้กระทั่งผู้สอน (Frank Crow) ก็ยิ่งผลักดันให้เราใช้ระบบพิกัดทางขวาเท่านั้น ในปี 1983 ฉันทำงานที่ไม่มีกราฟิก แต่มีการประสานการเปลี่ยนแปลงที่เกิดขึ้นและกฎบังคับทางขวาคือบันทึกโครงการแรกที่ออก (และฉันไม่ได้ออกมัน!)
John R. Strohm

7
ฉันไม่แน่ใจว่าอายุมีส่วนเกี่ยวข้องอะไรกับมัน วิทยาศาสตร์กายภาพส่วนใหญ่ไม่ใช้ระบบพิกัดขวาใช่ไหมและเป็นเวลานานกว่าคอมพิวเตอร์มาหลายปีแล้วใช่ไหม? ฉันจะบอกว่ามันเป็นแบบแผนที่เก่ากว่ารุ่นที่ถูกตามด้วย Glide แล้วก็ DX
โธมัสโอเวนส์

3
เพียงเพราะมาตรฐานที่ใช้ในเชิงวิชาการไม่ได้หมายความว่ามันจะเหมือนกันในการใช้งานด้านอุตสาหกรรม / อื่น ๆ ผู้คนติดตามสิ่งที่ถูกใช้ในสาขาของตนเองหลังจากทั้งหมด มิฉะนั้นระบบกราฟิกจะมีต้นกำเนิดอยู่ที่มุมซ้ายล่างของหน้าจอแทนที่จะเป็นมุมบนซ้าย นอกจากนี้ประเด็นเกี่ยวกับอายุคือ DX เกิดขึ้นเมื่อสิ่งที่ "การเรนเดอร์ 3D สำหรับเดสก์ท็อป" ทั้งหมดนั้นยังใหม่อยู่และ "มาตรฐาน" และ "แนวปฏิบัติที่ดีที่สุด" ก็ยังไม่ถูกตอกย้ำ
Kyte

1
a) คุณเรียกคำตอบของฉันซึ่งเป็นรายการที่เรียบง่ายของข้อเท็จจริงที่พิสูจน์ได้และสิ่งที่ฉันเรียกว่าการเก็งกำไรส่วนตัวของฉัน "ไสยศาสตร์" และ "ไม่มีเหตุผลในข้อเท็จจริง" เมื่อการเสนอของคุณเป็นข้อกล่าวหาของ บริษัท ที่ไม่มีการอ้างอิงหรือ สนับสนุนใด ๆ b) หากคุณไม่ชอบคำตอบของฉันคุณสามารถให้ตัวคุณเองได้เสมอ เมื่อฉันให้คำตอบนี้คำตอบที่ยอมรับนั้นมีอายุหนึ่งปีแล้ว คุณมีอิสระที่จะเพิ่มความรู้มากขึ้นถ้าคุณรู้สึกว่าคุณมีบางอย่างที่จะมีส่วนร่วม c) เป็นการยากที่จะสร้างการผูกขาดเมื่อตั้งหลักในตลาดสั่นคลอน นี่ไม่ใช่ MS ข้ามชาติสมัยใหม่
Kyte

2
@Kyte 3Dfx มี API ที่เป็นกรรมสิทธิ์สำหรับเหตุผลเฉพาะเพื่อล็อคคุณไว้ในฮาร์ดแวร์ของพวกเขา พวกเขาบังคับให้ผู้ใช้ปลายทางซื้อฮาร์ดแวร์ของพวกเขาเนื่องจากผู้พัฒนาถูก "ติดสินบน" เพื่อเขียนเกมที่ทำงานกับ 3Dfx เท่านั้น ไมโครซอฟท์ต้องการล็อคคุณเข้าสู่ API ของพวกเขาเพื่อให้นักพัฒนาซอฟต์แวร์เขียนเฉพาะ Windows เท่านั้นซึ่งทำให้ 3Dfx เสียชีวิตในที่สุด การตัดสินใจทางธุรกิจที่เรียบง่ายและเรียบง่ายไม่ใช่การกระทำที่ผิด สิ่งนี้ยังคงเกิดขึ้นในวันนี้ Nvida ต้องการให้คุณล็อกคุณในการ์ดด้วย CUDA, AMD ต้องการใช้ OpenCL, 2012 ด้วยเหตุผลเดียวกันกับพฤติกรรม นี่คือประวัติศาสตร์ฉันอยู่ในอุตสาหกรรมในเวลานั้น

37

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

เมื่อคุณโยนไปป์ไลน์ฟังก์ชั่นคงที่คุณจัดการโดยตรงกับ "พื้นที่คลิป" ข้อมูลจำเพาะ OpenGL กำหนดพื้นที่คลิปเป็นระบบพิกัดที่เป็นเนื้อเดียวกัน 4D เมื่อคุณติดตามการแปลงผ่านพิกัดอุปกรณ์ที่ได้รับการทำให้เป็นมาตรฐานและลงไปจนถึงพื้นที่หน้าต่างคุณจะพบสิ่งนี้

พื้นที่หน้าต่างอยู่ในพื้นที่ของพิกเซลของหน้าต่าง ต้นกำเนิดอยู่ที่มุมซ้ายล่างโดยมี + Y เพิ่มขึ้นและ + X ไปทางขวา ฟังดูเหมือนระบบพิกัดทางขวามือมาก แต่แล้ว Z ล่ะ

ช่วงความลึกเริ่มต้น (glDepthRange) กำหนดค่า Z ใกล้ 0 และค่าไกล Z เพื่อหนึ่ง ดังนั้น + Z จะหายไปจากตัวแสดง

นั่นเป็นระบบพิกัดซ้าย ใช่คุณสามารถเปลี่ยนการทดสอบความลึกจาก GL_LESS เป็น GL_GREATER และเปลี่ยน glDepthRange จาก [0, 1] เป็น [1, 0] แต่สถานะเริ่มต้นของ OpenGL คือการทำงานในระบบพิกัดซ้าย และไม่มีการแปลงใด ๆ ที่จำเป็นในการเข้าถึงพื้นที่หน้าต่างจากพื้นที่ตัดภาพตัดกัน Z ดังนั้นพื้นที่คลิปผลลัพธ์ของจุดสุดยอด (หรือรูปทรงเรขาคณิต) เป็นพื้นที่ทางซ้ายมือ (kinda มันคือพื้นที่ที่เป็นเนื้อเดียวกัน 4D ดังนั้น มันยากที่จะตอกตะปูลงไป)

ในท่อคงฟังก์ชั่นการฝึกอบรมการฉายมาตรฐาน (ผลิตโดย glOrtho, glFrustum และชอบ) ทั้งหมดเปลี่ยนจากพื้นที่ขวามือไปทางซ้ายหนึ่ง พวกเขาพลิกความหมายของ Z; เพียงตรวจสอบเมทริกซ์ที่พวกเขาสร้าง ในพื้นที่สายตา + Z เคลื่อนที่ไปทางผู้ชม; ในพื้นที่ฉายหลังมันเคลื่อนไป

ฉันสงสัยว่า Microsoft (และ GLide) ไม่ต้องกังวลกับการปฏิเสธในเมทริกซ์การฉายภาพ


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

ฉันพบว่าการเปลี่ยนช่วงความลึกหรือการทดสอบเชิงลึกทำให้เป็นแบบถนัดขวา แต่การใช้ทั้งสองอย่างถูกยกเลิกไปแล้วทำให้ฉันมีระบบถนัดซ้าย
hultqvist

1
ที่น่าสนใจ ดูการแปลงความลึกของวิวพอร์ต: z_wiewport = z_clip * (ใกล้มาก) / 2 + (ใกล้ + ไกล) / 2 ซึ่งทำให้พื้นที่คลิปของ -1 ถูกแมปไปใกล้และ +1 จนสุด ดังนั้นพื้นที่คลิปนั้นสามารถพิจารณาด้วยมือซ้ายได้แม้ว่าคุณจะยังสามารถย้อนกลับได้ว่ามันถูกแมปกับวิวพอร์ตในภายหลังอย่างไร
Kos

1
@ NicolBolas: คุณสังเกตเห็นว่าแม้ Direct3D จะไม่ถนัดมือซ้ายเพราะพื้นที่หน้าจอเป็นมือขวา X จากซ้ายไปขวา Y จากบนลงล่างและ Z อยู่ห่างจากตัวแสดงเช่น X ถึง Y เป็นการหมุนทวนเข็มนาฬิกาเมื่อดูจากตรงข้ามกับแกน Z
legends2k

1
@bobobobo "ฉันสังเกตว่าเมทริกซ์มุมมองที่สร้างโดย gluLookAt สามารถเปลี่ยนความถนัดได้เช่นกัน" - ไม่ไม่เช่นนั้น นั่นเป็นเพียงวิธีการที่เวกเตอร์ไปข้างหน้าคือการคำนวณ แต่เมทริกซ์นี้ยังคง trasnformation ร่างกายสามัญแข็งในพื้นที่ขวามือ (และในความเป็นจริง + Z เป็นจริง"ย้อนกลับ"ในพื้นที่ขวามือ) การลบเวกเตอร์ไปข้างหน้าไม่มีอะไรเกี่ยวข้องกับการเปลี่ยนความถนัดมือของพื้นที่พิกัด
คริสพูดว่า Reinstate Monica

11

มันเป็นประวัติศาสตร์ที่บริสุทธิ์ ในสมัยโบราณโปรแกรมเมอร์ถ้ำกราฟิกยุคแรก ๆ คิดว่าจอภาพ (teletype? stonetype?) ดูพื้นผิวเป็นกระดาษกราฟสองมิติ ในคณิตศาสตร์และวิศวกรรมการประชุมปกติสำหรับการวางแผนจุดข้อมูลบนกระดาษกราฟคือ: x = ขวา, y = ขึ้น แล้ววันหนึ่งประมาณหนึ่งสัปดาห์หลังจากการประดิษฐ์ล้อซิลิคอนบางคนคิดถึงกราฟิก 3D เมื่อเทียนหลอดของความคิดนี้กระพริบอยู่เหนือศีรษะไม่ว่าจะด้วยเหตุผลใดพวกเขาเลือกที่จะเพิ่ม Z = อยู่ห่างจากผู้ชม (อุ๊ยมือขวาของฉันเจ็บแค่จินตนาการว่า)

พวกเขาไม่รู้ว่าสักวันลูกหลานที่ห่างไกลของพวกเขาจะกลายเป็นวิศวกรนักวิทยาศาสตร์ศิลปินชั้นยอดศิลปินเชิงพาณิชย์อนิเมเตอร์นักออกแบบผลิตภัณฑ์ ฯลฯ และค้นหากราฟิก 3 มิติที่มีประโยชน์ คนสมัยใหม่เหล่านี้ใช้ระบบพิกัดทางขวามือเพื่อให้สอดคล้องกันและตำราคณิตศาสตร์และแบบแผนฟิสิกส์ที่เป็นที่ยอมรับมากขึ้น

มันเป็นเรื่องโง่ที่จะวางระบบพิกัด 3D บนพื้นผิวหน้าจอ มันเป็นรูปแบบที่นับ - สามเหลี่ยมและรูปหลายเหลี่ยมและระนาบที่อธิบายถึงบ้าน, เก้าอี้, ผีปอบสีเขียวหรือกาแล็กซี่ที่มีน้ำหนักเกิน ทุกวันนี้เราทุกคนออกแบบและจำลองสิ่งต่าง ๆ ในระบบ XYZ ที่ถนัดขวาและทำในแง่ของโลกของโมเดลแม้กระทั่งก่อนที่จะคิดว่ามันจะแสดงผลอย่างไร กล้องถูกเพิ่มเข้ามาในบางจุดซึ่งอาจทำให้บินไปในทิศทางที่บ้าและมันเป็นโครงสร้างพื้นฐานที่มองไม่เห็นที่แปลงโมเดลเป็นพิกเซลที่อยู่ภายในลำไส้ของมัน

เพียงเพื่อเพิ่มความสับสนห้องสมุดกราฟิกบางแห่งยอมรับว่า CRTs สแกนภาพจากบนลงล่างดังนั้น Y = down สิ่งนี้ถูกนำมาใช้แม้กระทั่งทุกวันนี้ในระบบหน้าต่างและตัวจัดการ windows ทั้งหมด - X11, fvwm, gtk +, Win31 API และอื่น ๆ วิธีที่ระบบ GUI สามมิติใหม่เช่น Clutter, Beryl และอื่น ๆ จัดการกับ Z เป็นปัญหาแยกจากการสร้างแบบจำลองกราฟิก 3 มิติ สิ่งนี้ต้องการความกังวลเฉพาะแอปพลิเคชันโปรแกรมเมอร์และนักออกแบบ GUI


1
ทั้งหมดนี้น่าสนใจมากและแน่นอนจะอธิบายถึงเหตุผลที่อยู่เบื้องหลัง GL ของ SGI ... แต่สิ่งนี้อธิบาย DirectX ว่าเป็นมือซ้ายได้อย่างไร
greyfade

ระบบ 2D และ 3D หลายระบบล้วนได้รับการจัดทำขึ้นจากประวัติศาสตร์ทั่วไป
DarenW

10

พวกเขาทั้งสองมีความเสมอภาคเทียบเท่าเป็นหนึ่งสามารถแปลงเป็นอื่นได้อย่างง่ายดาย ข้อได้เปรียบเดียวที่ฉันสามารถหาได้สำหรับระบบมือซ้ายคือ: เมื่อวัตถุอยู่ห่างจากผู้สังเกตในทุกทิศทาง (x, y หรือ z) ระยะทางจะเป็นค่าที่สูงขึ้น แต่ฉันไม่รู้ว่านี่เป็นเหตุผลว่าทำไม Microsoft ถึงเลือกตัวอื่น

POV-Rayยังใช้ระบบ corridnate ทางซ้ายด้วย


5
ใช่ฉันคิดว่ากราฟิกใหม่ ๆ จำนวนมากพบว่าการเพิ่ม z ด้วยความลึกเข้าสู่หน้าจอเป็นธรรมชาติมากขึ้น แต่พวกเขาต้องการให้ x เพิ่มขึ้นไปทางขวาและเพิ่มขึ้นไปอีกสไตล์ "แกนกราฟ" นี่ทำให้พวกเขามีระบบพิกัดซ้ายมือ ต่อมาเมื่อพวกเขาพยายามทำสิ่งที่ซับซ้อนมากขึ้นพวกเขารู้ว่าพวกเขาอยู่นอกขั้นตอนกับโลกวิทยาศาสตร์ / คณิตศาสตร์ / วิศวกรรมที่ถนัด
timday

6
@ วันนี้คุณต้องสอนมือใหม่เกี่ยวกับกราฟิก 3 มิติที่ไม่ใช่การจับมือกัน ยื่นมือขวาออกด้วยนิ้วโป้งนิ้วชี้และนิ้วกลางยืดออกไปทำมุมขวากัน นิ้วโป้งคือ X, นิ้วชี้คือ Y, นิ้วกลางคือ Z ทีนี้เลื่อนมือของคุณไปรอบ ๆ เพื่อปรับให้เข้ากับพิกัดที่คุณต้องการและคุณรู้ได้ทันทีว่าการเคลื่อนไหวมีผลต่อการเปลี่ยนแปลงอย่างไร
John R. Strohm

3
@ จอห์น: เฮ้เดาสินักฟิสิกส์ก็จับมือกันเหมือนกัน!
timday

1
@John แม้ว่าฉันเห็นด้วยกับข้อดีของระบบถนัดมือขวา แต่คุณก็รู้ว่ากฎการจับมือกัน (ที่ทุกคนควรเรียนรู้ในโรงเรียน) ก็สามารถใช้กับมือซ้ายสำหรับระบบมือซ้ายได้
คริสพูด Reinstate Monica

@ChristianRau มือที่คุณใช้ขึ้นอยู่กับประเภทของระบบพิกัดที่คุณพยายามจะอธิบายมือขวาหรือมือซ้าย
John R. Strohm

10

ผู้พัฒนานำของ DirectX (และ Direct3D) Alex St. John ได้ให้ความเห็นเมื่อเร็ว ๆ นี้ว่า ในบทความเกี่ยวกับประวัติของ Direct3D เขาเขียนว่า:

ฉัน [... ] ถูกขอให้เลือกถนัดมือสำหรับ Direct3D API ผมเลือกซ้ายมือระบบพิกัดในส่วนที่ออกมาจากการตั้งค่าส่วนตัว [... ] มันเป็นทางเลือกโดยพลการ

ที่มา: http://www.alexstjohn.com/WP/2013/07/22/the-evolution-of-direct3d/


มันเป็นตัวเลือกโดยพลการเฉพาะถ้าคุณไม่มีเงื่อนงำสิ่งที่เหลือในโลกกำลังทำอยู่นั่นเป็นส่วนที่เหลือของโลกที่ได้มาตรฐานในระบบพิกัดทางด้านขวาสำหรับกราฟิก
John R. Strohm

1
@ JohnR.Strohm - คุณอ่านบทความที่ลิงก์แล้วหรือยัง
Maximus Minimus

Link-rot ได้กินหน้านั้นแล้ว นี่คือภาพรวมการทำงานล่าสุด: web.archive.org/web/20161101112002/http://www.alexstjohn.com/WP/…
Max Barraclough

5

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

ทั้งหมดนี้ก็หายไปเมื่อระบบพิกัดทางขวากลายเป็นมาตรฐานอุตสาหกรรม

มีระบบพิกัดที่เพียงพอในการใช้งานทั่วไปอยู่แล้วโดยไม่ต้องเพิ่มจำนวนโดยการแนะนำคำถามถนัด ดูMinkler & Minkler "ยานอวกาศประสานงานระบบและการเปลี่ยนแปลง" หากคุณอยู่ในธุรกิจการบินและอวกาศเช่นการจำลองการบินคุณจำเป็นต้องใช้หนังสือเล่มนั้น

ฉันเดาว่า Microsoft ไม่มีใครในโครงการ DirectX ที่รู้อะไรเกี่ยวกับมาตรฐานอุตสาหกรรมไม่รู้ว่ามีมาตรฐานอุตสาหกรรมและคิดว่ามันไม่สำคัญ

ความเป็นไปได้อื่น ๆ ที่พวกเขารู้ว่าระบบถนัดมือขวาเป็นมาตรฐานอุตสาหกรรมและพวกเขาตั้งใจทำ DirectX ด้วยมือซ้ายเพื่อที่จะทำให้เป็นเรื่องยากสำหรับคนที่จะแปลงรหัสที่ใช้ DirectX เพื่อใช้ OpenGL แทนไม่ต้องคำนึงถึง หากฉันพบว่าเป็นกรณีนี้จริง ๆ ฉันจะพบว่าจำเป็นต้องเริ่มต้นอาชีพใหม่และอายุสั้นในฐานะฆาตกรขวานในเรดมันด์


ฉันไม่ต้องการหลุดจากการทุบตี Microsoft ในคำถามของฉันดังนั้นฉันจึงไม่ต้องการพูดถึงความเป็นไปได้ว่ามันไม่เข้ากันกับ OpenGL ที่พวกเขามีอยู่ในใจ
greyfade

3
@greyfade: ตกลงแล้วให้ฉันใช้วิธีนี้ ไม่มีเหตุผลทางเทคนิคใด ๆ ที่จะชอบพิกัดทางซ้ายมากกว่าพิกัดทางขวามือหรือในทางกลับกัน อย่างไรก็ตามมีเหตุผลที่ดีมากในทุกวันนี้ที่จะชอบพิกัดมือขวาและกลาสีขนนกและขี่ออกนอกเมืองบนรถไฟใครก็ตามที่แม้แต่กระซิบคำแนะนำในการใช้งานอะไรก็ตามโดยใช้พิกัดมือซ้าย นั่นทำให้ง่ายขึ้นหรือไม่?
John R. Strohm

ฉันไม่รู้ว่าฉันสามารถรวบรวมความขุ่นเคืองอันชอบธรรมในเรื่องนี้ได้ ฉันทำงานกับ PostScript อย่างสม่ำเสมอเป็นส่วนหนึ่งของงานของฉัน (ที่พิกัดเริ่มต้นด้วย [0, 0] เป็นมุมซ้ายล่างและสูงสุดที่ด้านบนขวา) ดังนั้นการแปลงพิกัดจึงเป็นความจริงของชีวิตที่นี่
Inaimathi

2
เอ่อนี่เป็นการเก็งกำไร 100% เหรอ? ทำไมถึงถูกทำเครื่องหมายเป็นคำตอบ?
Factor Mystic

3
เอาชนะฉันมันเป็นเพียงเสียงโวยวายไร้สาระและแดกดันเช่นระบบพิกัดทางซ้ายมือผู้คนจำนวนมากก็ไปพร้อมกับมันด้วยเหตุผลบางอย่าง
Quick Joe Smith

5

สำหรับทุกคนที่คิดว่าไม่มีความได้เปรียบในการถนัดขวาหรือถนัดซ้ายคุณผิดอย่างแน่นอน ความถนัดขวาของระบบพิกัดคาร์ทีเซียนนั้นมาจากคำนิยามของเวกเตอร์ครอสโปรดัค สำหรับ XYZ เวกเตอร์พื้นฐานu, vและ,ww = u X v

คำจำกัดความนี้เป็นพื้นฐานของคณิตศาสตร์เวกเตอร์แคลคูลัสเวกเตอร์และฟิสิกส์ส่วนใหญ่ สมมติว่าคุณกำลังพยายามจำลองการโต้ตอบทางแม่เหล็กไฟฟ้า คุณมีเวกเตอร์สนามแม่เหล็กและอนุภาคที่เคลื่อนที่ในสนามที่มีความเร็วM vประจุเร่งเร็วขึ้นเท่าไหร่? ง่าย - M X vในทิศทางของ -M X vยกเว้นคนงี่เง่าบางคนคิดว่ามันจะสนุกที่จะทำให้ระบบการแสดงผลของคุณมือซ้ายจึงเร่งในทิศทางของ

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


คลื่นแม่เหล็กไฟฟ้าไม่ได้เป็นเพียงที่เดียวเท่านั้นที่เกิดขึ้นกับผลิตภัณฑ์ นอกจากนี้ยังแสดงให้เห็นในอากาศพลศาสตร์และกลไกการโคจร การจำลองการบินจะต้องจัดการกับมันและนี่คือจุดที่ระบบพิกัดทางฟิสิกส์และระบบพิกัดทางกราฟิคชน ดู Minkler & Minkler อ้างในคำตอบของฉันข้างต้น
John R. Strohm

@ ทอม: ฉันไม่แน่ใจว่านี่เป็นเรื่องจริงหรือเปล่า ใช้เวกเตอร์ 3 ตัวบอกว่า (1, 0, 0), (0, 1, 0) และ (0, 0, 1), การแสดง ixj ให้ k เนื่องจากสูตรสำหรับผลิตภัณฑ์ครอสนั้นถูกนิยามไว้อย่างดีและตัวเลขไม่มีอะไรเลย chirality / ถนัด; มันเป็นเพียงมนุษย์ที่ตีความเวกเตอร์สามตัวในบางมือแม้ว่าเราอาจเลือกที่จะตีความมันในมือทั้งสองและมันจะยังคงสอดคล้องกันเช่นในมือซ้าย ixj = k จะหายไปในขณะที่อยู่ทางขวามือ ixj = k จะเข้าหา โปรดทราบว่าฉันเป็นคนถนัดขวาเช่นกัน แต่ก็ยังเป็นความจริง
ตำนาน 2k

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

@Tom คุณมีสิทธิ์ที่เราจะต้องให้ความหมายกับจำนวน นั่นสำคัญจริงๆ แต่นั่นก็ไม่ใช่เหตุผลที่จะบอกว่ามือซ้ายเป็นมือขวา ฉันสามารถให้ความหมาย0,0,1ว่าจะก้าวไปข้างหน้าและนั่นก็คือการ1,0,0 X 0,1,0ทำ0,0,1มือซ้าย
Thaina

@Tom จริง ๆ แล้วเมื่อทำฟิสิกส์ในระบบพิกัดซ้ายสูตรยังคงM X vแต่สนามแม่เหล็กMถูกพิจารณาให้ชี้ไปในทิศทางตรงกันข้ามเนื่องจากเป็น pseudovector คุณสามารถใช้สมการเดียวกันในระบบใดระบบหนึ่ง: สิ่งเดียวที่เปลี่ยนแปลงคือการแปลความหมายของคุณในแบบที่ pseudovectors "ชี้" เวกเตอร์ที่เหมาะสมเช่นความเร่งจะทำงานเหมือนกันในระบบพิกัด en.wikipedia.org/wiki/Pseudovector#The_right-hand_rule
Oscar Benjamin

5

คำตอบที่แท้จริงของ Direct3D ที่ถนัดมือซ้ายของ Direct3D นั้นมีความน่ากลัวน้อยกว่าพวกคุณบางคนที่คาดเดา DirectX เริ่มต้นขึ้นเมื่อ Microsoft ซื้อ RenderMorphics กลับมาในปี 1995

ในเวลานั้นข้อความกราฟิกมาตรฐานที่ใช้ในสำนักงาน RenderMorphics คือ "หลักการกราฟิกคอมพิวเตอร์แบบโต้ตอบ" โดย Newmann และ Sproul ซึ่งทำทุกอย่างโดยใช้พิกัดมือซ้าย มันเป็นหนังสือเล่มเดียวกับที่ฉันใช้ในวิทยาลัย ดูที่รหัส D3D คุณสามารถเห็นได้โดยใช้ชื่อตัวแปรที่ตรงกับสมการในหนังสือ

มันไม่ใช่แผนการของ Microsoft การตัดสินใจทำก่อนที่ Microsoft จะเข้ามาในรูปภาพ


ฉันเห็นด้วยกับความคิดเห็นที่นี่ว่าดูเหมือนตำนานเมือง แต่มันก็ดีที่ได้มุมมองส่วนตัวของคุณ
Josiah Yoder

3

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

  • มีฉันทามติที่ค่อนข้างกว้างในการคำนวณและฟิลด์อื่น ๆ เพื่อให้แกน X วิ่งจากซ้ายไปขวาคือ
  • ในวิชาคณิตศาสตร์แกน Y ชี้ขึ้น (ยังขึ้นอยู่กับที่ฟองอากาศไป)
  • บนคอมพิวเตอร์แสดงขึ้นแกน Y ชี้ลง (เนื่องจากหน้าจอ CRT ทำงานอย่างไรและเป็นเพราะลำดับที่มนุษย์สคริปต์ส่วนใหญ่จัดเรียงแถว)
  • เมื่อคุณมองไปที่ด้าน "มองเห็นได้" ของพื้นผิวในระนาบ X / Y ปกติควรชี้ไปที่ผู้ชม (เช่นเมื่อคุณดูภาพจากดาวเทียม; "ความสูงเหนือระดับน้ำทะเล" ชี้ไปที่ดาวเทียมไม่ใช่ที่ ศูนย์กลางของโลก) เนื่องจากปกติสำหรับระนาบ X / Y คือเวกเตอร์แกน Z จึงเป็นไปตามแกน Z ที่ควรชี้ไปทางผู้ชม
  • เมื่อคุณดูภาพ 3 มิติบนหน้าจอคอมพิวเตอร์จุดที่อยู่ไกลจากมุมมองภาพควรมีองค์ประกอบ Z ที่ใหญ่กว่า ดังนั้นแกน Z ควรชี้ไปที่หน้าจอ

บทสรุป : มีมติบางประการสำหรับแกน X แต่สำหรับอีกสองคนนั้นทั้งสองทิศทางสามารถโต้เถียงกันได้โดยยอมสองทางขวาและสองมือซ้ายและพวกเขาก็สมเหตุสมผล


3

ความจริงที่น่าสนใจ.

Direct3D (ไม่ใช่ DirectX - DirectX ยังครอบคลุมถึงอินพุตเสียงและอื่น ๆ ) จริง ๆ แล้วไม่มีระบบประสานซ้ายมือ

มันสามารถรองรับระบบ RH และ LH ได้อย่างสมบูรณ์แบบ หากคุณดูในเอกสารประกอบ SDK คุณจะเห็นฟังก์ชั่นเช่น D3DXMatrixPerspectiveFovLH และ D3DXMatrixPerspectiveFovRH ทั้งการทำงานและทั้งการผลิตเมทริกซ์การฉายที่สามารถใช้งานได้อย่างประสบความสำเร็จกับระบบประสานงานที่คุณเลือก เฮ้คุณยังสามารถใช้คอลัมน์หลักใน Direct3D ได้หากต้องการ มันเป็นเพียงเมทริกซ์ไลบรารีของซอฟต์แวร์และคุณไม่จำเป็นต้องใช้มัน ในทางกลับกันถ้าคุณต้องการใช้กับ OpenGL คุณจะพบว่ามันใช้งานได้ดีกับ OpenGL เช่นกัน (ซึ่งอาจเป็นหลักฐานที่ชัดเจนเกี่ยวกับความเป็นอิสระของไลบรารีเมทริกซ์จาก Direct3D เอง)

ดังนั้นหากคุณต้องการใช้ระบบ RH ในโปรแกรมของคุณเพียงแค่ใช้ฟังก์ชั่นรุ่น -RH หากคุณต้องการใช้ระบบ LH ให้ใช้รุ่น -LH Direct3D ไม่สนใจ ในทำนองเดียวกันหากคุณต้องการใช้ระบบ LH ใน OpenGL - เพียงแค่ glLoadMatrix เมทริกซ์การฉาย LH ไม่มีสิ่งใดที่มีความสำคัญและไม่มีที่ไหนใกล้กับปัญหาใหญ่ที่บางครั้งคุณเห็นว่าเป็นสิ่งที่เกิดขึ้น


0

ไม่มีข้อได้เปรียบทางเทคนิคสำหรับการถนัดทั้งสองข้าง ทั้งสองทำงานได้ดีตราบใดที่คุณยังสอดคล้อง

เพราะข้อดีของความมั่นคงเราควร "ใช้สิ่งที่คนอื่นใช้" - ซึ่งค่อนข้างยากในหลาย ๆ กรณีเพราะในทางปฏิบัติไม่นิยม "แบบแผน" ที่ชอบ: ทั้งสองมีการใช้อย่างกว้างขวาง ที่ดีที่สุดมีความสอดคล้องภายในชุมชนบางแห่ง (เช่น OpenGL)

ดังนั้นฉันคิดว่าคำตอบพื้นฐานสำหรับคำถามนี้คือ: พวกเขาเลือกสิ่งที่พวกเขาเลือกเพราะรู้สึกถูก (ไม่ต้องสงสัยเลยว่าพวกเขาเคยมีประสบการณ์มาก่อนด้วยความถนัดมือ) และไม่มีเหตุผลอะไรเลย

ในที่สุดมันก็สร้างความแตกต่างเล็ก ๆ น้อย ๆ - ใครก็ตามที่ต้องการแลกเปลี่ยนสินทรัพย์ / รหัสกับระบบ / ชุมชนอื่น ๆ อย่างจริงจังนั้นจะต้องมีการเตรียมพร้อมที่จะรับมือกับการแปลงด้วยมือเปล่าอย่างไรก็ตามเพราะมันเป็นความจริงของชีวิตในกราฟิก 3 มิติ


0

ให้สิ่งนี้เป็นวัสดุเสริมสำหรับคำตอบก่อนหน้าของฉันที่นี่ จากข้อมูลจำเพาะ OpenGL เก่าจากปี 1990:

OpenGL ไม่ได้บังคับให้ถนัดซ้ายหรือถนัดขวาในระบบพิกัดใด ๆ

(ที่มา: http://www.opengl.org/documentation/specs/version1.2/opengl1.2.1.pdf )

ดังนั้นเนื่องจาก D3D และ OpenGL ไม่บังคับใช้ความถนัดใด ๆ คำถามที่แท้จริงคือทำไมผู้คนเห็นว่านี่เป็นเรื่องใหญ่


1
ทำไมคุณโพสต์ไว้ในคำตอบแยกต่างหาก ฉันหมายความว่าคุณสามารถแก้ไขคำตอบก่อนหน้าของคุณเพื่อเพิ่มไม่ได้ใช่มั้ย
ริ้น

-1

ฉันเกลียดที่จะบอกคุณ แต่ 'มือ' ของชุดพิกัดนั้นเป็นแบบอัตนัย - ขึ้นอยู่กับว่าคุณคิดอย่างไรว่าคุณกำลังมองสิ่งต่าง ๆ ตัวอย่างจากสเปคแผนที่ลูกบาศก์ OpenGL: ถ้าคุณจินตนาการว่าอยู่ในคิวบ์มองออกไประบบพิกัดจะถนัดมือซ้ายถ้าคุณคิดว่ามองจากด้านนอกมันเป็นมือขวา ความจริงง่ายๆนี้ทำให้เกิดความโศกเศร้าไม่รู้จบเพราะการได้รับคำตอบที่ถูกต้องเชิงตัวเลขทุกข้อของคุณต้องสอดคล้องกันแม้ว่าในท้องที่มันไม่สำคัญว่าคุณจะตั้งสมมติฐานแบบไหน

สเป็คของ OpenGL นั้น "เป็นกลางถนัดมือ" อย่างเป็นทางการและต้องใช้ความพยายามอย่างมากในการหลีกเลี่ยงปัญหานี้ - นั่นคือการใส่มันลงบนโปรแกรมเมอร์ อย่างไรก็ตามมี "การเปลี่ยนมือ" ระหว่างพิกัดตาและคลิปคลิป: ในรุ่นและพื้นที่ตาที่เรากำลังมองหาในพื้นที่คลิปและอุปกรณ์ที่เรากำลังมองออกไป ฉันมักจะดิ้นรนกับผลที่ตามมาจากภาวะแทรกซ้อนนี้ไม่ต้องสงสัยเลย

cross-product เป็นเพื่อนของเราเพราะมันช่วยให้คุณสร้างระบบพิกัด 3 มิติทางขวาหรือทางซ้ายมือจากเวกเตอร์คู่หนึ่ง แต่มือใดขึ้นอยู่กับเวกเตอร์ที่คุณเรียกว่า "X"


3
ผลิตภัณฑ์ครอสคือ anticommutative A x B == - B x A. เช่นนี้ผลิตภัณฑ์ข้ามถูกกำหนดให้ใช้เวกเตอร์แรกที่ไม่ใช่ศูนย์รวมและเวกเตอร์ที่สองเขียนตามลำดับนั้นและผลิตเวกเตอร์ที่สามซึ่งเป็นเวกเตอร์ที่สามปกติกับระนาบที่มีเวกเตอร์ที่หนึ่งและที่สอง และทิศทางที่เหมาะสมในการสร้างระบบพิกัดทางขวามือเมื่อมีการแจกแจงเวกเตอร์ตามลำดับ (แรก, วินาที, ผลลัพธ์) หากคุณเลือกที่จะบิดเบือนสิ่งนี้อย่าลังเล แต่ถูกเตือน: หากคุณทำสิ่งรอบตัวฉันคุณควรเพลิดเพลินไปกับน้ำมันดินขนนกและเศษไม้ที่ก้นของคุณจากการนั่งรถไฟนอกเมือง
John R. Strohm

ค่อนข้างถูกต้องจอห์น; แต่คุณยังต้องเผชิญกับความจริงที่ว่าการบิดเบือนนั้นเป็นไปได้ซึ่งหมายความว่าไม่มีสิ่งเช่น "การถ่อมตนที่สัมบูรณ์สัมบูรณ์" ซึ่งหมายความว่ายังขึ้นอยู่กับคุณและฉันที่จะรับสัญญาณที่ถูกต้อง
โทมัสชาร์ป

-3

ฉันบอกได้เลยว่ามาตรฐานอุตสาหกรรมผิดไปตั้งแต่แรก

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

แต่คุณรู้ว่าตอนนี้เราใช้กับหน้าจอมอนิเตอร์มันเป็นระนาบแนวตั้ง X ยังคงเป็นซ้าย / ขวา แต่ Y เป็นค่าขึ้นและลงแทน

ดังนั้นระบบพิกัดที่เหมาะสมจะทำให้เกิดอะไร มันทำให้ + Z ข้างหลังและ -Z จะไปข้างหน้านี่คืออะไร ขึ้นอยู่กับ + และลงคือ - ขวาคือ + และซ้ายคือ - แต่ไปข้างหน้าคือ - และย้อนกลับคือ + ??? มันช่างโง่เหลือเกินถ้าเราสร้างเกมตัวละครที่ทำงานในโลก 3 มิติ แต่เราต้องลบ z เพื่อก้าวไปข้างหน้า นั่นเป็นสาเหตุที่โปรแกรมเมอร์เกมชื่นชม DirectX มากที่สุด

การคว้ามาตรฐานที่มาจากโต๊ะทำงานและใช้งานบนจอภาพนั้นผิดในหลาย ๆ ระดับตั้งแต่แรก และตอนนี้เราควรยอมรับว่าพวกเขา OpenGL และอุตสาหกรรมผิด พวกเขาใช้สิ่งที่พวกเขาคิดว่ามันจะทำให้พวกเขาสะดวกสบาย แต่พวกเขาผิดและระบบพิกัดมือขวาเป็นแค่มรดกขยะที่ควรถูกทิ้งให้เร็วที่สุด


2
-1 สำหรับความไม่รู้ การประชุมทางด้านขวามาจากฟิสิกส์และคณิตศาสตร์โดยเฉพาะการดำเนินการของผลิตภัณฑ์ข้ามเวกเตอร์ซึ่งเป็นพื้นฐานของทฤษฎีสนามแม่เหล็กไฟฟ้าและกลไก คอมพิวเตอร์นำมาใช้เพราะการใช้คอมพิวเตอร์เดิมคือการกระทืบหมายเลข
John R. Strohm

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