डायरेक्टएक्स बाएं हाथ के समन्वय प्रणाली का उपयोग क्यों करता है?


52

मैंने स्टैक ओवरफ्लो पर पोस्ट करने पर विचार किया, लेकिन सवाल मुझे बहुत अधिक व्यक्तिपरक बनाता है क्योंकि मैं इस मामले में Microsoft की पसंद के लिए एक उचित तकनीकी स्पष्टीकरण के बारे में नहीं सोच सकता। लेकिन इस सवाल ने मुझे इतने लंबे समय तक परेशान किया है और यह मुद्दा मेरी एक परियोजना में आता है, और मैंने वास्तव में इसे समझाने का प्रयास नहीं किया है:

ओपनजीएल एक दाहिने हाथ के समन्वय प्रणाली का उपयोग करता है, जहां दुनिया का + जेड हिस्सा समन्वय प्रणाली दर्शक की ओर फैली हुई है।

डायरेक्टएक्स एक बाएं हाथ की प्रणाली का उपयोग करता है जहां दुनिया का + जेड भाग दर्शक से दूर स्क्रीन में फैली हुई है ।

मैंने ग्लाइड एपीआई का उपयोग कभी नहीं किया , इसलिए मुझे नहीं पता कि यह कैसे काम करता है, लेकिन मैं जो इकट्ठा कर सकता हूं, वह बाएं हाथ की प्रणाली का भी उपयोग करता है।

क्या इसका कोई तकनीकी कारण है? और यदि नहीं, तो क्या एक समन्वय प्रणाली के किसी विशेष अधिकार के लिए कुछ वैचारिक लाभ है? कोई एक को दूसरे पर क्यों चुनेगा?


5
ऐसा लगता है जैसे पूछ रहे हैं कि क्यों अरबी और हिब्रू दाएं-बाएं लिखे गए हैं, जबकि हर दूसरी भाषा बाएं-से-दाएं है।
गाबे

17
मैं सिर्फ यह समझने की कोशिश कर रहा हूं कि ग्राफिक्स एपीआई के बीच ऐसी चमकती असंगतता क्यों है, जो गणित में एक ठोस आधार साझा करती है। सेमिटिक वर्णमाला की दिशा निश्चित रूप से अपरिवर्तनीय नियमों में स्थापित नहीं है।
ग्रेफेड

3
इस प्रश्न का संदर्भ दिया गया था कि हम .NET प्रोग्रामर (2011-03-25) को क्यों नहीं नियुक्त करते हैं
पीटर मोर्टेंसन

2
न तो OpenGL और न ही Direct3D विशुद्ध रूप से दाएं या बाएं हाथ से है। पूर्व में बाएं हाथ में क्लिप स्पेस में बदलाव, जबकि बाद में स्क्रीन स्पेस राइट-हैंडेड है यानी डी 3 डी के स्क्रीन स्पेस में एक्स से वाई तक रोटेशन जब + जेड साइड से देखा जाता है, तो काउंटर-क्लॉकवाइज रोटेशन होता है। और दोनों सिस्टम डेवलपर्स को या तो चिरलिटी के रिक्त स्थान को नियोजित करने की अनुमति देता है।
लीजेंड्स

1
@PeterMortensen .NET के सभी नफरत करने वालों को यह पता नहीं है कि यह क्या है। वे शायद ASP.NET Webforms, की रूपरेखा का उल्लेख कर रहे हैं। .NET को बेस क्लास लाइब्रेरी और सीएलआर के रूप में वर्णित किया जा सकता है।
मफिन मैन

जवाबों:


64

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन मैंने इस पोस्ट को संदर्भित किया और चुने हुए उत्तर के लहजे को नापसंद किया।

तो मैंने थोड़ी छानबीन की!

  1. डायरेक्टएक्स पुराना है । यह पहली बार 1995 में जारी किया गया था, जब दुनिया में एनवीडिया और एटीआई , डायरेक्टएक्स बनाम ओपनजीएल की तुलना में बहुत अधिक था । यह 15 साल से अधिक है, लोग।
  2. 3dfx इंटरएक्टिव ग्लाइड (दिन में डायरेक्टएक्स के प्रतियोगियों में से एक। ओपनगेल गेमिंग बैक के लिए तब नहीं था) ने बाएं हाथ के समन्वय प्रणाली का उपयोग किया।
  3. पीओवी-रे और रेंडरमैन (पिक्सर के रेंडरिंग सॉफ्टवेयर), बाएं हाथ के समन्वय प्रणाली का भी उपयोग करते हैं।
  4. DirectX 9+ दोनों समन्वय प्रणालियों के साथ काम कर सकता है।
  5. दोनों WPF और XNA (जो पर्दे के तहत डायरेक्ट के साथ काम) दाएं हाथ के समन्वय प्रणाली का उपयोग करें।

इससे मैं कुछ बातों के बारे में अनुमान लगा सकता हूं:

  • उद्योग मानक मानक के रूप में लोगों की तरह नहीं हैं।
  • Direct3D एक ऐसे समय में बनाया गया था जब सभी ने चीजों को अपने तरीके से किया था, और डेवलपर्स शायद बेहतर नहीं जानते थे।
  • लेफ्ट-हैंडनेस वैकल्पिक है, लेकिन डायरेक्टएक्स दुनिया में प्रथागत है।
  • चूंकि परंपराएं कठिन रूप से मर जाती हैं, हर कोई सोचता है कि डायरेक्टएक्स केवल बाएं-हाथ से काम कर सकता है।
  • Microsoft अंततः सीखे, और उनके द्वारा बनाए गए किसी भी नए API में मानक का पालन किया।

इसलिए, मेरा निष्कर्ष होगा:

जब उन्हें चुनना था, तो उन्हें मानक का पता नहीं था, उन्होंने 'अन्य' प्रणाली को चुना, और बाकी सभी सवारी के लिए साथ गए। कोई भी छायादार व्यवसाय नहीं, बस एक दुर्भाग्यपूर्ण डिजाइन निर्णय जो साथ में किया गया था क्योंकि बैकवर्ड संगतता Microsoft के खेल का नाम है।


