में सुधार कैसे कर सकता हूं, मैं वेब एपी का उपयोग कर रहा हूं ताकि मैं जिस ऐप पर काम कर रहा हूं, उसके भीतर छवियों का आकार बदल सकूं। मैंने एक जीएलएसएल शेडर लिखा है जो छवियों पर सरल बिलीनेर फ़िल्टरिंग करता है जिसे मैं डाउनसाइज कर रहा हूं।मैं इस वेबजीएल/जीएलएसएल छवि को डाउनस्प्लिंग शेडर
यह अधिकांश भाग के लिए ठीक काम करता है लेकिन कई अवसर हैं जहां आकार बड़ा है उदा। एक थंबनेल उत्पन्न करने के लिए 2048x2048 छवि से 110x110 तक। इन मामलों में गुणवत्ता खराब और बहुत धुंधली है।
मेरे वर्तमान GLSL शेडर इस प्रकार है:
uniform float textureSizeWidth;\
uniform float textureSizeHeight;\
uniform float texelSizeX;\
uniform float texelSizeY;\
varying mediump vec2 texCoord;\
uniform sampler2D texture;\
\
vec4 tex2DBiLinear(sampler2D textureSampler_i, vec2 texCoord_i)\
{\
vec4 p0q0 = texture2D(textureSampler_i, texCoord_i);\
vec4 p1q0 = texture2D(textureSampler_i, texCoord_i + vec2(texelSizeX, 0));\
\
vec4 p0q1 = texture2D(textureSampler_i, texCoord_i + vec2(0, texelSizeY));\
vec4 p1q1 = texture2D(textureSampler_i, texCoord_i + vec2(texelSizeX , texelSizeY));\
\
float a = fract(texCoord_i.x * textureSizeWidth);\
\
vec4 pInterp_q0 = mix(p0q0, p1q0, a);\
vec4 pInterp_q1 = mix(p0q1, p1q1, a);\
\
float b = fract(texCoord_i.y * textureSizeHeight);\
return mix(pInterp_q0, pInterp_q1, b);\
}\
void main() { \
\
gl_FragColor = tex2DBiLinear(texture,texCoord);\
}');
TexelsizeX और TexelsizeY बस कर रहे हैं (1.0/बनावट चौड़ाई) और क्रमशः ऊंचाई ...
मैं एक उच्च गुणवत्ता को छानने तकनीक लागू करने के लिए चाहते हैं , आदर्श रूप से एक [लैंकोज़] [1] फ़िल्टर जो बहुत बेहतर परिणाम उत्पन्न करना चाहिए, लेकिन मुझे लगता है कि जीएलएसएल के साथ एल्गोरिदम को कार्यान्वित करने के तरीके के बारे में मेरा सिर नहीं मिल रहा है क्योंकि मैं सामान्य रूप से वेबजीएल और जीएलएसएल के लिए बहुत नया हूं।
क्या कोई मुझे सही दिशा में इंगित कर सकता है?
अग्रिम धन्यवाद।
एक खूबसूरती से निर्मित उत्तर। धन्यवाद। मुझे आपके द्वारा पोस्ट किए गए कोड से वहां पहुंचने में सक्षम होना चाहिए। चीयर्स! – gordyr
बस आपको बताने के लिए मुझे पता है कि यह पूरी तरह से काम कर रहा है और परिणाम सुंदर हैं। आश्चर्यजनक रूप से मुझे टेक्सलोफसेट्स को (1.0/(गंतव्यविड्थ * 3)) और (1.0/(गंतव्यहाइट * 3)) को सर्वोत्तम परिणामों के लिए सेट करना पड़ा। मुझे यकीन नहीं है कि मैं समझता हूं कि क्यों मानक चौड़ाई/ऊंचाई का उपयोग करके एक बहुत ही धुंधली छवि उत्पन्न हुई। भले ही यह शानदार है। बहुत धन्यवाद! – gordyr
@gordyr - सुनने के लिए अच्छा है। आपका मतलब है कि आपको texelWidthOffset = 3.0/(छवि चौड़ाई पिक्सेल में) या texelWidthOffset = 1.0/(3.0 * (छवि चौड़ाई पिक्सल में) का उपयोग करने की आवश्यकता है)?मैंने उपरोक्त छवियों को texelWidthOffset = 1.0/(छवि चौड़ाई पिक्सल में) और texelHeightOffset = 1.0/(छवि ऊंचाई पिक्सल में) के साथ उत्पन्न किया है, लेकिन यदि आपके लिए तीन कार्यों का एक कारक है, तो इसके साथ जाएं। –