मेरे पास अंक का एक सेट है और प्रत्येक के पास "प्रभाव" या अनिवार्य रूप से त्रिज्या का क्षेत्र है। मैं एक सरल परिपत्र रेखा के रूप में सभी बिंदुओं के लिए इन प्रभाव मंडलियों में से प्रत्येक को आकर्षित करने में सक्षम होना चाहता हूं।सर्कल को छेड़छाड़ करने की रेखाचित्र
वे ओवरलैप होंगे हालांकि मैं आकार के बाहर के बाहर खींचना चाहता हूं। मुझे पता है कि शायद मुझे काम करने की आवश्यकता होगी जहां वे छेड़छाड़ करते हैं और किसी भी तरह से आकर्षित करने के लिए कुल आकार बनाते हैं। समस्या यह है कि कुछ बिंदु दूसरों को भी छू नहीं सकते! इसलिए मुझे इसे भी काम करने में सक्षम होना चाहिए।
मैं वर्णन करने के लिए मैं बस क्या मतलब है की कोशिश की है:
ध्यान दें कि मैं बस काली रेखा, कोई भरण आकर्षित करने के लिए कामना करता हूं। ऐसा इसलिए है क्योंकि मैं पृष्ठभूमि छवियों और अन्य ज्यामिति को दिखाने के लिए चाहता हूं।
मैं इसे ओपनजीएल में कर रहा हूं, इसलिए सर्कल संभवतः जीएल_लाइनईएस या कुछ ऐसे घटकों के साथ बनायेगा जो घटता है लेकिन मुझे वास्तव में इस परिधि को कैसे काम करेगा इस बारे में कोई जानकारी नहीं है।
अगर किसी के पास कोई सलाह है या मुझे यह बता सकता है कि मैं इसे कैसे काम करने के बारे में सोच सकता हूं तो इसकी सराहना की जाएगी!
यह गणित प्रश्न का अधिक हो सकता है, मैं कोड के बिट्स की तलाश नहीं कर रहा हूं लेकिन वास्तव में इन आकृतियों को कैसे काम करने के बारे में जाना है। मैं बस यह नहीं सोच सकता कि इसे कैसे करें!
***** संपादित करें: समाधान के साथ मैं आया, उम्मीद है कि किसी और की मदद कर सकता है!
इसलिए मैंने सुझाए गए विचारों का उपयोग किया और मूल रूप से निर्णय लिया कि स्टैंसिल बफर का उपयोग करके आकर्षित करने का सबसे अच्छा तरीका होगा। इसका मतलब यह है कि मैं अपने बिंदुओं के माध्यम से 3 बार लूप करता हूं लेकिन मुझे वैसे भी दृश्यमान लोगों को खोजने के लिए उनमें से कुछ सावधानीपूर्वक छंटनी करने की ज़रूरत है।
तो कोड बुद्धिमान मैं अब इस राशि:
private void stencilCircleAroundStars()
{
//Lets try and draw something here using stencil
glColorMask(false, false, false, false); //Disable colour mask
glEnable(GL_STENCIL_TEST); // Enable Stencil Buffer For "marking" the outer circle
glDisable(GL_DEPTH_TEST);// Disable Depth Testing
for (Object value : stars.values())
{
Star star = (Star)value;
glStencilFunc(GL_ALWAYS, 1, 1); // Always Passes, 1 Bit Plane, 1 As Mask
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); // We Set The Stencil Buffer To 1 Where We Draw Any Polygon
//Draw the large circle
starOb.location.copy(star.location);
starOb.setScale(2000);
starOb.draw();
}
for (Object value : stars.values())
{
Star star = (Star)value;
//Now we change the functions and remove a slightly smaller circle from buffer.
glStencilFunc(GL_ALWAYS, 0, 0); // Always passes, 0 bit plane, 0 as mask;
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); // We Set The Stencil Buffer To 0 Where We Draw Any Polygon
starOb.location.copy(star.location);
starOb.setScale(1900);
starOb.draw();
}
//Now we enable the colour
glColorMask(true, true, true, true);
glStencilFunc(GL_EQUAL, 1, 1); // We Draw Only Where The Stencil Is 1
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); // Don't Change The Stencil Buffer
glColor4f(0.5f, 1.0f, 0.5f, 0.5f);
for (Object value : stars.values())
{
Star star = (Star)value;
starOb.location.copy(star.location);
starOb.setScale(2000);
starOb.draw();
}
//Now we are done .. disable
glDisable(GL_STENCIL_TEST);
}
मेरे अंक सार संस्थाओं मेरा कार्यक्रम के उद्देश्य के लिए "सितारों" और StarOb मैं एक फ़ाइल जो फार्म से भरी हुई है quads का एक संग्रह है कहा जाता है में हैं एक अच्छा चिकनी सर्कल।
मैं एक बार के माध्यम से रंग मुखौटा और मैं पाश को निष्क्रिय सबसे बड़ा वृत्त स्टेंसिल बफर में मैं कर सकते हैं ड्राइंग और 1. मैं तो पाश आसपास फिर से स्टेंसिल बफर में छोटे बढ़ाया सर्कल ड्राइंग का एक मूल्य की स्थापना लेकिन इस बार एक की स्थापना, 0 का मान। यह किसी भी स्टार के चारों ओर एक सीमा छोड़ देना चाहिए जो अन्य सितारों को छू नहीं रहा है और प्रभावी रूप से हटाएगा जहां वे ओवरलैप करते हैं।
अंततः मैं रंग मुखौटा को फिर से सक्षम करता हूं और वास्तव में रंगीन मंडलियों को खींचता हूं। स्टैंसिल बफर अंदरूनी हिस्सों को प्रस्तुत करने से रोकता है और मुझे वह चाहिए जो मैं चाहता था! मैं फिर स्टैंसिल बफर अक्षम करता हूं।Video of it running
यह इस प्रकार से (पृष्ठभूमि जबकि परीक्षण तैयार नहीं किया गया था) बाहर आया था की एक कम गुणवत्ता संस्करण है:
तुम सच में इसे देखना चाहती थी, तो यहां अंक के कई बढ़ती मात्रा में पैदा करने की एक वीडियो है
आपके सुझाव के लिए धन्यवाद, मैंने इसे स्टैंसिल बफर के साथ करने में कामयाब रहा है और मेरे समाधान के साथ अपने प्रश्न को अपडेट करने के लिए वापस आया है, जो कि आप सुझाव दे रहे थे। यकीन नहीं है कि मुझे अब किसको टिकना चाहिए! – iexus
शायद हम दोनों को +1 दें? : डी – Shahbaz
हो गया: डी मैंने यह दिखाने के लिए अपना प्रश्न अपडेट कर दिया है कि मैंने क्या समाप्त किया।क्या आप जिस तरह से सोच रहे थे? मैं opengl ज्ञान में थोड़ा कमी है .. – iexus