दिलचस्प पोस्ट
जावास्क्रिप्ट में = 8 क्यों करता है? शैल स्क्रिप्ट लापता आखिरी पंक्ति पढ़ें इनपुट और आउटपुट के लिए सी फंक्शन में नॉर्मि एरेज़ पास करना क्या स्थिर वैरिएबल केवल एक बार आरंभ करता है? तालिका सेल में लिंक बनाओ पूरी पंक्ति ऊंचाई भरें मैग्रा में परिभाषित प्रगति जावा में क्यू ऑब्जेक्ट को मैं कैसे इन्स्तांत कर सकता हूं? PHP मेल () संलग्नक समस्याएं स्ट्रिंग्स को स्टोर करने के लिए डेटा टाइप "टेक्स्ट" का उपयोग करने की कोई डाउनसाइड्स? JAXB द्वारा उत्पन्न नहीं @ XmlRootElement SSL में उपयोग करने के लिए जावा कीस्टोर में मौजूदा x509 प्रमाणपत्र और निजी कुंजी को कैसे आयात करें? सीएसएस: कुछ तत्वों को सामग्री जोड़ने के बाद नहीं रंगों की समानता की जांच करने के लिए एल्गोरिथ्म जब जीएचसी हास्केल में मेमोआइज़ेशन स्वचालित है? जावा विकल्प-एक्सएमएक्स किसके लिए खड़ा है?

ओपनजीएल ES में गोलाकार आरेखण

मैं एक क्षेत्र को आकर्षित करना चाहता हूं, मुझे पता है कि ओपनजीएल में कॉल कैसे करें जैसे कि ग्लैबिन () और ग्लैण्ड ()।

लेकिन ES में कुछ भी नहीं है

सुझाव / ट्यूटोरियल लिंक?

वेब के समाधान से एकत्रित समाधान "ओपनजीएल ES में गोलाकार आरेखण"

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

ऐसा करने के लिए, आप निम्न की तरह एक प्रक्रिया को नियोजित करते हैं:

क्षेत्र नकली पीढ़ी

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

इस दृष्टिकोण का लाभ यह है कि आपके डिस्प्ले के समाधान के रूप में गोलाकार चिकना होता है, और क्षेत्र आसानी से आपके ज्यामिति के पुनर्गणना की आवश्यकता के बिना छोटे से बड़े पैमाने पर स्केल किए जा सकते हैं। यह वर्टेक्स प्रोसेसर से टुकड़े प्रोसेसर के लिए प्रदान करने के लिए बोझ को स्थानांतरित करता है, लेकिन एक एकल क्षेत्र के लिए जो कि ओपनजीएल ES 2.0 उपकरणों पर एक समस्या नहीं है I

मैं इस तकनीक का उपयोग इस आईओएस आवेदन में करता हूं, जिसके लिए उस स्रोत पर सोर्स कोड उपलब्ध है, और इसके बारे में थोड़ी अधिक बात करते हैं । मैं शिखर shader का एक सरलीकृत संस्करण का उपयोग कुछ इस तरह दिखता है:

attribute vec4 position; attribute vec4 inputImpostorSpaceCoordinate; varying mediump vec2 impostorSpaceCoordinate; varying mediump vec3 normalizedViewCoordinate; uniform mat4 modelViewProjMatrix; uniform mediump mat4 orthographicMatrix; uniform mediump float sphereRadius; void main() { vec4 transformedPosition; transformedPosition = modelViewProjMatrix * position; impostorSpaceCoordinate = inputImpostorSpaceCoordinate.xy; transformedPosition.xy = transformedPosition.xy + inputImpostorSpaceCoordinate.xy * vec2(sphereRadius); transformedPosition = transformedPosition * orthographicMatrix; normalizedViewCoordinate = (transformedPosition.xyz + 1.0) / 2.0; gl_Position = transformedPosition; } 

और सरलीकृत टुकड़ा शेडर यह है:

 precision mediump float; uniform vec3 lightPosition; uniform vec3 sphereColor; uniform mediump float sphereRadius; uniform sampler2D depthTexture; varying mediump vec2 impostorSpaceCoordinate; varying mediump vec3 normalizedViewCoordinate; const mediump vec3 oneVector = vec3(1.0, 1.0, 1.0); void main() { float distanceFromCenter = length(impostorSpaceCoordinate); // Establish the visual bounds of the sphere if (distanceFromCenter > 1.0) { discard; } float normalizedDepth = sqrt(1.0 - distanceFromCenter * distanceFromCenter); // Current depth float depthOfFragment = sphereRadius * 0.5 * normalizedDepth; // float currentDepthValue = normalizedViewCoordinate.z - depthOfFragment - 0.0025; float currentDepthValue = (normalizedViewCoordinate.z - depthOfFragment - 0.0025); // Calculate the lighting normal for the sphere vec3 normal = vec3(impostorSpaceCoordinate, normalizedDepth); vec3 finalSphereColor = sphereColor; // ambient float lightingIntensity = 0.3 + 0.7 * clamp(dot(lightPosition, normal), 0.0, 1.0); finalSphereColor *= lightingIntensity; // Per fragment specular lighting lightingIntensity = clamp(dot(lightPosition, normal), 0.0, 1.0); lightingIntensity = pow(lightingIntensity, 60.0); finalSphereColor += vec3(0.4, 0.4, 0.4) * lightingIntensity; gl_FragColor = vec4(finalSphereColor, 1.0); } 

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

धागे के ऊपर आने वाले लोग ओपनएन्एलएस 2.0 में "क्षेत्र" सहित विभिन्न प्रकार के आकार बनाने के लिए लिंक प्रदान कर सकते हैं।

https://github.com/regar007/ShapesInOpenGLES2.0

आकृतियों की कक्षा कार्यान्वयन आपके कोड के साथ एकीकृत करने में बहुत आसान बनाता है।

ऑब्जेक्ट को इंस्टाइएट करें और ऑब्जेक्ट को आकर्षित करने के लिए रेंडर फ़ंक्शन का उपयोग करें।