11
डायरेक्टएक्स 3 डी कंप्यूटर ग्राफिक्स की तुलना में स्वैडलिंग कपड़े में एक शिशु है, और यह कई 3D समन्वय प्रणालियों का प्रबंधन करने वाले कंप्यूटर प्रोग्रामों की तुलना में अपेक्षाकृत युवा है, और उनके बीच रूपांतरित होता है। यह 1970 के दशक के मध्य में था जब मैंने पहली बार ग्राफिक्स वर्ग लिया था, और प्रशिक्षक (फ्रैंक क्रो) को EVEN ने जोरदार तरीके से दाएं हाथ के समन्वय प्रणालियों का उपयोग करने के लिए बहुत जोर दिया था। 1983 में, मैं एक ऐसा काम कर रहा था, जिसमें कोई ग्राफिक्स नहीं था, लेकिन समन्वयित होने वाले परिवर्तनों का चलन था, और एक अनिवार्य दाहिने हाथ का नियम था, जो FIRST प्रोजेक्ट मेमो जारी किया गया था। (और मैंने इसे जारी नहीं किया!)
जॉन आर। स्ट्रॉ

7
मुझे यकीन नहीं है कि उम्र का इससे कोई लेना-देना है। क्या अधिकांश भौतिक विज्ञानों ने दाएं हाथ के समन्वय प्रणाली का उपयोग नहीं किया है, और कंप्यूटरों की तुलना में कई, कई वर्षों से अधिक समय तक रहा है? मैं कहूंगा कि ग्लाइड और फिर डीएक्स द्वारा पीछा किए जाने की तुलना में यह बहुत पुराना सम्मेलन है।
थॉमस ओवेन्स

3
सिर्फ इसलिए कि एक मानक का उपयोग शिक्षाविदों में किया गया है इसका मतलब यह नहीं है कि यह औद्योगिक / अन्य अनुप्रयोगों में समान होगा। लोग अपने क्षेत्र में जो कुछ भी इस्तेमाल किया जा रहा है, उसका अनुसरण करते हैं। अन्यथा ग्राफिक सिस्टम शीर्ष-बाएँ के बजाय स्क्रीन के निचले-बाएँ कोने में अपनी उत्पत्ति होगा। इसके अलावा, उम्र के बारे में बात यह है कि डीएक्स का जन्म तब हुआ था जब पूरी "डेस्कटॉप के लिए 3 डी प्रतिपादन" चीज अभी भी नई थी, और "मानकों" और "सर्वोत्तम प्रथाओं" को अभी तक पूरी तरह से अंकित नहीं किया गया था।
Kyte

1
a) तो आप मेरे उत्तर को, जो कि सिद्ध तथ्यों की एक सरल सूची है और जो मैं स्पष्ट रूप से अपनी व्यक्तिगत अटकलें, "अंधविश्वासी" और "तथ्यों में अस्पष्ट" कहता हूं, जब आपकी खुद की पेशकश कोई उद्धरण के साथ कॉर्पोरेट दुर्व्यवहार का आरोप है जो भी हो? बी) यदि आप मेरे जवाब को नापसंद करते हैं, तो आप हमेशा अपना खुद का जवाब दे सकते हैं। जब मैंने यह उत्तर दिया, तो स्वीकृत उत्तर पहले से ही एक वर्ष पुराना था। आप अधिक ज्ञान जोड़ने के लिए स्वतंत्र हैं, अगर आपको लगता है कि आपके पास योगदान करने के लिए कुछ है। ग) जब बाजार पर आपका पैर जमाने लगे तो एकाधिकार बनाना कठिन है। यह आधुनिक बहुराष्ट्रीय एमएस नहीं है।
Kyte

2
@Kyte 3Dfx के पास एक विशिष्ट कारण के लिए मालिकाना API था, जो आपको उनके हार्डवेयर में बंद करने के लिए था। उन्होंने अंत उपयोगकर्ताओं को अपना हार्डवेयर खरीदने के लिए मजबूर किया क्योंकि डेवलपर्स को "3D" के साथ काम करने वाले गेम लिखने के लिए "रिश्वत" दी गई थी। Microsoft आपको उनके API में लॉक करना चाहता था ताकि डेवलपर्स केवल विंडोज के लिए गेम लिखेंगे, इसने अंततः 3Dfx को मार दिया। सादा और सरल व्यापार निर्णय, दुर्व्यवहार नहीं। यह आज भी चल रहा है। एनवीडा चाहता है कि आप आपको CUDA के साथ उनके कार्ड में बंद कर दें, AMD OpenCL, 2012 के व्यवहार के पीछे एक ही तर्क का उपयोग करना चाहता है। यह इतिहास है, मैं उस समय उद्योग में था।

37

मुझे आश्चर्य है कि किसी ने कुछ भी उल्लेख नहीं किया है: ओपनजीएल बाएं हाथ के समन्वय प्रणाली में भी काम करता है। कम से कम, यह तब होता है जब आप शेड्स के साथ काम कर रहे होते हैं और डिफ़ॉल्ट डेप्थ रेंज का उपयोग करते हैं।

एक बार जब आप फिक्स्ड-फंक्शन पाइपलाइन को फेंक देते हैं, तो आप सीधे "क्लिप-स्पेस" से निपटते हैं। OpenGL विशिष्टता एक 4D सजातीय समन्वय प्रणाली के रूप में क्लिप-स्पेस को परिभाषित करती है। जब आप सामान्यीकृत डिवाइस निर्देशांक के माध्यम से परिवर्तनों का पालन करते हैं, और विंडो स्थान के नीचे, आप यह पाते हैं।

विंडो स्पेस एक विंडो के पिक्सल के स्पेस में होता है। मूल निचले बाएँ कोने में है, जिसमें + Y ऊपर और X सही चल रहा है। यह एक बहुत ही सही-सही समन्वय प्रणाली की तरह लगता है। लेकिन Z का क्या?

डिफ़ॉल्ट गहराई श्रेणी (glDepthRange) पास Z मान को 0 पर सेट करता है और सबसे दूर Z मान को एक पर सेट करता है । तो + Z दर्शक से दूर जा रहा है

