0

ピクセルの色を取得したい。ピクセルはマウスの位置です。使用しますglReadPixelsができません

    POINT pt;
    GetCursorPos(&pt);
    unsigned char pixel[3];
    glReadPixels(pt.x, pt.y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pixel);

このコードの後、ピクセルの値は次'Ì' のようになります。

4

2 に答える 2

4

204CC16進表現です。この値は、初期化されていないメモリを埋めるためによく使用されます。ゼロで初期化pixelする場合(たとえば)

 unsigned char pixel[3] = {0};

99、(9)%を呼び出すと、ゼロが表示されますglReadPixelsドキュメントによって異なります glReadPixels

エラーが発生した場合、データの内容は変更されません。

つまりpixel、エラーのためにデータが変更されていません。@OlegTitovの4番目のアドバイスに従ってください(何glGetError();がわかるかを探してください)

Upd:を使用してメイン画面からピクセル値を取得したい場合glReadPixels、およびGLFrameBufferを作成しなかった場合は、わかりませんが、失敗すると思います。繰り返します-よくわかりませんが、glReadPixels以前はgl-functionsによって作成されたフレームバッファからのみピクセル値を読み取ることができると思います

于 2013-01-29T09:58:48.887 に答える
2
  1. コンソールに出力する場合char、コンパイラは文字ではなく記号として出力します。これは、Cスタイルの文字列を通常の方法で印刷できる場合に実行されます。整数値を出力するには、最初に変数を整数型にキャストします。

  2. 画面から読み取る場合:openGLの座標原点は左下隅ですが、ウィンドウシステムは左上隅を使用するため、ある座標系から別の座標系に変換する必要があることに注意してください。

    glReadPixels(pt.x、window_height-pt.y、1、1、GL_RGB、GL_UNSIGNED_BYTE、pixel);

  3. さらに問題が発生した場合は、正しいピクセルバッファが読み取りベファーとしてバインドされていることを確認してください。ウィンドウ出力の場合:

    glBindFramebuffer(GL_READ_FRAMEBUFFER、0);

  4. それでも問題が解決しない場合は、コードのチェックを開始してくださいglGetError();

于 2013-01-29T08:59:00.433 に答える