2011-01-26 1 views
0

У меня есть две текстуры (1024x1024, полностью MipMapped, оба PVRTC-4bitsPerPixel сжаты). Текстуры применяются к 3D-сетке.OpenGL ES 1.x смешивает две текстуры в соответствии с растровым изображением в mainmemory

На процессоре я обновляю булевой массив 512x512.

Теперь я хочу, чтобы смешать текстуру 2 над текстурой 1 по отношению к этому булева массива (истина означает, что соответствующие 4 пикселя texture1 видимы, ложь означает, что другая текстура видна на этом месте)

Мое оборудование имеет доступны две текстурные единицы.

Как я могу это сделать?

ответ

0

Для этого можно использовать определенный шейдер. Если у вас есть TEX1, Tex2 и texbool:

# set your textures 
glActiveTexture(GL_TEXTURE0) 
glBindTexture(GL_TEXTURE_2D, tex1) 
glActiveTexture(GL_TEXTURE0+1) 
glBindTexture(GL_TEXTURE_2D, tex2) 
glActiveTexture(GL_TEXTURE0+2) 
glBindTexture(GL_TEXTURE_2D, texbool) 

# when you're starting your shader (id is 1 for eg) 
glUseProgram(1) 
glUniformi(glGetUniformLocation(1, "tex1"), 0) 
glUniformi(glGetUniformLocation(1, "tex2"), 1) 
glUniformi(glGetUniformLocation(1, "texbool"), 2) 

# and now, draw your model as you wish 

фрагмент шейдер может быть что-то вроде:

// i assume that you'll pass tex coords too. Since the tex1 and tex2 
// look the same size, i'll assume that for now. 
varying vec2 tex1_coords; 

// get the binded texture 
uniform sample2D tex1; 
uniform sample2D tex2; 
uniform sample2D texbool; 

// draw ! 
void main(void) { 
    vec4 c1 = texture2D(tex1, tex1_coords); 
    vec4 c2 = texture2D(tex2, tex1_coords); 
    vec4 cbool = texture2D(texbool, tex1_coords/2.); 
    // this will mix c1 to c2, according to cbool. 
    // if cbool is 0, c1 will be used, otherwise, it will be c2 
    glFragColor = mix(c1, c2, cbool); 
} 

Я не проверял на ваш пример, но это, как я начну к найденным решение :)

+0

gles 1.x не поддерживает шейдеры .... –

 Смежные вопросы

  • Нет связанных вопросов^_^