यह एक बाएं हाथ की समन्वय प्रणाली है। हां, आप GL_LESS से GL_GREATER तक की गहराई परीक्षण को बदल सकते हैं और glDepthRange को [0, 1] से [1, 0] में बदल सकते हैं। लेकिन OpenGL की डिफ़ॉल्ट स्थिति बाएं हाथ के समन्वय प्रणाली में काम करना है। और क्लिप-स्पेस से विंडो स्पेस प्राप्त करने के लिए आवश्यक कोई भी ट्रांसफ़ॉर्मेशन Z. तो क्लिप-स्पेस को नकारता नहीं है। वर्टेक्स (या ज्योमेट्री) शेडर का आउटपुट लेफ्ट-हैंडेड स्पेस है। सादगी को पिन करना मुश्किल है)।

फिक्स्ड-फंक्शन पाइपलाइन में, मानक प्रोजेक्शन मैट्रिसेस (ग्लोरोथो, ग्लिफ़स्ट्रम और लाइक द्वारा निर्मित) सभी एक दाएं हाथ के स्थान से एक बाएं हाथ में बदल जाते हैं। वे Z का अर्थ फ्लिप करते हैं; बस वे उत्पन्न होने वाले मेट्रिसेस की जाँच करें। नेत्र स्थान में, + Z दर्शक की ओर बढ़ता है; प्रक्षेपण के बाद के स्थान में, यह दूर चला जाता है।

मुझे संदेह है कि Microsoft (और GLide) ने अपने प्रोजेक्शन मैट्रिसेस में नेगेटिव प्रदर्शन करने की जहमत नहीं उठाई।


4
वास्तव में दिलचस्प है। मैं मानता हूँ कि मैंने कभी इसे करीब से नहीं देखा। जबकि मेरा प्रश्न विशेष रूप से विश्व स्थान की चिंता करता है, आपका उत्तर मुझे विचार के लिए भोजन देता है।
ग्रेफेड

मैंने पाया कि या तो डेप्थ रेंज या डेप्थ टेस्ट को बदलते हुए इसे राइट-हैंड बनाया गया है, लेकिन कैंसिल किए गए दोनों प्रॉडक्ट्स का इस्तेमाल करके मुझे लेफ्ट-हैंडेड सिस्टम दिया गया है।
hultqvist

1
पेचीदा। व्यूपोर्ट डेप्थ ट्रांसफॉर्मेशन देखें: z_wiewport = z_clip * (दूर-पास) / 2 + (निकट + दूर) / 2। इससे क्लिप स्पेस -1 को दूर तक और +1 से मैप किया जा सकता है। इसलिए क्लिप स्पेस को ही लेफ्ट space हाथ माना जा सकता है , भले ही आप अभी भी रिवर्स कर सकते हैं कि बाद में व्यूपोर्ट में मैप कैसे किया जाए।
कोस

1
@ निचलोलस: क्या आपने देखा कि स्क्रीन स्पेस सही होने के बाद भी Direct3D शुद्ध रूप से बाएं-हाथ में नहीं है? X दाएं से बाएं, Y ऊपर से नीचे और Z दर्शक से दूर यानी X से Y एक काउंटर-क्लॉकवाइज रोटेशन है जब Z अक्ष के विपरीत देखा जाता है।
लीजेंड्स 2k

1
@bobobobo "मैंने देखा कि gluLookAt द्वारा निर्मित दृश्य मैट्रिक्स के रूप में अच्छी तरह से करवट बदल सकता है" - नहीं, यह नहीं है। यही कारण है कि आगे वेक्टर की गणना कैसे की जाती है, लेकिन यह मैट्रिक्स अभी भी दाएं हाथ के स्थान में एक साधारण कठोर शरीर trasnformation है (और वास्तव में + z वास्तव में " दाएं हाथ के स्थान में " पिछड़ा हुआ है)। आगे के सदिश की उपेक्षा करने का समन्वय स्थान की दृढ़ता को बदलने से कोई लेना-देना नहीं है।
क्रिस का कहना है कि मोनिका

11

यह शुद्ध इतिहास है। प्राचीन दिनों में प्रारंभिक गुफा-ग्राफिक्स प्रोग्रामर ने मॉनिटर (टेलेटाइप; स्टोनेटाइप?) को सतह को दो ग्राफिकल पेपर के रूप में देखा था। गणित और इंजीनियरिंग में ग्राफ पेपर पर डेटा बिंदुओं की साजिश रचने के लिए सामान्य नियम हैं: x = right, y = up। फिर एक दिन, सिलिकॉन व्हील के आविष्कार के लगभग एक हफ्ते बाद, किसी ने 3 डी ग्राफिक्स के बारे में सोचा। जब इस विचार के कैंडल-बल्ब उनके सिर के ऊपर से झपकाए जाते हैं, तो किसी भी कारण से, वे दर्शक से जेड = दूर जोड़ना चाहते हैं। (आउच, मेरा दाहिना हाथ सिर्फ कल्पना करते हुए दर्द करता है।)

उन्हें इस बात का अंदाजा नहीं था कि किसी दिन उनके सुदूर वंशज इंजीनियर, वैज्ञानिक, उम्दा कलाकार, व्यावसायिक कलाकार, एनिमेटर, उत्पाद डिजाइनर आदि बन जाएंगे और 3 डी ग्राफिक्स को उपयोगी पाएंगे। ये सभी ठीक आधुनिक लोग एक-दूसरे के साथ और अधिक स्थापित गणित ग्रंथों और भौतिकी सम्मेलनों के अनुरूप होने के लिए दाएं हाथ के समन्वय प्रणाली का उपयोग करते हैं।

