किसी वस्तु का दो बार नजदीक होना दुगना बड़ा लगता है?


16

इसलिए मैं एक 2 डी गेम बनाने के बारे में सोच रहा था, जहां आप Z- अक्ष के साथ आगे बढ़ सकते हैं, जिस परत में आप हैं। गहराई के आधार पर मैं अपने 2 डी स्प्राइट्स को स्केल करना चाहता हूं।

एक बार, किसी ने मुझे एक डेमो दिखाया था जिसमें उसने बहुत सारे 2 डी स्प्राइट्स लगाए थे, और स्क्रॉल करके वह कैमरे की गहराई को बदल सकता था। इसलिए जब ज़ूम इन किया जाता है, तो ऑब्जेक्ट खिलाड़ी के करीब आते हैं, और बड़े दिखाई देते हैं। फिर मैंने सोचा कि जब यह 1 यूनिट के करीब हो जाता है तो कितनी बड़ी वस्तु होनी चाहिए। आप उसकी गणना कैसे करेंगे? तो उस आदमी ने मुझसे कहा: एक बुनियादी नियम है जिसका मैं उपयोग कर रहा हूं: "वस्तुएं दो बार करीब होती हैं, दो बार बड़ी दिखाई देती हैं।"

अब, इसे स्वयं परीक्षण करके, मुझे पता है कि वास्तविक दुनिया में यह नियम लागू नहीं होता है;) लेकिन क्या कुछ स्थिरांक हैं जिनका उपयोग वास्तविक दुनिया की गणना में परिप्रेक्ष्य या कुछ और के लिए किया जाता है? या एक सूत्र?

मुझे पता है कि इस तरह का सवाल पूछने के लिए यह सबसे अच्छी जगह नहीं हो सकती है, लेकिन चूंकि यह एकमात्र साइट है जिसका उपयोग मैं गेम से संबंधित प्रश्नों के लिए करता हूं, और मेरा संदर्भ एक गेम है, मैंने सोचा कि मैं इसे आजमाऊंगा। इसके अलावा, मैं उम्मीद कर रहा हूं कि यह व्यक्ति यहां है जो 3 डी दृष्टिकोण और मैट्रीस या कुछ के बारे में सब कुछ जानता है, क्योंकि यह 3 डी गेम से संबंधित हो सकता है;)

tl; डॉ:

"एक वस्तु दो बार जितनी करीब होती है, उससे दोगुनी बड़ी दिखाई देती है" जो वास्तविक दुनिया में सच नहीं है। लेकिन कौन सा निरंतर या सूत्र सही है?


3
मुझे कोई सुराग नहीं है कि उत्तर क्या है लेकिन मुझे पता है कि मैं कैसे पता लगा सकता हूं। कुछ की कुछ तस्वीरें ले लो। शायद कागज का एक टुकड़ा। उन्हें अलग-अलग ज्ञात दूरी से लें और फिर कुछ गणित करें कि यह गणना करें कि छवि का कितना हिस्सा कागज के टुकड़े द्वारा लिया गया है और उसके द्वारा अनुपात का निर्धारण करें। एक मजेदार प्रयोग हो सकता है!
स्पार्टनडोनट

मुझे आश्चर्य हो रहा है कि किसी ने प्राकृतिक लघुगणक के बारे में कुछ भी क्यों नहीं बताया है ...
चाड हैरिसन

4
यह सच क्यों नहीं है? मुझे लगता है कि यह सच है।
इवान कुकिर

@hydroparadise इस प्रश्न के साथ प्राकृतिक लघुगणक का क्या करना है?
नाथन रीड

मैं यहां सिर्फ पांडित्यपूर्ण हूं, मुझे पता है, लेकिन "दो बार करीब" एक अजीब वाक्यांश है। क्या यह "आधा दूर नहीं होना चाहिए"? , दो बार ’बड़ा है, लेकिन अगर कुछ करीब आता है तो दूरी छोटी हो जाती है।
MrVimes

जवाबों:


19

आम तौर पर यह सच है, यह आपके दृष्टिकोण के आधार पर और किस दिशा में चला गया है, यह देखने के कोण पर निर्भर करता है।

वस्तुओं के लिए दृष्टिकोण का उदाहरण

ध्यान दें कि पहले कैमरे के दृश्य में, जैसे कि लाल ब्लॉक कैमरे के दृश्य के लिए लंबवत है, वस्तु एक परिपूर्ण 1: 2 अनुपात में दो बार बड़ी लगती है (ध्यान दें कि यह स्थानांतरित होने के बाद दृश्य के किनारे को हिट करता हुआ तीर को इंगित करता है) करीब दो बार)

