प्रक्रियात्मक ज्यामिति पीढ़ी


10

मैं हाल ही में OS X के लिए SceneKit में देख रहा हूँ और देखा कि ज्यामितीय आकृतियाँ बनाने के लिए कई कारखाने विधियाँ हैं:

बॉक्स, कैप्सूल, शंकु, सिलेंडर, विमान, पिरामिड, क्षेत्र, टोरस और ट्यूब।

मैं अपने रेंडर के लिए इस तरह की आदिम आकृतियों को जोड़ने में दिलचस्पी रखता हूं, लेकिन किसी भी उचित स्रोत को खोजने के लिए संघर्ष कर रहा हूं जिससे मैं प्रक्रियात्मक पीढ़ी की समझ इकट्ठा कर सकूं। कई संसाधन हैं जो सिद्धांत को विस्तार देते हैं, लेकिन इसे वापस करने के लिए उपयुक्त स्रोत कोड का अभाव है।

SceneKit कारखाने के तरीके प्रदान करता है जो गतिशील रूप से ऐसी आकृतियों की विशेषताओं को स्थापित करने की अनुमति देता है। बॉक्स के मामले में, आप चौड़ाई, ऊंचाई और गहराई खंडों की संख्या के लिए पूर्णांक मान प्रदान कर सकते हैं, जिन्हें प्रत्येक चेहरे में विभाजित किया जाना चाहिए।

मैं सिद्धांत को समझता हूं लेकिन वांछित प्रभाव को प्राप्त करने के लिए उप-विभाजन ज्यामिति का सामना करने के लिए ज्ञान का अभाव है।

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

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

टिप्पणियों के आधार पर संपादित करें

मुझे स्पष्ट करना चाहिए था कि मुझे पता है कि मूल आकृतियों के लिए कोने कैसे बनाए जाते हैं, इनमें से अधिकांश संभवतया सरल छोरों द्वारा प्राप्त किए जा सकते हैं। जो मैं समझ नहीं पा रहा हूं वह यह है कि वर्टिकल के वर्टिकल से चेहरे कैसे बनाएं। मैं एक त्रिभुज पट्टी, या त्रिभुज कैसे बना सकता हूँ, प्रतीत होता है कि बिना किसी क्रम के सरणी से?

मुझे लगता है कि एक बार जब मैं इस बिंदु को पा लेता हूं, तो मैं प्रत्येक चेहरे से मानदंड बना सकता हूं। जब तक मैंने इस पर ध्यान नहीं दिया है, मैंने इसके लिए बहुत सारे संदर्भ देखे हैं और मुझे यकीन है कि इसे लागू करना काफी आसान होगा।

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

अंतिम पहलू बनावट लागू होगा। फिर से, यह कुछ ऐसा नहीं है जिसे मैंने लागू किया है, लेकिन आवश्यकताओं पर ध्यान दिया है और पढ़ा है।

यहां मुख्य समस्या यह है कि मुझे पता है कि मैं क्या हासिल करना चाहता हूं, लेकिन यह समझने के लिए संघर्ष कर रहा हूं कि पूर्वोक्त प्राथमिकताओं के लिए कैसे लागू किया जाए। मुझे उम्मीद थी कि मैं स्रोत कोड के माध्यम से ज्ञान के कुछ अंश खोज पाऊंगा, लेकिन मुझे अब तक कुछ भी उपयुक्त नहीं मिला है।


आप कहते हैं कि आपकी समस्या ज्यामिति को विभाजित कर रही है, लेकिन फिर आप कहते हैं कि बनाना आसान होना चाहिए, और फिर आप कहते हैं कि आपकी समस्या यह है कि चेहरे कैसे बनाएं, और फिर आप कहें कि आपकी समस्या बनावट-मानचित्रण है। आपकी समस्या क्या है? क्या आप शीर्ष पदों को उत्पन्न कर सकते हैं? क्या आप किनारों और चेहरों को उत्पन्न कर सकते हैं? इसके अलावा, बनावट निर्देशांक आपकी बनावट पर निर्भर करता है और आप इसके साथ क्या हासिल करना चाहते हैं, इसलिए बनावट निर्देशांक के बारे में सवाल अच्छा नहीं है। अंत में, आदिम पीढ़ी केवल ज्यामिति के बारे में है और लोग शायद ही कभी इसे "प्रक्रियात्मक ज्यामिति" कहते हैं, हालांकि यही है।
जलसा