प्रदर्शन सतह पर 3 डी समन्वय प्रणाली को आधार बनाना मूर्खतापूर्ण है। यह मॉडल है जो मायने रखता है - एक घर, कुर्सी, अधिक वजन वाले हरे ओग्रे या आकाशगंगा का वर्णन करने वाले त्रिकोण और बहुभुज और विमान। आजकल हम सभी डिज़ाइन और मॉडल सामान दाएं हाथ के XYZ सिस्टम में रखते हैं, और मॉडल की दुनिया के संदर्भ में ऐसा करते हैं, यह सोचने से पहले भी कि यह कैसे प्रस्तुत किया जाएगा। कैमरे को किसी बिंदु पर जोड़ा जाता है, संभवतः पागल तरीकों से चारों ओर उड़ने के लिए बनाया गया है, और यह अदृश्य बुनियादी ढाँचा है जो मॉडल को पिक्सेल में परिवर्तित करता है कि इसके आंत्रों के भीतर समन्वित प्रणाली परिवर्तनों के साथ घूमना चाहिए।

भ्रम को जोड़ने के लिए, कुछ ग्राफिक्स लाइब्रेरी यह मानती हैं कि CRT ऊपर से नीचे तक छवि को स्कैन करते हैं, और इसलिए Y = नीचे है। यह आज भी सभी विंडोिंग सिस्टम और विंडोज़ मैनेजर में उपयोग किया जाता है - X11, fvwm, gtk +, Win31 API, आदि। कैसे नए-फंसे हुए 3D GUI सिस्टम जैसे Clutter, Beryl आदि Z के साथ डील करते हैं, 3D ग्राफिक्स मॉडलिंग के लिए एक अलग मुद्दा है। यह केवल आवेदन प्रोग्रामर और जीयूआई डिजाइनरों के लिए चिंता का विषय है।


1
सभी बहुत दिलचस्प हैं, और यह निश्चित रूप से एसजीआई के जीएल के पीछे तर्क को स्पष्ट करता है। ... लेकिन यह कैसे DirectX बाएं हाथ की व्याख्या करता है?
ग्रेफेड

कई 2D और 3D सिस्टम सभी ने एक सामान्य इतिहास से अपने सम्मेलनों को निकाला।
डैरनवे

10

वे दोनों अनिवार्य रूप से समतुल्य हैं, क्योंकि एक को आसानी से दूसरे में बदला जा सकता है । एकमात्र लाभ जो मैं बाएं हाथ की प्रणाली के लिए पा सकता हूं: वस्तुएं पर्यवेक्षक से दूर हैं, किसी भी दिशा (x, y, या z) में, दूरी एक उच्च मूल्य है। लेकिन मुझे पता नहीं है कि यही वजह है कि माइक्रोसॉफ्ट ने एक दूसरे को चुना।

POV-Ray एक बाएं हाथ के गलियारे प्रणाली का उपयोग करता है।


5
हाँ, मुझे लगता है कि ग्राफिक्स के बहुत सारे newbies स्क्रीन में गहराई के साथ z को अधिक स्वाभाविक रूप से बढ़ाते हुए पाते हैं। लेकिन वे चाहते हैं कि x सही से बढ़े और वाई ऊपर की तरफ, "ग्राफ एक्सिस" स्टाइल। इससे उन्हें बाएं हाथ की समन्वित प्रणाली मिल जाती है। बाद में जब वे और अधिक जटिल चीजें करने की कोशिश करते हैं, तो उन्हें एहसास होता है कि वे विज्ञान / गणित / इंजीनियरिंग के अधिकार के साथ दुनिया से बाहर हैं।
22

6
@Timday, आप newbies को गुप्त 3-डी ग्राफिक्स गैर-हैंडशेक सिखाना है। अपने दाहिने हाथ को, अंगूठे, तर्जनी और मध्यमा अंगुली के साथ, एक दूसरे के समकोण पर रखें। अंगूठा X है, तर्जनी Y है, मध्यमा अंगुली Z है। अब अपने हाथ को चारों ओर घुमाएं, आप जो भी निर्देशांक चाहते हैं उसके साथ संरेखित करें, और आपको तुरंत पता चल जाता है कि गति परिवर्तनों को कैसे प्रभावित करने वाली है।
बजे जॉन आर। स्ट्रॉहम

3
@ जॉन: अरे, लगता है क्या, भौतिकविदों का एक ही गुप्त हाथ मिलाना भी है!
दोपहर 12:00

1
@ जॉन हालांकि मैं पूरी तरह से एक दाहिने हाथ की प्रणाली के फायदे से सहमत हूं, आप जानते हैं कि आपके हैंडशेक नियम (जिसे हर किसी को स्कूल में सीखना चाहिए था) का उपयोग बाएं हाथ की प्रणाली के लिए बाएं हाथ से भी किया जा सकता है।
क्रिस का कहना है कि 12:00 पर मोनिका

@ChristianRau, जिस हाथ का आप उपयोग करते हैं, वह इस बात पर निर्भर करता है कि आप किस प्रकार की समन्वय प्रणाली का वर्णन करने का प्रयास कर रहे हैं, दाएं या बाएं हाथ से।
जॉन आर। स्ट्रोम

10

नेतृत्व डेवलपर DirectX (और Direct3D) के एलेक्स सेंट जॉन हाल ही में उस पर टिप्पणी की। Direct3D के इतिहास पर एक लेख में उन्होंने लिखा:

I [...] को Direct3D एपीआई के लिए एक योग्यता चुनने के लिए कहा गया था। मैंने व्यक्तिगत पसंद के हिस्से में बाएं हाथ की समन्वित प्रणाली को चुना । [...] यह एक मनमाना विकल्प था।

स्रोत: http://www.alexstjohn.com/WP/2013/07/22/the-evolution-of-direct3d/


यह केवल एक मनमाना विकल्प है, यदि आपके पास ऐसा कोई सुराग नहीं है कि शेष दुनिया क्या कर रही है, कि शेष दुनिया ने ग्राफिक्स के लिए दाएं हाथ के समन्वय प्रणालियों पर वास्तविक रूप से मानकीकृत किया है।
जॉन आर। स्ट्रॉहम जूल

1
@ JohnR.Strohm - क्या आपने इससे जुड़ा लेख भी पढ़ा है?
मैक्सिमस मिनिमस

लिंक-रोट ने वह पृष्ठ खा लिया है। यहां नवीनतम कार्य स्नैपशॉट है: web.archive.org/web/20161101112002/http://www.alexstjohn.com/WP/…
मैक्स बर्राक्लो

5

समझने वाली बात यह है कि प्रोग्रामर समय की एक बड़ी मात्रा को बाएं हाथ और दाहिने हाथ के समन्वय प्रणालियों के बीच परिवर्तित करने में बर्बाद हो गया है, और यहां तक ​​कि अधिक प्रोग्रामर समय को यह याद करते हुए बर्बाद कर दिया गया है कि किसी विशेष पल में किस सिस्टम की आवश्यकता थी।

जब सभी दाएं हाथ के समन्वय वाले सिस्टम उद्योग के मानक बन गए, तो वे चले गए।

सामान्य उपयोग में पर्याप्त समन्वय प्रणाली पहले से ही है, बिना एक प्रश्न के परिचय प्रस्तुत करके संख्या को दोगुना करने के लिए। देखें Minkler और Minkler, "एयरोस्पेस कोआर्डिनेट सिस्टम और रूपांतरण" । यदि आप एयरोस्पेस व्यापार में समन्वय कर रहे हैं, उदाहरण के लिए उड़ान सिमुलेशन, तो आपको उस पुस्तक की आवश्यकता है।

मेरा अनुमान है कि Microsoft के पास DirectX प्रोजेक्ट पर कोई भी नहीं था जो उद्योग मानकों के बारे में कुछ भी जानता हो, उसे इस बात का एहसास नहीं था कि वहाँ एक उद्योग मानक था, और यह समझ में नहीं आया।

दूसरी संभावना यह है कि वे जानते थे कि दाएं हाथ वाले सिस्टम उद्योग के मानक थे, और उन्होंने जानबूझकर डायरेक्टएक्स को बाएं हाथ का बना दिया, ताकि लोगों के लिए कोड को परिवर्तित करने के लिए HARD बनाया जा सके, जिसके बजाय ओपनएक्स का उपयोग करने के लिए डायरेक्टएक्स का इस्तेमाल किया गया था, यह विचार नहीं करता है। क्या मुझे पता था कि यह वास्तव में मामला था, मुझे रेडमंड में एक कुल्हाड़ी-हत्यारे के रूप में एक नए और संभवतः अल्पकालिक कैरियर को शुरू करना आवश्यक होगा।


मैं अपने प्रश्न में Microsoft को कोसने के रूप में नहीं आना चाहता था, इसलिए मैं इस संभावना का उल्लेख नहीं करना चाहता था कि यह ओपनजीएल के साथ असंगतता थी जो उनके मन में थी।
ग्रेफेड

3
@ ग्रेफेड: ठीक है, तो मुझे इसे इस तरह से रखना चाहिए। कोई भी तकनीकी कारण नहीं है कि दाएं हाथ के निर्देशांक या इसके विपरीत बाएं हाथ के निर्देशांक को पसंद करना है। हालाँकि, आजकल बहुत ही अच्छे कारण हैं, दाएं हाथ के निर्देशांक को प्राथमिकता देना, और एक रेल पर शहर से बाहर टार, पंख, और सवारी करना जो किसी को भी बाएं हाथ के निर्देशांक का उपयोग करके कुछ भी लागू करने का संकेत देता है। क्या यह आसान है?
जॉन आर। स्ट्रॉहम

मैं नहीं जानता कि मैं इस पर धर्मी आक्रोश की कोई राशि जुटा सकता था। मैं अपनी नौकरी के हिस्से के रूप में नियमित रूप से पोस्टस्क्रिप्ट के साथ काम करता हूं (जहां निर्देशांक [0, 0 के साथ शुरू होता है) निचले बाएं कोने के रूप में और ऊपर दाईं ओर अधिकतम होता है), इसलिए समन्वय रूपांतरण यहां के जीवन का एक तथ्य है।
इनामाथी 14

2
उह, तो यह 100% अटकलें हैं? इसे उत्तर के रूप में क्यों चिह्नित किया गया है?
फैक्टर मिस्टिक

3
मुझे मारता है, यह सिर्फ एक व्यर्थ शेख़ी है और विडंबना यह है कि बाएं हाथ के समन्वय प्रणाली की तरह, बहुत सारे लोग किसी कारण से इसके साथ चले गए।
क्विक जो स्मिथ

5

उन सभी के लिए जो सोचते हैं कि दाएं या बाएं-हाथ का कोई फायदा नहीं है, आप बिल्कुल गलत हैं। कार्टेशियन को-ऑर्डिनेट सिस्टम की दाहिने हाथ वेक्टर क्रॉस उत्पाद की परिभाषा से आता है। XYZ आधार सदिशों के लिए u, vऔर w, w = u X v

यह परिभाषा वेक्टर गणित, वेक्टर कैलकुलस और भौतिक विज्ञान के लिए मौलिक है। मान लीजिए कि आप विद्युत चुम्बकीय बातचीत का अनुकरण करने की कोशिश कर रहे हैं। आपके पास एक चुंबकीय क्षेत्र वेक्टर है, Mऔर एक आवेशित कण वेग के साथ उस क्षेत्र में घूम रहा है v। किस तरह से चार्ज में तेजी आती है? आसान - की दिशा में M X v। कुछ बेवकूफों को छोड़कर सोचा कि आपके डिस्प्ले सिस्टम को बाएं हाथ से बनाने में मज़ा आएगा, इसलिए यह दिशा में तेजी लाता है -M X v

मूल रूप से दो सदिश राशियों के बीच किसी भी भौतिक अंतःक्रिया को दाहिने हाथ के रूप में परिभाषित किया जाता है, और इसलिए जब भी आपको उस सहभागिता को अनुकरण करने की आवश्यकता होती है, तो आपको बेहतर होगा कि आपका ग्राफिक्स सिस्टम दाएं हाथ का है या आपको नकारात्मक संकेतों के आसपास गाड़ी चलाना याद रखना होगा। आपका सारा गणित।


