क्या एक सादृश्य है कि मैं इन विभिन्न प्रकारों की तुलना करते समय सोच सकता हूं, या ये चीजें कैसे काम करती हैं?
इसके अलावा, मैट्रिक्स को एकरूप करने का क्या मतलब है?
क्या एक सादृश्य है कि मैं इन विभिन्न प्रकारों की तुलना करते समय सोच सकता हूं, या ये चीजें कैसे काम करती हैं?
इसके अलावा, मैट्रिक्स को एकरूप करने का क्या मतलब है?
जवाबों:
सीधे http://www.lighthouse3d.com/tutorials/glsl-tutorial/data-types-and-variables/ से कॉपी किया गया । वास्तविक साइट में बहुत अधिक विस्तृत जानकारी है और बाहर की जाँच करना सार्थक होगा।
परिवर्तनीय क्वालिफायर
क्वालिफायर वेरिएबल को एक विशेष अर्थ देते हैं। निम्नलिखित क्वालीफायर उपलब्ध हैं:
- const - घोषणा एक संकलन समय स्थिर है।
- विशेषता - वैश्विक चर जो प्रति शीर्ष में बदल सकते हैं, जो ओपनजीएल एप्लिकेशन से शीर्ष क्रम में पारित किए जाते हैं। इस क्वालीफायर का उपयोग केवल शीर्ष शेड में किया जा सकता है। Shader के लिए यह केवल पढ़ने योग्य चर है। विशेषता अनुभाग देखें।
- वर्दी - वैश्विक चर जो कि आदिम [...] के अनुसार बदल सकते हैं, जो ओपनग्ल एप्लिकेशन से शादियों तक पारित किए जाते हैं। इस क्वालीफायर का उपयोग वर्टेक्स और फ्रेग्मेंट दोनों में किया जा सकता है। शेड्स के लिए यह केवल पढ़ने योग्य चर है। यूनिफ़ॉर्म अनुभाग देखें।
- अलग-अलग - एक वर्टीकल शेडर और एक फ्रैगर शैडर के बीच प्रक्षेपित डेटा के लिए उपयोग किया जाता है। शीर्ष छाया में लिखने के लिए उपलब्ध है, और केवल एक टुकड़ा छाया में पढ़ा जाता है। वैरिंग सेक्शन देखें।
एक सादृश्य के लिए, कास्ट और यूनिफॉर्म C / C ++ में वैश्विक चर की तरह हैं, एक स्थिर है और दूसरा सेट किया जा सकता है। गुण एक चर है जो एक शीर्ष के साथ आता है, जैसे रंग या बनावट निर्देशांक। वैरिएबल वैरिएबल को वर्टिकल शेडर के द्वारा बदला जा सकता है, लेकिन फ्रैग्मेंट शैडर द्वारा नहीं, इसलिए संक्षेप में वे पाइप लाइन के नीचे जानकारी दे रहे हैं।
uniform
कर रहे हैं प्रति-आदिम (एक पूरे ड्रा कॉल के दौरान निरंतर) पैरामीटर;attribute
कर रहे हैं प्रति-शिखर मानकों (आमतौर पर: पदों, Normals, रंग, यूवी, ...);varying
कर रहे हैं प्रति-टुकड़ा (या प्रति पिक्सेल वे:) पैरामीटर भिन्न हो पिक्सल से पिक्सल है।यह समझना महत्वपूर्ण है कि varying
अपने स्वयं के शेड्स को कैसे काम करता है।
मान लें कि आप v
प्रत्येक शीर्ष के लिए एक अलग पैरामीटर परिभाषित करते हैं त्रिकोण के शीर्ष के अंदर शेटर । जब इस भिन्न पैरामीटर को टुकड़े टुकड़े करने वाले के पास भेजा जाता है , तो इसका मान स्वचालित रूप से प्रक्षेपित करने के लिए पिक्सेल की स्थिति के आधार पर प्रक्षेपित होता है।
निम्नलिखित छवि में, लाल पिक्सेल को अलग-अलग पैरामीटर का एक प्रक्षेपित मूल्य प्राप्त हुआ v
। इसलिए हम उन्हें "बदलती" कहते हैं।
सरलता के लिए ऊपर दिया गया उदाहरण बिलिनियर प्रक्षेप का उपयोग करता है , जो मानता है कि खींचे गए सभी पिक्सेल कैमरे से समान दूरी पर हैं। सटीक 3 डी प्रतिपादन के लिए, ग्राफिक डिवाइस परिप्रेक्ष्य-सही प्रक्षेप का उपयोग करते हैं जो पिक्सेल की गहराई को ध्यान में रखते हैं।
noperspective
है और परिप्रेक्ष्य-सही प्रक्षेप नहीं (डिफ़ॉल्ट क्वालिफायर द्वारा पहचाना गया smooth
):। इस उदाहरण को देखें ।
वेबजीएल में एक विशेषता, एक समान और एक भिन्न चर के बीच अंतर क्या हैं?
ओपनजीएल में, एक "प्रोग्राम" "शेड्स" (छोटे प्रोग्राम्स) का एक संग्रह है, जो एक पाइपलाइन में एक दूसरे से जुड़े होते हैं।
// "program" contains a shader pipeline:
// vertex shader -> other shaders -> fragment shader
//
const program = initShaders(gl, "vertex-shader", "fragment-shader");
gl.useProgram(program);
3 डी मॉडल को व्यवस्थित करने के लिए शेड की प्रक्रियाएं वर्टिकल (वर्टेक्स शेडर), जियोमेट्रीज (ज्यामिति शेडर), टेसेलेशन (टेसेलेशन शेडर), टुकड़े (पिक्सेल शेडर) और अन्य बैच प्रोसेस टास्क (कंप्यूट शेडर) आवश्यक हैं।
OpenGL (WebGL) शेड्स GLSL (एक पाठ-आधारित shader भाषा GPU पर संकलित) में लिखे गए हैं।
// Note: As of 2017, WebGL only supports Vertex and Fragment shaders
<!-- Vertex Shader -->
<script id="shader-vs" type="x-shader/x-vertex">
// <-- Receive from WebGL application
uniform vec3 vertexVariableA;
// attribute is supported in Vertex Shader only
attribute vec3 vertexVariableB;
// --> Pass to Fragment Shader
varying vec3 variableC;
</script>
<!-- Fragment Shader -->
<script id="shader-fs" type="x-shader/x-fragment">
// <-- Receive from WebGL application
uniform vec3 fragmentVariableA;
// <-- Receive from Vertex Shader
varying vec3 variableC;
</script>
शेडर्स पाइप लाइन ( out
, inout
) में अगले shader को डेटा पास कर सकते हैं , और वे WebGL एप्लिकेशन या पिछले shader ( in
) से डेटा भी स्वीकार कर सकते हैं ।
uniform
वेबटेग एप्लिकेशन से डेटा प्राप्त करने के लिए वर्टेक्स और फ्रैगमेंट शेड्स (वास्तव में कोई भी शेडर) एक चर का उपयोग कर सकते हैं ।
// Pass data from WebGL application to shader
const uniformHandle = gl.glGetUniformLocation(program, "vertexVariableA");
gl.glUniformMatrix4fv(uniformHandle, 1, false, [0.1, 0.2, 0.3], 0);
वर्टेक्स शेडर attribute
वैरिएबल एप्लिकेशन से वैरिएबल का डेटा भी प्राप्त कर सकता है, जिसे आवश्यकतानुसार सक्षम या अक्षम किया जा सकता है।
// Pass data from WebGL application to Vertex Shader
const attributeHandle = gl.glGetAttribLocation(mProgram, "vertexVariableB");
gl.glEnableVertexAttribArray(attributeHandle);
gl.glVertexAttribPointer(attributeHandle, 3, gl.FLOAT, false, 0, 0);
वर्टेक्स शेडर varying
वैरिएबल का उपयोग करके डेटा को फ्रैगमेंट शैडर को पास कर सकता है । ऊपर GLSL कोड ( varying vec3 variableC;
) देखें ।
सीपीयू पर हमारे आवेदन से डेटा को GPU पर शेडर्स तक पहुंचाने के लिए वर्दी एक और तरीका है, लेकिन वर्टेक्स विशेषताओं की तुलना में वर्दी थोड़ा अलग है। सबसे पहले, वर्दी वैश्विक हैं। वैश्विक, जिसका अर्थ है कि एक समान चर shader प्रोग्राम ऑब्जेक्ट के अनुसार अद्वितीय है, और इसे shader प्रोग्राम के किसी भी चरण में किसी भी shader से एक्सेस किया जा सकता है। दूसरा, आप जो भी समान मूल्य निर्धारित करते हैं, जब तक वे या तो रीसेट या अपडेट नहीं हो जाते हैं, तब तक वर्दी उनके मूल्यों को बनाए रखेगी
मुझे https://learnopengl.com/Getting-started/Shaders से विवरण पसंद है , क्योंकि प्रति-आदिम शब्द सहज नहीं है