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,5 VAO Przegląd
XCode 4.4.1 (iOS 5,1 SDK)
XCode 4,5 (IOS 6 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?
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? –
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
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