इलेक्ट्रोमैग्नेटिक्स एकमात्र स्थान नहीं है जहां क्रॉस उत्पाद आता है। यह वायुगतिकी और कक्षीय यांत्रिकी में भी दिखाई देता है। फ्लाइट सिमुलेशन को इससे निपटना है, और यही वह जगह है जहां भौतिकी समन्वय प्रणाली और ग्राफिक्स समन्वय प्रणाली टकराती है। ऊपर मेरे जवाब में उद्धृत Minkler और Minkler देखें।
जॉन आर। स्ट्रोम

@Tom: मुझे यकीन नहीं है अगर यह सच है; 3 वैक्टर कहते हैं (1, 0, 0), (0, 1, 0) और (0, 0, 1), ixj प्रदर्शन करते हैं क्योंकि क्रॉस उत्पाद के लिए सूत्र अच्छी तरह से परिभाषित है और संख्याओं का कोई मतलब नहीं है दाहिनी ओर / मनमानी; यह केवल मानव ही है, जो तीन वैक्टरों को किसी न किसी प्रकार की व्याख्या करता है, फिर भी हम इसे दोनों ही अर्थों में व्याख्या करने के लिए चुन सकते हैं और यह अभी भी सुसंगत होगा अर्थात बाएं हाथ के ixj = k दूर रहेगा जबकि दाहिने हाथ में बिक्स = k की ओर होगा। माइंड यू, मैं दाएं हाथ का लड़का भी हूं, लेकिन फिर भी यह तथ्य है।
लीजेंड 2k

@ किंवदंतियां 2k: हां, मुझे लगता है कि यह सच है, इसलिए जब तक आप नहीं चाहते कि आपके नंबर का मतलब कुछ भी हो। जैसे ही आप चाहते हैं कि आपके नंबर एक भौतिक संपर्क का प्रतिनिधित्व करते हैं, या एक प्रदर्शन प्रणाली में सह-निर्देशांक, या वास्तव में कुछ भी हो तो यह बहुत मायने रखता है।
टॉम

@ आप सही हैं कि हमें संख्या को अर्थ देना चाहिए। यह वास्तव में बात है। लेकिन यह अभी भी कहने का कारण नहीं है कि बाएं हाथ दाहिने हाथ से अधिक है। मैं करने के लिए एक अर्थ दे सकता है 0,0,1आगे जाने के रूप में और कहा कि बाएं इतना है 1,0,0 X 0,1,0बनाने के 0,0,1बाएं हाथ है
Thaina

@ टॉम वास्तव में जब बाएं हाथ के समन्वय प्रणाली में भौतिकी करते हैं, तब भी सूत्र होता है, M X vलेकिन चुंबकीय क्षेत्र Mको विपरीत दिशा में इंगित करने के लिए माना जाता है क्योंकि यह एक pseudovector है। आप या तो सिस्टम में समान समीकरणों का उपयोग कर सकते हैं: केवल एक चीज जो परिवर्तन करती है वह है आपकी व्याख्या कि किस तरह से छद्मवेक्टर "बिंदु"। त्वरण जैसे उचित वैक्टर हमेशा समन्वय प्रणाली में समान कार्य करेंगे। en.wikipedia.org/wiki/Pseudovector#The_right-hand_rule
ऑस्कर बेंजामिन

5

डायरेक्ट 3 डी के शुरुआती बाएं हाथ का असली जवाब बहुत कम पापी है जो आप में से कुछ अनुमान लगा रहे हैं। डायरेक्टएक्स को इसकी शुरुआत तब मिली जब Microsoft ने 1995 में RenderMorphics को वापस खरीदा।

उस समय RenderMorphics कार्यालयों में उपयोग किए जाने वाले मानक ग्राफिक्स टेक्स्ट न्यूमैन और स्पाउल द्वारा "इंटरएक्टिव कंप्यूटर ग्राफिक्स के सिद्धांत" थे जो बाएं हाथ के निर्देशांक का उपयोग करके सब कुछ करता है। यह वही किताब है जो मैंने कॉलेज में इस्तेमाल की थी। डी 3 डी कोड को देखते हुए आप उन्हें चर नामों का उपयोग करके भी देख सकते हैं जो पुस्तक में समीकरणों से मेल खाते हैं।

यह कुछ Microsoft की साजिश नहीं है। Microsoft के चित्र में आने से पहले भी निर्णय लिया गया था।


मैं यहां एक टिप्पणी से सहमत हूं कि यह एक शहरी किंवदंती की तरह लगता है, लेकिन आपका व्यक्तिगत दृष्टिकोण प्राप्त करना अच्छा है।
जोसिया योडर

3

न तो अंततः अन्य की तुलना में बेहतर है - आप 3 डी निर्देशांक को एक 2 डी सतह पर मैप कर रहे हैं, इसलिए तीसरे आयाम (जो वास्तव में चीजों को 3 डी बनाते हैं) को मनमाने ढंग से चुना जा सकता है, दर्शक या स्क्रीन पर इंगित कर सकता है। आप वैसे भी 4x4 मैट्रिक्स के माध्यम से चीजों को डालने जा रहे हैं, इसलिए एक से दूसरे को चुनने का कोई तकनीकी कारण नहीं है। कार्यात्मक रूप से, कोई बहस कर सकता है:

  • कंप्यूटिंग और अन्य क्षेत्रों में एक्स अक्ष को बाएं से दाएं चलाने के लिए काफी व्यापक सर्वसम्मति है (एविएशन जाहिर तौर पर एक उल्लेखनीय अपवाद है)।
  • गणित में, वाई अक्ष इंगित करता है। (इसके अलावा, ऊपर है जहां बुलबुले जाओ)।
  • कंप्यूटर डिस्प्ले पर, वाई अक्ष नीचे इंगित करता है (क्योंकि यह CRT स्क्रीन कैसे काम करता है, और इसलिए भी कि यही क्रम है जिसमें अधिकांश मानव स्क्रिप्ट पंक्तियों की व्यवस्था करते हैं)।
  • जब आप एक्स / वाई विमान में एक सतह के "दृश्यमान" पक्ष को देखते हैं, तो सामान्य को दर्शक की ओर इशारा करना चाहिए (जैसे कि जब आप उपग्रह फुटेज को देखते हैं, तो "समुद्र तल से ऊपर की ऊंचाई") उपग्रह पर इंगित करता है, पर नहीं; पृथ्वी का केंद्र)। चूंकि X / Y विमान के लिए सामान्य Z अक्ष वेक्टर है, इसलिए यह निम्नानुसार है कि Z अक्ष को भी दर्शक की ओर इंगित करना चाहिए।
  • जब आप कंप्यूटर स्क्रीन पर 3 डी छवियों को देखते हैं, तो दर्शक से दूर होने वाले बिंदुओं में एक बड़ा जेड घटक होना चाहिए। इसलिए, Z अक्ष को स्क्रीन में इंगित करना चाहिए।