मैं समझता हूं कि सरल आकृतियों जैसे क्यूब या प्लेन के लिए ज्योमेट्री कैसे बनाई जाती है, इसके चेहरे का निर्माण जो मैं समझ नहीं पाता हूं। मैं शीर्षकों के समूह से चेहरे कैसे बनाऊं? अधिक जटिल आकृतियों के लिए बिंदुओं को प्लॉट करना समस्या का एक हिस्सा है भले ही मेरी एक बुनियादी समझ हो। उन सभी को एक त्रिभुज पट्टी या त्रिकोण में एक साथ जोड़कर देखना, मैं अपने सिर को चारों ओर लपेटने के लिए संघर्ष कर रहा हूं।
CaptainRedmuff

ठीक है, विवरण के लिए धन्यवाद। आप अपने प्रश्न को स्पष्ट करने के लिए संपादित करना चाह सकते हैं। उत्तर देने का समय!
जलसा

जवाबों:


11

एक बॉक्स की तरह किनारों और एक आदिम आकार के चेहरे को उत्पन्न करने का तरीका, एक शंकु और उन सभी को जिन्हें आपने उद्धृत किया है, उन्हें उसी समय उत्पन्न करना है जब आप कोने बनाते हैं। वास्तव में, आपको एक तार्किक तरीके से कोने बनाना चाहिए जो किनारों और चेहरों की गणना करना आसान बनाता है।

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

इस अकुशल समाधान के अलावा, मुझे लगता है कि आप केवल प्रति मामले के आधार पर प्राथमिकताओं का इलाज कर सकते हैं, जैसा कि उदाहरणों में है।

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

आपको इनमें से प्रत्येक आदिम आकृतियों को बनाने वाले कोने, किनारों और चेहरों की गिनती करने में सक्षम होना चाहिए क्योंकि उन्हें गिनने में सक्षम होने का मतलब है उस वस्तु के गुणों को समझना जो आपको उस विधि को तैयार करने में मदद करती है जिसके साथ आप उनका निर्माण करेंगे, लूप का उपयोग कर और अन्य उपकरण जैसा कि हम देखेंगे।

शंकु

एक शंकु के लिए n + 2 कोने, 3n किनारों और 2n चेहरे:

  1. दो अलग-अलग कोने बनाएं।
  2. किसी एक कोने (बेस वर्टेक्स) के चारों ओर एक घेरा बनाएं, जो कि पहले दो कोने के बीच के खंड के लंबवत समतल के भीतर हो। उम्मीद है कि आप त्रिकोणमिति का उपयोग करके एक वृत्त बना सकते हैं, है ना? यह पहले से ही शंकु के सभी कोने हैं। यह भी सभी किनारों में से एक तिहाई है ( सर्कल में n किनारे हैं और कुल मिलाकर 3n हैं )।
  3. सर्कल में आधार शीर्ष से एन कोने तक एन किनारों बनाओ । जैसा कि आप करते हैं कि आप आधे चेहरे (जो n चेहरे हैं) बना सकते हैं।
  4. सर्कल में एन वर्टिक्स से टिप वर्टेक्स तक एन किनारों को बनाएं । जैसा कि आप करते हैं कि आप चेहरे के अन्य आधे (कि n चेहरे) कर सकते हैं।

1) दो कोने 2) और एक वृत्त
3) और चेहरे
4) और चेहरे
अंतिम परिणाम:परिणाम

आप किनारों और चेहरों को भी बना सकते हैं जैसा कि आप उस लूप को चलाते हैं जो सर्कल बनाता है। वही जटिलता, वही बात। सर्कल पर एक शीर्ष बनाएं, इसे अपने वर्टीकल के सरणी में स्टोर करें, इंडेक्स के जोड़े के सरणी में संबंधित किनारे (इंडेक्स की जोड़ी) को जोड़ दें यदि आपको ऐसा लगता है, और अंत में इंडेक्स के ट्रिपलेट्स के अपने सरणी में संबंधित चेहरा जोड़ें। । अगले शीर्ष पर ले जाएँ।

सिलेंडर और ट्यूब: एक ही काम दो बार नहीं, और quads

फिर से, ट्यूब के लिए यह एक शीर्ष और एक सर्कल के साथ शुरू होता है जो सिलेंडर के ऊपर या नीचे डिस्क के केंद्र में होगा:

  1. एक शीर्षासन करें।
  2. शीर्ष के चारों ओर एक चक्र बनाएं। किनारों को जोड़ना (यदि आप किनारों को चाहते हैं) सर्कल के क्रमिक शीर्षों के बीच और केंद्र के शीर्ष और प्रत्येक सर्कल के शीर्ष के बीच। केंद्र के शीर्ष पर बने वर्टिकल के प्रत्येक त्रिभुज और सर्कल पर क्रमिक दो सिरों के बीच चेहरे जोड़ें।
  3. वह सब डुप्लिकेट करें, वांछित सिलेंडर की लंबाई से, आपके द्वारा अभी बनाए गए आधार की दिशा में प्रतिलिपि का अनुवाद करें।
  4. ऊपर और नीचे लिंक करें।

