2012-10-16 9 views
19

Mam dziwne zachowanie od Xcode 4.5 i SDK iOS 6 podczas korzystania z tekstur na moich obiektach 3D. Problem pojawia się również na mojej aplikacji Mac podczas budowania z SDK OS X 10.8.GLKTexture nie jest poprawnie mapowany od iOS6

Używam OpenGL ES 2.0 na starym profilu iOS i OpenGL (< 3.0) na OS X 10.8.

Tekstury nie są już umieszczone we właściwych współrzędnych i mam dużo artefaktów. VAO są poprawnie ładowane i wyglądają dobrze bez teksturowania. Podczas korzystania z XCode 4.4.1 i iOS 5.1 SDK wszystko jest w porządku.

VAO jest dokładnie taki sam (zaznaczone przy przechwytywaniu klatek OpenGL ES), a także mundury tekstur są powiązane.


Xcode 4,4 VAO Przegląd

Xcode 4.4

Xcode 4,5 VAO Przegląd

Xcode 4.5

XCode 4.4.1 (iOS 5,1 SDK)

iOS Simulator 5.1 SDK

XCode 4,5 (IOS 6 SDK)

iOS Simulator 6.0 SDK


/Kod cieniowania Fragment

Odpowiednie części na uploadi ng i przetwarzanie tekstury. Musiałem rozebrać shadery na minium.

Vertex shader

precision highp float; 
attribute vec2 a_vTextureCoordinate; 
uniform mat4 u_mModelViewMatrix; 
uniform mat4 u_mModelViewMatrixInverse; 
uniform mat4 u_mProjectionMatrix; 
uniform mat4 u_mNormalMatrix; 
void main() 
{ 
.... 

    // Transform output position 
    gl_Position = u_mProjectionMatrix * u_mModelViewMatrix * a_vPosition; 
    // Pass through texture coordinate v_texcoord = a_vTextureCoordinate.xy; 
    v_vPosition = vec3(u_mModelViewMatrix * a_vPosition); 
    v_vTextureCoordinate = a_vTextureCoordinate.xy; 
    .... 
} 

Fragment Shader

precision highp float; 
// location 1 
uniform sampler2D u_diffuseTexture; 
varying vec2 v_vTextureCoordinate; 
varying vec3 v_vPosition; 
.... 
void main() { 
    .... 
    vec4 base = texture2D(u_diffuseTexture, v_vTextureCoordinate); 
    gl_FragColor = base; 
    .... 
} 

Texture loading

NSDictionary *options = @{GLKTextureLoaderOriginBottomLeft: @(YES), [NSNumber numberWithBool:YES] : GLKTextureLoaderGenerateMipmaps}; 
    NSError *error; 
    path = [path stringByReplacingOccurrencesOfString:@"/" withString:@""]; 
    path = [[NSBundle mainBundle] pathForResource:[path stringByDeletingPathExtension] ofType:[path pathExtension]]; 
    GLKTextureInfo *texture = [GLKTextureLoader textureWithContentsOfFile:path options:options error:&error]; 

Render pętli (tylko wysyłanie mundur aktywnej tekstury)

.... 
    [self setShaderTexture:[[materials objectForKey:@"diffuse"] objectForKey:@"glktexture"] 
        forKey:@"u_diffuseTexture" 
      withUniform1i:0 
      andTextureUnit:GL_TEXTURE0+0]; 
.... 

#pragma mark - Texture communication 

-(void)setShaderTexture:(GLKTextureInfo*)texture forKey:(NSString*)key withUniform1i:(int32_t)uniform andTextureUnit:(int32_t)unit { 
    glActiveTexture(unit); 
    glBindTexture(texture.target, texture.name); 
    [self.shaderManager sendUniform1Int:key parameter:uniform]; 
} 

Czy ktoś bliski problem do kopalni od iOS 6?

+1

Czy złożyłeś zgłoszenie błędu na stronie https://bugreport.apple.com/? Inżynierowie OpenGL ES mogą chcieć się temu przyjrzeć. Mówisz, że to pojawia się również w twojej aplikacji 10.8. Czy używasz również GLKTexture po stronie Maca? –

+1

Cześć Brad, tak używam GLKit pod OS X 10.8 też. Cieszę się, że nikt inny nie zgłosił tego problemu. W fazie beta 10,8 już pytałem na forach beta Apple, ale wiem, że ktoś miał jakąś wskazówkę. Wypełnię też raport o błędzie. – DasFuxx

+0

Czy możesz dodać zrzuty ekranu z teksturą testową? (np. Ponumerowana/kolorowa szachownica) Może być pomocne wyświetlanie wzorów w przesunięciach. – Andreas

Odpowiedz

1

Powinieneś zgłosić błąd do bugreport.apple.com, jak już wspomniano.Na marginesie, jeśli sugerujesz, że GLKTextureLoader jest być może problemem (wydaje się dobrą teorią), możesz zawęzić wszystko na jeden z dwóch sposobów poza moim zasięgiem ...

1) Renderowałbym tekstura pokazana do trywialnego quada i zobacz, czy wyniki renderowania są tym, czego oczekujesz. Czy oznacza to, że renderowanie jest w pionie odwrócone od tego, czego oczekujesz? Czy tekst źródłowy jest częściowo zniekształcony w pewien sposób, którego się nie spodziewałeś?

2) Można spróbować przekonwertować obraz na inny rozmiar/głębię kolorów/typ obrazu i sprawdzić, czy problem nadal występuje. To, co myślę, jest i wydaje się mało prawdopodobne, ale może nie jest zgłaszane, ponieważ trafiasz w nietypowy przypadek na krawędzi z powodu czegoś z formatem obrazu. Wiedza o tym byłaby ogromną pomocą dla każdego, kto próbuje to naprawić w Apple.

Prawdopodobnie niewiele pomoc, ale bez dostępu do wszystkich źródeł i zasobów, dość trudno wiedzieć, co zasugerować. FWIW, mam kilka próbek, które robią podobne rzeczy do tego, co robisz i nie zauważyłeś niczego pod GLKit v. 10.8.

Powiązane problemy