2011-12-16 1 views
0

Я запускаю OpenGL с рукой Apple GLKit. У меня возникают проблемы с отображением правильных спрайтов. Проблема в том, что все они окружены тонкими темными линиями. На приведенном ниже экране показаны два прямоугольника с текстурами png-изображения, содержащими прозрачность (очевидно).Почему у моих спрайтов есть темная тень/линия/рамка вокруг текстуры?

enter image description here

Черные тени, окружающие их, безусловно, не является частью PNGs. Зеленый png выполняется без сглаживания, а синий - с сглаженной границей. Черная рамка также очевидна, если я рисую только один спрайт.

Te соответствующая часть (надеюсь ...) из кода:

//render the scene 
-(void)render 
{ 
    glClearColor(69./255., 115./255., 213./255., 1.); 
    glClear(GL_COLOR_BUFFER_BIT); 
    [shapes enumerateObjectsUsingBlock:^(AAAShape *shape, NSUInteger idx, BOOL *stop) 
    { 
     [shape renderInScene:self]; 
    }]; 
} 

//creating and storing the effect inside shape class 
-(GLKBaseEffect *)effect 
{ 
    if(!effect) 
    { 
     effect = [[GLKBaseEffect alloc] init]; 
    } 
    return effect; 
} 

//rendering the shape (including effect configuration) 
-(void)renderInScene:(AAAScene *)scene 
{ 
    //TODO: Storing vertices in Buffer 
    self.effect.transform.projectionMatrix = scene.projectionMatrix; 
    self.effect.transform.modelviewMatrix = self.objectMatrix; 
    if(texture) 
    { 
     self.effect.texture2d0.enabled = GL_TRUE; 
     self.effect.texture2d0.envMode = GLKTextureEnvModeReplace; 
     self.effect.texture2d0.target = GLKTextureTarget2D; 
     self.effect.texture2d0.name = texture.name; 
    } 
    [self.effect prepareToDraw]; 

    if(texture) 
    { 
     glEnableVertexAttribArray(GLKVertexAttribTexCoord0); 
     glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, 0, self.textureCoordinates); 
     glEnable(GL_BLEND); 
     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
    } 

    glEnableVertexAttribArray(GLKVertexAttribPosition); 
    glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, 0, self.vertices); 
    glDrawArrays(GL_TRIANGLE_FAN, 0, self.vertexCount); 
    glDisableVertexAttribArray(GLKVertexAttribPosition); 

    if(texture) 
    { 
     glDisableVertexAttribArray(GLKVertexAttribTexCoord0); 
     glDisable(GL_BLEND); 
    } 
} 

Любые идеи кто-нибудь? Спасибо.

ответ

-3

Пошлите stackoverflowers, 14 часов и никаких ответов ;-). На гамедеве у Дэвида потребовалось 14 минут, чтобы дать this great answer. Прогони его!

1

Это работает для меня:

glEnable(GLES20.GL_BLEND); 
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 
+0

это то, что ответили на игростроения (см ниже) –

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

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