Tôi gặp phải một hành vi lạ từ Xcode 4.5 và SDK iOS 6 khi sử dụng họa tiết trên đối tượng 3D của tôi. Sự cố cũng xuất hiện trên ứng dụng mac của tôi khi xây dựng dựa trên OS X 10.8 SDK.GLKTexture không được ánh xạ chính xác từ iOS6
Tôi đang sử dụng OpenGL ES 2.0 trên iOS và cấu hình cũ OpenGL (< 3.0) trên OS X 10.8.
Kết cấu không được đặt ở đó có tọa độ chính xác nữa và tôi có rất nhiều hiện vật. Các VAOs được tải lên một cách chính xác và chúng trông đẹp mà không cần texturing. Khi sử dụng XCode 4.4.1 và iOS 5.1 SDK mọi thứ đều ổn.
VAO là chính xác như nhau (được kiểm tra bằng chụp khung OpenGL ES) và đồng phục kết cấu được gắn chính xác.
Xcode 4.4 VAO Tổng quan
Xcode 4.5 VAO Tổng quan
XCode 4.4.1 (iOS 5.1 SDK)
XCode 4.5 (iOS 6 SDK)
Mã/Shader Snippet
phần có liên quan cho uploadi ng và xử lý kết cấu. Tôi đã phải loại bỏ các shaders để 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 tải
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 vòng lặp (Chỉ gửi đồng phục của kết cấu hoạt động)
....
[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];
}
Đã ai một vấn đề gần gũi với tôi kể từ iOS 6?
Bạn đã gửi báo cáo lỗi tại https://bugreport.apple.com/ chưa? Các kỹ sư của OpenGL ES có thể muốn xem xét điều này. Bạn nói rằng điều này cũng xuất hiện trong ứng dụng 10.8 của bạn. Bạn đang sử dụng GLKTexture ở phía máy Mac? –
Xin chào Brad, vâng tôi cũng sử dụng GLKit theo OS X 10.8. Tôi là một người tự hỏi rằng không ai khác đã báo cáo vấn đề đó. Trong giai đoạn beta của 10,8 tôi đã được hỏi trong các diễn đàn beta của Apple nhưng biết một trong những đã có một đầu mối. Tôi cũng sẽ điền vào một báo cáo lỗi. – DasFuxx
Bạn có thể thêm ảnh chụp màn hình với kết cấu thử nghiệm không? (ví dụ: bàn cờ đánh số/màu) Có thể hữu ích khi xem các mẫu trong phần bù. – Andreas