2013-06-09 3 views
1

Я пытаюсь сделать что-то вроде этого, используя OpenGL ES и GLKitGLKit и прозрачность

enter image description here

Но я получаю это

enter image description here

Хотя текстура си прозрачный, верхние слои модели вместо текстуры заменяют текстуру. Можно ли это как-то исправить?

- (void)setup { 

    self.effect = [[GLKBaseEffect alloc] init]; 

    NSURL *textureURL = [[NSBundle mainBundle] URLForResource:@"portalTexture_ALIENS" withExtension:@"png"]; 
    texture = [GLKTextureLoader textureWithContentsOfURL:textureURL options:nil error:nil]; 

    if (texture != nil) { 
     self.effect.texture2d0.enabled = GL_TRUE; 
     self.effect.texture2d0.envMode = GLKTextureEnvModeReplace; 
     self.effect.texture2d0.target = GLKTextureTarget2D; 
     self.effect.texture2d0.name = texture.name; 
    } 

    glEnableVertexAttribArray(GLKVertexAttribPosition); 
    glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 0, texturedPortalVerts); 
    glEnableVertexAttribArray(GLKVertexAttribTexCoord0); 
    glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, 0, texturedPortalTexCoords); 

    glEnable(GL_BLEND); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

} 

- (void)draw { 
    [self.effect prepareToDraw]; 
    glDrawArrays(GL_TRIANGLES, 0, texturedPortalNumVerts); 
} 

спасибо.

ответ

2

Прозрачность в OpenGL зависит от порядка. Существуют алгоритмы для независимой прозрачности порядка, но они довольно сложны и имеют серьезные компромиссы. Однако в вашем случае вы можете использовать альфа-тестирование для решения большинства проблем. Альфа-тестирование игнорирует пиксели с альфами ниже определенного порога (пустое пространство в вашем примере). Google это для точного использования glAlphaFunc.

Если вы используете OpenGL ES 2.0, встроенное альфа-тестирование недоступно, и вы должны реализовать его в шейдере. Это выглядело бы примерно так:

if (texture.alpha < 0.5) 
{ 
    discard; 
} 

Обратите внимание, что альфа-тестирование может иметь серьезные последствия для скорости заполнения.

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