वक्र पर स्ट्रोक लगाते समय आत्म-चौराहे से कैसे बचें?


11

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

वायरफ्रेम: http://twitpic.com/2zplw1/full
भरा: http://twitpic.com/2zpmw/full

जैसा कि आप देख सकते हैं, दूसरे मोड़ पर, आंतरिक भाग खुद को काटता है, जो उस बदसूरत विरूपण साक्ष्य का कारण बनता है। वहाँ एक अच्छा एल्गोरिथ्म / विधि है कि स्व-प्रतिच्छेदन पैदा करने के बिना घटता स्ट्रोक है?

संपादित करें : अधिक चरम उदाहरण, प्लस जो मैं प्राप्त करना चाहता हूं, उसका मजाक:

वायरफ्रेम: http://twitpic.com/2ztwzi/full
भरा: http://twitpic.com/2ztwkt/full
आइडियल आउटकम (मॉक-अप): http://twitpic.com/2ztxa8/full


वाह, जब मैंने इसे लिखा था तब मुझे शीर्षक के अर्थ का भी अंदाजा नहीं था। :)
थाट्सबल्स

जवाबों:


3

यदि आप GPU और किसी भी आधुनिक 3D Api (उदाहरण के लिए OpenGL / D3D) के साथ इनका प्रतिपादन कर रहे हैं, तो यह मुझे ऐसा लगता है जैसे आप गहराई से परीक्षण करके इससे छुटकारा पा सकते हैं। यदि आप अपने बाहरी क्रियाओं को z = FAR, और अपने अंदर के क्रियाओं को z = NEAR होने के लिए निर्दिष्ट करते हैं, तो गहराई परीक्षण को ओवरलैप को दिखाने से रोकना चाहिए। ओपन के साथ:


  // don't forget to clear depth buffer to 1.0f at beginning of frame.
  glClearDepth(1.0f);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  // enable depth testing.
  glEnable(GL_DEPTH_TEST);
  glDepthFunc(GL_LEQUAL);

// draw the Spline2D for each segment in spline for each vert in segment if (vert is an outer vert), set vert.z = 1.0, otherwise set vert.z=0.0

यदि आप पारभासी स्ट्रोक की जरूरत है, तो यह काम नहीं करेगा।


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

धन्यवाद, मेरे स्ट्रोक वास्तव में अपारदर्शी हैं, इसलिए यह बहुत सरल और आश्चर्यजनक रूप से काम करता है!
थाटबॉल्स

1

"फिक्स" इस बात पर निर्भर करने वाला है कि आप परिणामी आउटपुट को क्या देखना चाहते हैं। समस्या को वास्तव में अच्छी तरह से यहां परिभाषित नहीं किया गया है: यह देखने के लिए क्या है?

मेरा सुझाव है कि आप पहले गड़बड़ के एक और अधिक चरम उदाहरण बनाने की कोशिश करें, फिर इसे ठीक करने के लिए प्रेरणा पा सकते हैं।

क्या आप इसे मोड़ना चाहते हैं? बढ़त के साथ ओवरलैप? जब तक यह ओवरलैप नहीं होता तब तक खींचो?


अच्छी बात है, मैं आज शार्प-टर्न कर्व, और इलस्ट्रेटर या इंकस्केप में "आदर्श" कर्व को कोड़ा मारूंगा।
ThatsGobbles को

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