2010-02-02 3 views
2

У меня есть текстура с прозрачностью (белый треугольник с этой информацией о освещении), и только не может сделать ее альфа-переменную.OpenGL-ES переменная текстура alpha (2D)?

alt text http://gotoandplay.freeblog.hu/files/alpha_help.png

Розыгрыш код, с отсутствующей части:

//Place polygon vertices to the bottom left within the view. 
    glLoadIdentity(); 
    glTranslatef(centerX, centerY, 0); 

    //Draw "diffuse" layer. 
    glBindTexture(GL_TEXTURE_2D, spriteTexture[0]); //Bind. 
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

    //Offset during development only. 
    glLoadIdentity(); 
    glTranslatef(centerX-10, centerY+10, 0); 

    //Draw "specular" layer. 
    glActiveTexture(GL_TEXTURE0); 
    glBindTexture(GL_TEXTURE_2D, spriteTexture[1]); //Bind. 

    //Some smart alpha scaling code needs here... 

    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

Может кто-то пожалуйста, помогите мне с соответствующими строками кода? Некоторые файлы glBlendFunc или, возможно, glTextEnvi, я полагаю.

+0

Можете ли вы написать математику того, как вы хотите, чтобы значения двух текстур смешивались вместе? (фон + треугольник1 + треугольник2). Или вы хотите применить обе текстуры к одному и тому же треугольнику? – Frogblast

+0

Треугольники передаются в отдельный фреймбуфер, соединенный с текстурой. Таким образом, в этом отдельном фреймбуфере фон (0,0,0,0), trianlge 1 просто альфа-смесь, как и второй треугольник (никаких добавлений, модуляции и т. Д.). Вы можете видеть эти изображения (так что сгенерированные текстуры) в моем предыдущем вопросе здесь: http://stackoverflow.com/questions/2173363/please-help-with-an-opengl-es-iphone-multi-texturing-2d-code – Geri

ответ

0

Хорошо, я понял, даже если не понимаю, что я сделал точно.

//Place polygon vertices to the bottom left within the view. 
    glLoadIdentity(); 
    glTranslatef(centerX, centerY, 0); 

//--1 

     //Draw "diffuse" layer. 
     glActiveTexture(GL_TEXTURE0); 
     glBindTexture(GL_TEXTURE_2D, spriteTexture[0]); //Bind. 

      //Blending. 
      glBlendFunc(GL_ONE, GL_ONE); 

     glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

//--2 

     //Draw "specular" layer. 
     glBindTexture(GL_TEXTURE_2D, spriteTexture[1]); //Bind. 

      //Blending. 
      glColor4f(opacity, opacity, opacity, opacity); 
      glBlendFunc(GL_SRC_COLOR, GL_ONE_MINUS_SRC_ALPHA); 

     glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

Я попробовал другой путь, прежде чем ...

glColor4f(1.0f, 1.0f, 1.0f, opacity); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

... но вторая карта была как-то "слабее".