gpt4 book ai didi

ios - 自 iOS6 以来,GLKTexture 未正确映射

转载 作者:IT王子 更新时间:2023-10-29 08:09:42 24 4
gpt4 key购买 nike

在我的 3D 对象上使用纹理时,自 Xcode 4.5 和 iOS 6 SDK 以来我遇到了一个奇怪的行为。当针对 OS X 10.8 SDK 构建时,该问题也出现在我的 mac 应用程序上。

我在 iOS 上使用 OpenGL ES 2.0,在 OS X 10.8 上使用 OpenGL 旧版配置文件 (< 3.0)。

纹理不再放置在正确的坐标上,我有很多人工制品。 VAO 已正确上传,并且在没有纹理的情况下看起来不错。使用 XCode 4.4.1 和 iOS 5.1 SDK 时一切正常。

VAO 完全相同(使用 OpenGL ES 帧捕获检查)并且纹理制服绑定(bind)正确。


Xcode 4.4 VAO 概述

Xcode 4.4

Xcode 4.5 VAO 概述

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


代码/着色器片段

上传和处理纹理的相关部分。我不得不将着色器剥离到最小值。

顶点着色器

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;
....
}

片段着色器

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;
....
}

纹理加载

    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];

渲染循环(只发送事件纹理的制服)

....
[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];
}

自 iOS 6 以来有人遇到过我的问题吗?

最佳答案

如前所述,您应该将错误报告给 bugreport.apple.com。顺便说一句,如果您建议 GLKTextureLoader 可能是问题所在(似乎是一个很好的理论),那么您可能会通过我脑海中的两种方式之一缩小范围......

1) 我会将显示的纹理渲染到一个普通的四边形,然后查看渲染结果是否符合您的预期,即渲染是否与您的预期垂直翻转?源纹理是否以您未预料到的方式出现部分乱码?

2) 您可以尝试将图像转换为不同的尺寸/颜色深度/图像类型,看看问题是否仍然存在。我在想的是,这似乎不太可能,但也许它没有被报告,因为由于图像格式的原因,你遇到了不寻常的边缘情况。知道这一点对任何试图在 Apple 解决这个问题的人都有很大帮助。

可能帮助不大,但无法访问所有资源和 Assets ,很难知道建议什么。 FWIW,我有一些示例与您正在做的事情类似,但在 GLKit v.10.8 下没有注意到任何事情。

关于ios - 自 iOS6 以来,GLKTexture 未正确映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12916092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com