निष्कर्ष : एक्स अक्ष के लिए कुछ सर्वसम्मति है, लेकिन अन्य दो के लिए, दोनों दिशाओं के लिए तर्क दिया जा सकता है, दो दाएं हाथ और दो बाएं हाथ के विन्यास की उपज, और वे सभी समझ में आते हैं।


3

रोचक तथ्य।

Direct3D (DirectX नहीं - DirectX इनपुट, साउंड आदि को भी कवर करता है ) वास्तव में बाएं हाथ का समन्वय प्रणाली नहीं है।

यह आरएच और एलएच सिस्टम दोनों का समर्थन करने में पूरी तरह से सक्षम है। यदि आप SDK दस्तावेज़ीकरण में देखते हैं तो आपको D3DXMatrixPerspectiveFovLH और D3DXMatrixPerspectiveFovRH जैसे कार्य दिखाई देंगे । दोनों काम करते हैं, और दोनों एक प्रक्षेपण मैट्रिक्स का उत्पादन करते हैं जो आपकी पसंद के समन्वय प्रणाली के साथ सफलतापूर्वक उपयोग किया जा सकता है। नरक, यदि आप चाहें तो आप Direct3D में कॉलम-मेज का उपयोग भी कर सकते हैं; यह सिर्फ एक सॉफ्टवेयर मैट्रिक्स लाइब्रेरी है और आपको इसका उपयोग करने की आवश्यकता नहीं है। दूसरी ओर, यदि आप इसे OpenGL के साथ उपयोग करना चाहते हैं, तो आप पाएंगे कि यह OpenGL के साथ भी पूरी तरह से अच्छी तरह से काम करता है (जो कि Direct3D से ही मैट्रिक्स लाइब्रेरी की स्वतंत्रता का निश्चित प्रमाण है)।

इसलिए यदि आप अपने प्रोग्राम में आरएच सिस्टम का उपयोग करना चाहते हैं, तो फ़ंक्शन के -RH संस्करण का उपयोग करें। यदि आप LH सिस्टम का उपयोग करना चाहते हैं, -LH संस्करण का उपयोग करें। Direct3D परवाह नहीं करता है। इसी तरह, यदि आप ओपनजीएल में एक एलएच सिस्टम का उपयोग करना चाहते हैं - बस एक एलएच प्रोजेक्शन मैट्रिक्स glLoadMatrix। इस सामान में से कोई भी महत्वपूर्ण नहीं है और यह उस विशाल मुद्दे के पास नहीं है जिसे आप कभी-कभी देखते हैं।


0

कोई भी फायदा नहीं है, यह पूरी तरह से मनमाना है। दोनों तब तक ठीक काम करते हैं जब तक आप सुसंगत हैं।

सुसंगतता के फायदों के कारण, आदर्श रूप से किसी को भी "बस हर किसी का उपयोग कर रहा है" का उपयोग करना चाहिए-लेकिन यह कई मामलों में काफी मुश्किल है, क्योंकि व्यवहार में कोई भी "पसंदीदा" सम्मेलन नहीं है: दोनों कार्य व्यापक रूप से उपयोग किए जाते हैं। सबसे अच्छा, कुछ समुदायों के भीतर कुछ स्थिरता है (जैसे ओपनजीएल)।

इसलिए मुझे लगता है कि इस सवाल का मूल जवाब है: उन्होंने वही चुना जो उन्होंने चुना क्योंकि यह सही लगा (इसमें कोई संदेह नहीं कि उनके पास उस अनुभव के साथ कुछ पिछला अनुभव था) और ऐसा नहीं करने का कोई कारण नहीं था।

अंत में इससे बहुत कम फर्क पड़ता है- जो कोई भी गंभीरता से अन्य प्रणालियों / समुदायों के साथ संपत्ति / कोड का आदान-प्रदान करना चाहता है, उसे वैसे भी धर्मांतरण से निपटने के लिए तैयार रहना होगा, क्योंकि यह 3 डी ग्राफिक्स में जीवन का एक तथ्य है।


0

इसे मेरे पिछले उत्तर के पूरक सामग्री के रूप में प्रदान करना। 1990 के दशक की एक पुरानी ओपनगेल कल्पना से:

OpenGL अपने किसी भी निर्देशांक सिस्टम पर बाएं या दाएं हाथ को बल नहीं देता है।