दूसरा समान आकार का ब्लॉक है जिसे 45 डिग्री पर घुमाया जाता है। जैसा कि इसे घुमाया जाता है, नीचे का किनारा अब शीर्ष किनारे के रूप में कैमरे से समान दूरी पर नहीं है, इसलिए यह 1: 2 के अनुपात को सही ढंग से नहीं देखता है लेकिन यह वास्तविक तथ्य में दोगुना है (जैसा कि यह है) आगे के नीले ब्लॉक पर समान कोण, क्योंकि यह नीले रंग के ब्लॉक में है।)

वास्तव में इसका मतलब यह है कि आपका दोस्त सही था और आपकी वस्तुओं के लिए 1: 1 अनुपात ("ऑब्जेक्ट दो बार करीब, दो बार बड़े दिखाई देते हैं।") एक अच्छा विकल्प है।



बहुत बढ़िया जवाब! तस्वीरें निश्चित रूप से इसे और स्पष्ट करती हैं। वास्तव में अब मैं वास्तव में बेवकूफ महसूस कर रहा हूं, क्योंकि मैंने सवाल को पोस्ट करने से पहले अपने चेहरे के सामने हाथ पकड़कर इसे करीब ले जाने की कोशिश की थी। और फिर मैंने सोचा: नहीं यह दो बार के रूप में बड़ा नहीं लगता है .... मुझे इसे और अधिक तीव्रता से मापा जाना चाहिए;) परिप्रेक्ष्य एक अजीब बात है! इसके अलावा, इफील जैसे मुझे स्वयं चित्रों के साथ आने में सक्षम होना चाहिए;) लेकिन बहुत अच्छा जवाब! धन्यवाद!
बेरी

@ मेसन व्हीलर - सॉर्ट किया गया: पी
टॉम 'ब्लू' पिडॉक

8

किसी वस्तु का दो बार पास होना दुगना बड़ा दिखाई देता है। यह थेल्स के प्रमेय का परिणाम है और वास्तविक दुनिया में यह सच है।

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


महान संदर्भ! मैं निश्चित रूप से थेल्स प्रमेय की जांच करूंगा, और ग्राफिक्स पाइपलाइन को बेहतर ढंग से समझने की कोशिश करूंगा।
बेरी

7

वास्तव में यह बहुत अधिक सच है (यदि आप किसी वस्तु को दो बार दूर ले जाते हैं तो वह आधा जितना बड़ा दिखता है) लेकिन यह अस्पष्ट करता है कि दर्शकों की चाल के अनुसार वस्तुओं का दृश्य आकार कैसे बदलना चाहिए। विशेष रूप से, वस्तुएं जितनी तेजी से बढ़ती हैं, वे उतनी ही तेजी से दिखाई देती हैं। ऐसा इसलिए है क्योंकि ऑब्जेक्ट के पास होने पर दर्शक दूर से आधी दूरी को बहुत तेजी से कवर करता है, जब ऑब्जेक्ट आगे दूर होता है। या इसे दूसरे तरीके से रखने के लिए, जब दर्शक की गति स्थिर होती है, तो "आधी दूरी" का मान बदल जाता है क्योंकि वस्तु की दूरी बदल जाती है।


2

चूंकि आप वास्तव में 3 डी स्पेस में काम नहीं कर रहे हैं, हम मान सकते हैं कि स्प्राइट्स कभी भी घूमते नहीं हैं (रोटेशन को तिरछा करने के साथ अनुकरण किया जा सकता है) यह सरल बाधा यह बहुत आसान बनाता है कि आकार के आधार पर दूरी के आधार पर कुछ सटीक संख्या प्राप्त करना आसान है कैमरे से।

सबसे पहले, आपको यह समझने की आवश्यकता है कि 3 डी ऑब्जेक्ट कैसे प्रदान किए जाते हैं। भले ही एक कैमरा एकल बिंदु में परिवर्तित हो जाता है, लेकिन एक अदृश्य विमान होता है जो एक स्क्रीन के रूप में कार्य करता है जिस पर वस्तुओं को खींचना है। स्क्रीन के बारे में आपको केवल एक चीज जानने की जरूरत है कि वह कैमरे से कितनी दूर है।

यहाँ एक आरेख है कि एक वस्तु को दो अलग-अलग दूरी पर कैमरे में कैसे प्रस्तुत किया जाता है।

जैसा कि आप उम्मीद करेंगे, कैमरे से दूरी पर वस्तु की ऊंचाई निर्भर है। लेकिन जब से समीपवर्ती समतल विमान पर चढ़ाई होती है, हमें उस बिंदु पर स्प्राइट की ऊंचाई की गणना करनी चाहिए।

कुछ मूल ट्रिगर गणनाएँ आपको निम्न सूत्र तक ले जाएंगी:

f(d, v) = v/(v+d)
* Where f is the size ratio to the original sprite aka size factor
    and v is the distance to the near clipping plane (trial and error value)
    and d is the distance from the near clipping plane to the object

उदाहरण:

Assuming you have a sprite that is 2.5x1.8 units in size and 10 units away 
   from the camera, and that the near clipping plane is 5 units from the camera.

sizeFactor = 5/(5+10) = 0.3

renderHeight = actualHeight * sizeFactor = 1.8 * 0.3 = 0.54
renderWidth  = actualWidth * sizeFactor = 2.5 * 0.3 = 0.75

मैं सुझाव दूंगा v=5कि यह कैसा दिखता है, इसके आधार पर वहां से शुरू करें और फिर वहां से समायोजित करें। मैं एक फिडेल को एक साथ फेंक सकता हूं जो आपको रियलटाइम में बदलाव देखने की अनुमति देता है।

टी एल; डॉ

The change in height or width should be multiplied by the following factor:

sizeFactor = v/(v+d)

Where v = Some number greater than 0 that never changes (try 1 thru 5)
  and d = the distance from the camera

So an object that is 2.5 units tall would be rendered at 2.5*sizeFactor units tall.

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

डेमो!


हां मैं वास्तव में एक ऑर्थोग्राफिक दृश्य के लिए लक्ष्य कर रहा हूं। मैं जिस खेल से "उधार" ले रहा हूं, वह मेरी वर्तमान प्रेरणा है। खेल के कुछ वर्गों में आप फूलों पर कूद सकते हैं, और फिर आप एक और परत में एक अलग गहराई के साथ उछाल देंगे। फिर कैमरा उस गहराई तक कॉरस्पोंडिग में या बाहर जाता है। इस वीडियो में , 4:50 और 5:00 बजे धुरी को देखा जा सकता है ।
बेरी

इसके अलावा, महान जवाब! लेकिन सिर्फ एक पुष्टि के बाद कि नियम "दो बार करीब, दो बार जितना बड़ा" लागू होता है पर्याप्त होता, मैंने ब्लू के जवाब को सबसे अच्छा चुना।
बेरी

धन्यवाद, और अपने खेल के साथ शुभकामनाएँ! लेकिन मैं दूसरों के लिए स्पष्ट करना चाहता हूं कि "दो बार जितना करीब, उतना बड़ा दो बार" महान काम करेगा अगर सब कुछ कैमरे के बहुत करीब है। जैसे-जैसे चीजें आगे बढ़ती हैं, आकार में कथित परिवर्तन कम हो जाता है। उदाहरण के लिए, अपने अंगूठे को करीब से देखें, फिर अपने हाथ को बढ़ाएं और उसे देखें। आपके अंगूठे का आकार काफी छोटा दिखाई देता है। उसके बाद, कुछ दूर पर देखें। एक कदम पीछे की ओर लें (लगभग आपकी बांह की लंबाई जितनी ही)। ध्यान दें कि आकार मुश्किल से कैसे बदला गया? यदि किसी खेल को देखने का एक लंबा क्षेत्र है, तो गणित का थोड़ा सा उपयोग करना एक लंबा रास्ता तय करेगा।
जिम बक

EDIT: मैंने अपनी पिछली टिप्पणी में एक गलती की। "दो बार करीब, दो बार जितना बड़ा" सही है जब आइटम कैमरे से उनकी दूरी के संबंध में एक दूसरे के काफी करीब रहते हैं।
जिम बक

यहां एक त्वरित डेमो है जिसे मैंने एक साथ रखा है, माउस का उपयोग करने के लिए और स्क्रॉल व्हील को गहराई में बदलने के लिए उपयोग करें।
जिम बक

0

यह कवर नहीं किया गया था और मुझे लगा कि यह फायदेमंद हो सकता है: यह ध्यान दिया जाना चाहिए कि जब आप आधी दूरी तय करते हैं, तो एक्स और वाई दोनों आयामों में आकार को दोगुना करना स्प्राइट के कुल क्षेत्र को चौगुना कर देगा । यह है क्योंकि:

Area = X * Y

ज़ूम इन करने के बाद:

NewArea = (x*2) * (y*2)

इससे आपको आभास हो सकता है कि ज़ूमिंग प्रभाव जल्दी हो रहा है या बहुत तीव्र है। आप उपरोक्त फॉर्मूले में 2 को बदलकर 1.5 या 1.33 की बजाय फ्लोट वैल्यू में बदल सकते हैं।

वैकल्पिक रूप से, मैंने जो किया है, वह कैमरे की ट्रांसलेशन (एक्स और वाई) के साथ बाइट वैल्यू में आपकी टाईल्स के लिए कैमरा डेप्थ (डिस्टेंस) स्टोर करता है।

XTileSize = (255 / CameraZ) * DefaultTileWidth
YTileSize = (255 / CameraZ) * DefaultTileHeight

ध्यान दें कि CameraZ1-255 के बीच सख्ती करनी होगी, और यह प्रतिबंध भविष्य में आपके लिए एक लाभ या प्रतिबंध हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.