ऊपर और नीचे लिंक करने के लिए, आपको जोड़े के जोड़े के बीच quads बनाना चाहिए जो एक दूसरे का सामना करते हैं। तो आगे सोचें और अपने आप को एक ऐसा फ़ंक्शन क्यों न बनाएं जो चार त्रिकोणीय में से दो त्रिकोणीय चेहरे बनाता है?

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

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

आपको हमेशा उन वस्तुओं के ज्यामितीय गुणों का उपयोग करना चाहिए जिन्हें आप उनके बनाने को सरल बनाते हैं । अर्थात्, उनके समरूपता और अपरिवर्तनवादी

एक सिलेंडर के लिए, बस बेस वर्टेक्स न बनाएं, बस सर्कल बनाएं, डुप्लिकेट करें, कॉपी ट्रांसलेट करें, क्वाड्स बनाएं।

क्षेत्र और कैप्सूल: जटिलता को जोड़ना, अभी भी एक ही काम दो बार नहीं

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

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

एक साधारण यूवी क्षेत्र:
क्षेत्र

हम वास्तव में इसका केवल एक आधा हिस्सा बनाते हैं (उदाहरण के लिए), उस आधे को डुप्लिकेट करें, कॉपी को उल्टा घुमाएं और कैप्सूल की लंबाई के अनुसार अनुवाद करें:
आधा

हम ऊपर और नीचे आधा लिंक करते हैं:
कैप्सूल

वास्तविक (कुछ) कड़ी मेहनत त्रिकोणमिति से होती है जो एक क्षेत्र बनाने में जाती है। यूवी क्षेत्र से संबंधित सभी लम्बों के सेट को फ़ॉर्म के सभी बिंदुओं के सेट के रूप में वर्णित किया जा सकता है:

अंक

जहाँ R गोले की त्रिज्या है और एक निश्चित धनात्मक भी पूर्णांक N के लिए , हमारे पास स्थिरांक है

π = × θ / N ,

कश्मीर और एन के साथ पूर्णांक हैं कश्मीर से अलग 0 को 2N-1 और एन से अलग एन / 2 के लिए + एन / 2

अर्ध-गोले या गोले के एक गोले को बनाने के लिए, आपको k और n द्वारा लिए गए मानों के सेट को प्रतिबंधित करना होगा ।

यदि k वास्तविक संख्याएँ हैं और केवल पूर्णांक संख्याएँ नहीं हैं, तो आपको इसकी सतह पर केवल कोने ही नहीं, बल्कि एक पूरी जगह मिलेगी। इसलिए हमने यहां जो कुछ किया है वह आदिम की सतह के समीकरण को मजबूत कर रहा है

भयावह टोरस : हमने जो देखा है, उसके बाद यह आसान है!

फिर से, और अधिक त्रिकोणमिति, अधिक कोने, अधिक क्वाड्स, अधिक समरूपताएं, अधिक अपरिवर्तनीय ... अधिक ज्यामिति! एक टोरस की सतह के लिए समीकरण का पता लगाएं, इसे "ठीक से व्यवस्थित करें", टोरस की (स्पष्ट) सममितियों का उपयोग करके समस्या को सरल बनाएं और, अंत में, आपके द्वारा परिभाषित सिरों के सेट के माध्यम से लूप करें और किनारों और चेहरों को बनाएं। जाओ!

देख? पूरी तरह से सीधा।


वाह। इतनी विस्तृत प्रतिक्रिया के लिए और इतने सारे उदाहरणों के लिए आपका धन्यवाद। मैंने केवल एक क्षेत्र का आधा हिस्सा बनाने और सममित तत्वों को प्रतिबिंबित करने का विचार नहीं किया था। इसे लिखने के लिए समय निकालने के लिए बहुत-बहुत धन्यवाद मैं आसानी से समझ सकता हूं और उम्मीद है कि आसानी से अभ्यास कर सकता हूं।
CaptainRedmuff

आपका स्वागत है! मुझे खेद है कि हालांकि कोई कोड नहीं था।
जर्सला

विधियों की रूपरेखा उस चीज की अधिक थी जिसकी मुझे वास्तव में आवश्यकता थी। मैं कम से कम वहाँ से कार्रवाई की योजना तैयार करना शुरू कर सकता हूं:] मुझे नहीं लगता कि आपके पास चम्फर्ड किनारों के साथ बॉक्स / क्यूब्स पर कोई जानकारी है? docs.autodesk.com/3DSMAX/15/ENU/3ds-Max-Help/images/…
CaptainRedmuff

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