क्या जीएलएसएल (टुकड़ा शेडर) का उपयोग कर 2 डी ओपनजीएल बनावट के कुशलतापूर्वक बदलाव करने का कोई तरीका है?जीएलएसएल के साथ बनावट के रंग को कैसे बदला जाए?
क्या किसी के पास इसके लिए कुछ कोड है?
अद्यतन: यह user1118321 सुझाव से उत्पन्न कोड है:
uniform sampler2DRect texture;
const mat3 rgb2yiq = mat3(0.299, 0.587, 0.114, 0.595716, -0.274453, -0.321263, 0.211456, -0.522591, 0.311135);
const mat3 yiq2rgb = mat3(1.0, 0.9563, 0.6210, 1.0, -0.2721, -0.6474, 1.0, -1.1070, 1.7046);
uniform float hue;
void main() {
vec3 yColor = rgb2yiq * texture2DRect(texture, gl_TexCoord[0].st).rgb;
float originalHue = atan(yColor.b, yColor.g);
float finalHue = originalHue + hue;
float chroma = sqrt(yColor.b*yColor.b+yColor.g*yColor.g);
vec3 yFinalColor = vec3(yColor.r, chroma * cos(finalHue), chroma * sin(finalHue));
gl_FragColor = vec4(yiq2rgb*yFinalColor, 1.0);
}
और यह एक संदर्भ के साथ तुलना में परिणाम है:
मैं साथ मैं स्विच करने की कोशिश की क्यू के अंदर क्यू लेकिन परिणाम 0 डिग्री
के आसपास भी गलत है कोई संकेत?
तो तुलना के लिए की जरूरत है, यह मूल असंशोधित छवि है:
यह आरजीबी चारों ओर (1,1,1) वेक्टर ट्रिपल की एक रोटेशन है - आपको लगता है कि व्यक्त कर सकते हैं शेडर – Flexo
में एक आव्यूह गुणन के रूप में यदि आपका रंग पारी स्थिर है तो आप छोड़ सकते हैं अतान, वर्ग, पाप, और कॉस। आप जो कर रहे हैं वह उन्हें ध्रुवीय निर्देशांक में परिवर्तित कर रहा है, कोण को जोड़ रहा है, और वापस परिवर्तित कर रहा है। आप इस गणित को 2x2 रोटेशन मैट्रिक्स के साथ कर सकते हैं। यदि आपको यिक स्पेस में कोई अन्य गणित करने की आवश्यकता नहीं है तो आप पूरे ट्रांसफॉर्म को सटीक बना सकते हैं।2 डी रोटेशन (3x3 तक गद्देदार) के साथ अपने rgb2yiq को गुणा करें और फिर yiq2rgb के साथ एक बड़ी 3x3 मैट्रिक्स प्राप्त करने के लिए जो पूरी प्रक्रिया करता है। जो, जैसे @ फ्लेक्सो कहते हैं, (1,1,1) वेक्टर के आसपास बस एक घूर्णन है। –