3Dオブジェクトでテクスチャを使用すると、Xcode 4.5とiOS 6 SDK以降に奇妙な動作が発生しました。 OS X 10.8 SDKに対応してビルドすると、Macアプリケーションに問題が発生します。GLOSTextureはiOS6以降正しくマップされていません
iOSではOpenGL ES 2.0、OS X 10.8ではOpenGLレガシープロファイル(< 3.0)を使用しています。
テクスチャは正しい座標に置かれず、多くのアーティファクトがあります。 VAOは正しくアップロードされており、テクスチャなしで良好に見えます。 XCode 4.4.1とiOS 5.1 SDKを使用する場合は、すべて問題ありません。
VAOは全く同じです(OpenGL ESフレームキャプチャでチェックされています)。また、テクスチャユニフォームも正しくバインドされています。
のXcode 4.4 VAO概要
のXcode 4.5 VAO概要
XCodeの4.4.1(iOSの5.1 SDK)
XCodeの4.5(IOSの6 SDK)
コード/シェーダスニペットuploadiため
要部テクスチャを処理します。私はミニマムにシェイダーを取り除かなければならなかった。
頂点シェーダ
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ため採掘に近い問題がありましたか?
https://bugreport.apple.com/でバグレポートを提出しましたか? OpenGL ESのエンジニアはこれを見てみたいかもしれません。これはあなたのアプリケーションにも表示されます。あなたもMac側でGLKTextureを使用していますか? –
こんにちはブラッド、はい私はOS X 10.8でもGLKitを使用します。私は親切なことに誰もその問題を報告していないと思っています。 10.8のベータ段階では、すでにAppleのベータフォーラムで尋ねられましたが、手掛かりがあることを知っています。私もバグレポートを記入します。 – DasFuxx
テストテクスチャでスクリーンショットを追加できますか? (例:番号付き/色付きのチェッカーボード) オフセットのパターンを確認すると役立つ場合があります。 – Andreas