سؤال

عندما أجد الملمس، ثم ارسم نفس الصورة، يبدو أنه يجعل كل شيء أغمق. للحصول على هذه الصورة:

http://img24.imageshack.us/img24/8061/87993367.png.

أنا أتقود المربع العلوي الأيسر مع اللون (1, 1, 1, .8) إلى نسيج، ثم تقديم هذا الملمس، بالإضافة إلى المربع الأوسط (نفس اللون) إلى نسيج آخر، ثم أخيرا أن الملمس بالإضافة إلى المربع السفلي الأيمن (اللون) إلى الشاشة.

كما ترون، في كل مرة أعرض فيها الملمس، كل شيء يحصل على أغمق قليلا.

يبدو رمز التجسيد الخاص بي: (أنا أستخدم OpenGL ES على iPhone)

// gen framebuffer
GLuint framebuffer;
glGenFramebuffersOES(1, &framebuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer);

// gen texture
GLuint texture;
glGenTextures(1, &texture);

glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);

// hook it up
glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, texture, 0);
if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES))
   return false;

// set up drawing
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer);
glViewport(0, 0, Screen::Width, Screen::Height);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, Screen::Width, 0, Screen::Height, -1, 1);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glColor4f(1, 1, 1, 1);

// do whatever drawing we'll do here
Draw();

glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0);

هل هناك أي شيء أفعله خطأ هنا؟ هل تحتاج إلى مزيد من التعليمات البرمجية لمعرفة ذلك؟ ما قد يحدث هنا؟

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

المحلول

أنا فقط التخمين:

رسم أول نسيج يمنحك 204 (0.8 * 255) في قنوات RGB و Alpha. عندما ترسم للمرة الثانية (مع تمكين gl_blend، أفترض)، فأنت تحصل على رمادي فاتح 204 RGB مع 80٪ ألفا يمنحك رمادي متوسط.

الحل: استخدام glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) و premultiply الألوان الخاصة بك.

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