(स्रोत: http://www.opengl.org/documentation/specs/version1.2/opengl1.2.2.1.pdf )

इसलिए, चूंकि न तो डी 3 डी और न ही ओपनजीएल किसी भी हाथ को लागू करने के लिए वास्तविक प्रश्न है: लोग इसे बड़े सौदे के रूप में क्यों देखते हैं?


1
आपने इसे अलग उत्तर में क्यों पोस्ट किया? मेरा मतलब है कि आप इसे जोड़ने के लिए अपने पिछले जवाब को संपादित नहीं कर सके?
गनत

-1

मैं आपको बताने के लिए नफरत करता हूं, लेकिन निर्देशांक के एक सेट का 'हाथ' वास्तव में व्यक्तिपरक है - यह इस बात पर निर्भर करता है कि आप किस तरह से कल्पना करते हैं कि आप चीजों को देख रहे हैं। ओपनजीएल क्यूब मैप कल्पना से एक उदाहरण, यदि आप बाहर देखने वाले क्यूब के अंदर होने की कल्पना करते हैं, तो समन्वय प्रणाली बाएं हाथ की है, यदि आप बाहर से देखने की सोचते हैं तो यह सही है। यह सरल तथ्य अंतहीन दुःख का कारण बनता है, क्योंकि संख्यात्मक रूप से सही उत्तर प्राप्त करने के लिए आपकी सभी मान्यताओं के अनुरूप होना चाहिए, भले ही स्थानीय रूप से यह वास्तव में कोई फर्क नहीं पड़ता कि आप किस धारणा को बनाते हैं।

OpenGL कल्पना आधिकारिक तौर पर "उदासीन तटस्थ" है और इस मुद्दे से बचने के लिए महान लंबाई तक जाती है - अर्थात, इसे प्रोग्रामर पर बंद करने के लिए। हालाँकि, आँख निर्देशांक और क्लिप निर्देशांक के बीच एक "हाथ परिवर्तन" है: हम जिस मॉडल और नेत्र स्थान में देख रहे हैं, क्लिप और डिवाइस स्पेस में हम बाहर देख रहे हैं। मैं हमेशा इस बिना किसी संदेह के जटिल जटिलता के परिणामों से जूझ रहा हूं।

क्रॉस-प्रोडक्ट हमारा दोस्त है, क्योंकि यह आपको वैक्टर की एक जोड़ी से निश्चित रूप से दाहिने हाथ या बाएं हाथ के 3 डी समन्वय प्रणाली उत्पन्न करता है। लेकिन यह किस हाथ पर निर्भर करता है, आप उनमें से किस वैक्टर को "एक्स" कहते हैं।


3
क्रॉस उत्पाद एंटीकोमोटिव है। एक एक्स बी == - बी एक्स ए। इस तरह, एक क्रॉस उत्पाद को एक अमानक पहले वेक्टर और एक दूसरे वेक्टर को लेने के लिए परिभाषित किया गया है, उस क्रम में लिखा गया है, और तीसरे वेक्टर का उत्पादन करता है, जिसमें पहला और दूसरा वैक्टर हैं। , और जब एक डॉक्टर को आदेश (पहले, दूसरे, परिणाम) में enumerated किया जाता है, तो एक दाहिने हाथ की समन्वय प्रणाली बनाने के लिए उपयुक्त दिशा। यदि आप इसे विकृत करना चुनते हैं, तो स्वतंत्र महसूस करें, लेकिन सावधान रहें: यदि आप इसे मेरे आस-पास करते हैं, तो आप शहर के बाहर अपनी रेल की सवारी से अपने बट में टार, पंख और स्प्लिंटर्स का आनंद लेंगे।
जॉन आर। स्ट्रॉहम

काफी सही, जॉन; लेकिन आपको अभी भी इस तथ्य का सामना करना पड़ रहा है कि इस तरह की विकृति संभव है, जिसका अर्थ है कि "पूर्ण अधिकार सौंपना" जैसी कोई चीज नहीं है, जिसका अर्थ है कि यह अभी भी आपके और मेरे लिए सही संकेत पाने के लिए है।
थॉमस शारलेज़

-3

मैं कह सकता था कि उद्योग मानक पहली जगह से गलत है

समन्वय का उद्योग मानक वास्तव में डेस्क समन्वय से आया था, जब लोग डेस्क पर सब कुछ खींचते हैं, जो क्षैतिज विमान है। X बाएं / दाएं है और Y आगे / पीछे है, इसलिए यह सिर्फ Z को ऊपर की ओर बनाता है और वह राइट-हैंडेड कोआर्डिस्टम सिस्टम पैदा हुआ था

लेकिन आप जानते हैं कि अब हम मॉनिटर स्क्रीन के साथ इसका उपयोग कर रहे हैं यह वर्टिकल प्लेन है। X अभी भी बाएँ / दाएँ है लेकिन Y इसके बजाय ऊपर और नीचे है

तो राइट-हैंडेड कोआर्डिनेट सिस्टम क्या कारण होगा? यह + Z को पिछड़ा बनाता है और -Z आगे होना क्या है? अप + और डाउन है - राइट + है और लेफ्ट है - BUT फॉरवर्ड है - और बैकवर्ड है + ??? यह बहुत बेवकूफ है अगर हम 3 डी दुनिया में चल रहे उस चरित्र को खेल बना रहे हैं लेकिन हमें आगे जाने के लिए माइनस जेड की आवश्यकता है। यही कारण है कि गेम प्रोग्रामर सबसे ज्यादा DirectX की सराहना करते हैं

एक मानक को हथियाने के लिए जो डेस्क से आया था और इसे मॉनिटर पर उपयोग करना पहले स्थान से कई स्तर पर गलत है। और अब हमें यह स्वीकार करना चाहिए कि वे, ओपनजीएल और उद्योग, गलत हैं। वे सिर्फ उनका उपयोग करते हैं जो उन्हें लगता है कि यह उन्हें आरामदायक बना देगा लेकिन वे गलत हैं और राइट-हैंडेड कोऑर्डिनेट सिस्टम सिर्फ एक कबाड़ विरासत है जिसे जितनी जल्दी हो सके फेंक दिया जाना चाहिए


2
-1 अज्ञानता के लिए। दाहिने हाथ का सम्मेलन भौतिकी और गणित से आता है, विशेष रूप से वेक्टर क्रॉस उत्पाद ऑपरेशन, जो विद्युत चुम्बकीय क्षेत्र सिद्धांत और यांत्रिकी के लिए मौलिक है। कम्प्यूटिंग ने इसे अपनाया क्योंकि कंप्यूटर का मूल उपयोग संख्याओं को क्रंच करना था।
जॉन आर। स्ट्रॉहम

इसके बजाय अपने अज्ञान के लिए -1 चाहिए। जैसा कि मैंने कहा कि पुराने समय में "डेस्क कोऑर्डिनेट" भौतिकी और गणित हमेशा डेस्क पर काम करते हैं, मॉनिटर नहीं करते हैं, इसलिए मैंने इसे "डेस्क कोऑर्डिनेट" कहा क्योंकि आप क्षैतिज डेस्क पर भौतिकी और गणित की गणना करते हैं
Thaina
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.