0

私のアプリは OpenGL ES 2.0 を扱っています。そして、カラーピッキングを使用して、タップ中にどのオブジェクトがタッチされたかを識別します。

オブジェクトを初めてタップするたびに、反応が非常に遅くなりますが、2回目は反応が非常に速くなります。たとえば、特定の画面での 1 回目のタップには 0.45 秒かかり、2 回目のタップには約 0.01 秒かかります。

デバッグ中に、問題のあるコードは次のコードであることがわかりました。

    [effectTmp prepareToDraw];
    glEnableVertexAttribArray(GLKVertexAttribPosition);
    glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(MaterialVertexData3D), &vertexDataMaterial[0].vertex);
    glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, sizeof(MaterialVertexData3D), &vertexDataMaterial[0].normal);
    glDrawArrays(GL_TRIANGLES, 0, [drawObjectTmp getSizeFromVertexIndicesArray]);
    glDisableVertexAttribArray(GLKVertexAttribPosition);

オブジェクトのオフスクリーンプリロードが役立つことを読みました。ログから、これらのオブジェクトのプリロードに上記の最初の時間、つまり 0.45 秒ほどかかることがわかります。ただし、最初にタップすると、0.45秒もかかります。事前警告の後、2 回目 (0.01 秒) ほどかかることが予想されます。

私を困惑させるもう 1 つのこと: 最初のスロー コールはカラー ピッキング コールです。つまり、各オブジェクトが特定の色で画面外に表示され、識別に役立ちます。また、これらのオブジェクトが (テクスチャと共に) 画面に既に表示されていることも意味するため、頂点が事前に読み込まれると想定していました。このような問題は、色の選択時ではなく、画面に表示されるオブジェクトの読み込み時に顕著になります...

そのような行動に遭遇した人はいますか?どのように問題に対処しましたか?

乾杯 - ステファン

4

1 に答える 1

0

the issue wasn't coming from the color picking algorithm even though the timer function indicated so.

While implementing a fade-out / fade-in screen feature, i have realized the color picking method was fast as the screen was fading out fast; however the fade-in of the next screen was slow. It comes from the fact that textures , even though loaded (here with Glktextureloader), will actually take some time at the first render.

A workaround is to display these textured objects off-screen at the initialization phase of the app.

于 2013-06-15T21:30:16.027 に答える