سؤال

uniform sampler2D sampler0;
uniform vec2 tc_offset[9];
void blur()
{
  vec4 sample[9];
  for(int i = 0; i < 9; ++i)
    sample[i] = texture2D(sampler0, gl_TexCoord[0].st + tc_offset[i]);

  gl_FragColor = (sample[0] + (2.0 * sample[1]) + sample[2] +
      (2.0 * sample[3]) + sample[4] + 2.0 * sample[5] +
      sample[6] + 2.0 * sample[7] + sample[8] ) / 13.0;
}

كيف يعمل العينة [i] = texture2d (sample0، ...).

يبدو أنه يبدو أن طمس صورة، لا بد لي من إنشاء الصورة لأول مرة، حتى الآن، أنا أحاول بطريقة أو بأخرى لاستعلام Iamge جدا أنا توليد. كيف يعمل هذا؟

هل كانت مفيدة؟

المحلول

كما تريد، من أجل جعل صورة غير واضحة، تحتاج أولا إلى إنشاء صورة، ثم طمسها. هذا Shader يفعل (فقط) الخطوة الثانية، مع أخذ صورة تم إنشاؤها مسبقا وضوحها. يجب أن يكون هناك رمز إضافي في مكان آخر لإنشاء الصورة الأصلية غير غير واضحة.

نصائح أخرى

إنه يطبق نواة طمس للصورة. tc_offset يحتاج إلى تهيئة التطبيق بشكل صحيح من خلال تشكيل منطقة 3x3 من نقاط أخذ العينات حول تنسيق الملمس الفعلي:

0   0   0
0   x   0
0   0   0

(افتراض X هو الإحداثيات الأصلية). سيكون إزاحة نقطة أخذ العينات العلوي الأيسر -1/width,-1/height. وبعد يحتاج إزاحة النقطة المركزية إلى محاذاة بعناية إلى مركز تكسيل (مشكلة خارج 0.5). أيضا، يمكن استخدام مرشح الأجهزة Silinear لزيادة كمية Blur بشكل رائع (بواسطة أخذ العينات بين Texels).

بقية تظليل المقاييس العينات عن بعد. عادة، هذا هو مسبق كذلك:

for(int i = 0; i < NUM_SAMPLES; ++i) {
    result += texture2D(sampler,texcoord+offsetscaling[i].xy)*offsetscaling[i].z;
}

تتمثل إحدى الطرق في إنشاء صورتك الأصلية لتقديم نسيج، وليس إلى الشاشة. ثم ترسم رباعية ملء الشاشة باستخدام هذا التظليل والملمس كما هو الإدخال لنشر الصورة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top