Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Смешивание двух FBO на iPhone дает странный результат?

Автор вопроса: peterhansenОтветов: 2

Я программирую небольшое приложение для рисования на iphone и столкнулся с проблемой. Когда я объединяю два fbos, цвет становится белым вместо слияния. Посмотрите на картинку:

http://dl.dropbox.com/u/2025544/help.png

Здесь левая часть отображается как обычная программа для Mac, а правая часть отображается на платформе iPhone с почти таким же кодом, за исключением использования версии fbo для eos.

Нанесение нескольких FBO друг на друга создает альфа-смешение, которое я хочу:

  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  myTex.draw(0, 0);


     for(int client = 0; client < 5;client++)
     {
        ofSetColor(
                 datas[client]->myColor.r,
                 datas[client]->myColor.g,
                 datas[client]->myColor.b,
                 datas[client]->myColor.a
                 );


        datas[client]->myTex.draw(0,0);

     }

Слияние двух fbos дает med неправильную альфу:

   myTex.begin();
        glEnable(GL_BLEND);
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);


        ofSetColor(
                 datas[tmpMessage->clientId]->myColor.r,
                 datas[tmpMessage->clientId]->myColor.g,
                 datas[tmpMessage->clientId]->myColor.b,
                 datas[tmpMessage->clientId]->myColor.a
                 );
        datas[tmpMessage->clientId]->myTex.draw(0, 0);

        myTex.end();
        datas[tmpMessage->clientId]->myTex.clear(0, 0, 0, 0);

        datas[tmpMessage->clientId]->touchDown = true;

Помогите, я схожу с ума :-)

  • Я решил проблему, не используя: glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); Я понятия не имею, почему это решило эту проблему... и кажется, что другие звонки тоже облажались... peterhansen 13.01.2010

iphoneopengl

Ответы

Ответ 1 · рейтинг 1 · Andy J Buchanan

Вы проверили, какое значение имеет glBlendEquation()?

Ответ 2 · peterhansen

Я решил проблему, не используя: glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); Я понятия не имею, почему это решило это... и кажется, что другие вызовы тоже портят ситуацию...

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы