0

プロジェクト ツリー内のファイル (Shader.vsh および Shader.fsh) の名前を (Shader2.vsh および Shader2.fsh) に変更しようとしましたが、うまくいかないことを期待していましたが、うまくいきました。

ViewController.m 内のファイル名を次のように変更しました。

vertShaderPathname = [[NSBundle mainBundle] pathForResource:@"Shader" ofType:@"vsh"];

することが:

vertShaderPathname = [[NSBundle mainBundle] pathForResource:@"Shader2" ofType:@"vsh"];

そして、それは機能しません。ファイルの名前を変更した場合でも、常に Shader.vsh という名前で機能します。

さらに、ファイルを完全に削除しようとしましたが、それでも機能します。2 つの立方体が表示されます。どうして!!!

4

3 に答える 3

1

これは、Xcode の問題であることがよくあります。プロジェクトで削除または名前変更したファイルは、実行ボタンを押すだけでは、ビルドされたアプリ バンドルから削除されません。これにより、ビルドが少し速くなりますが、あなたのような奇妙な問題につながる可能性があります.

解決策、または実際には単なる回避策は、リソースを削除または名前変更した後にプロジェクトをクリーンアップすることです。毎回必要というわけではありませんが、リソースに問題が発生した場合は、常に試してみる価値があります。

于 2012-08-19T17:51:11.103 に答える
0

デフォルトのテンプレートでは、shders と GLKit でレンダリングされるためです。

GLKit コードを削除する必要があります。

例えば

    - (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
    {
        glClearColor(0.65f, 0.65f, 0.65f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glBindVertexArrayOES(_vertexArray);

        // Render the object with GLKit
        [self.effect prepareToDraw]; // GLKit used default shaders

        glDrawArrays(GL_TRIANGLES, 0, 36); // render with GLKit

        // Render the object again with ES2
        glUseProgram(_program);  // enable shader


// set parametres
        glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], 1, 0, _modelViewProjectionMatrix.m);
        glUniformMatrix3fv(uniforms[UNIFORM_NORMAL_MATRIX], 1, 0, _normalMatrix.m);

        glDrawArrays(GL_TRIANGLES, 0, 36); // render with Sahder, because glUseProgram(_program);
    }

setupGL には [self loadShaders] があります。

于 2012-08-19T17:32:13.717 に答える
0

デフォルトのシェーダーを作成する GLKit を使用している可能性があります。

于 2012-08-19T15:53:09.727 に答える