1

現在、アプリケーションでカラーピッキングを使用しています。これは PC で動作しますが、さまざまなデバイスで動作させるのに問題があります。

これはおそらく、デバイスによってコンテキストの設定が異なるためです。たとえば、私の知る限り、PC の色は 888 に設定されていますが、デバイスのデフォルトは 565 です。

色データを適切に取得できるように、OpenGL で現在のピクセル/色形式を取得する方法があるかどうか疑問に思っていましたか?

これは、私が使用している機能で、PC 上で正常に動作します。

inline void ProcessColourPick(GLubyte *out, KDfloat32 x, KDfloat32 y)
{
    GLint viewport[4];
    GLubyte pixel[3];

    glGetIntegerv(GL_VIEWPORT,viewport);

    //Read colour of pixel at a specific point in the framebuffer

    glReadPixels(x,viewport[3]-y,1,1,
        GL_RGB,GL_UNSIGNED_BYTE,(void *)pixel);

    out[0] = pixel[0];
    out[1] = pixel[1];
    out[2] = pixel[2];
}

何か案は?

4

2 に答える 2

1

はい、でも少し複雑です。

現在のフレームバッファのビット深度のクエリは、ES 2.0 ではかなり簡単です (注: これは Desktop GL でも有効ですが、この機能は GL 3.1 コアで削除されました。互換性プロファイルから引き続きアクセスできます)。各カラー コンポーネントのビット深度を取得する必要があります。

GLint のビット深度。glGetIntegerv(GL_x_DEPTH, &bitdepth);

xは、、、または のいずれかですREDGREENBLUEALPHA

ビット深度を取得したら、それが 565 かどうかをテストして、適切なピクセル転送パラメーターとカラー値を使用できます。

于 2012-05-04T02:27:30.033 に答える
0

formatパラメータはglReadPixels、GL_RGBA(常にサポートされている)またはGL_IMPLEMENTATION_COLOR_READ_FORMAT_OES(デバイスごとに異なる)のいずれかである必要があります。これはOpenGLESの制限です。

于 2012-05-04T03:11:16.857 に答える