0

アプリケーションにいくつかの単純なオブジェクトピッキングを実装しようとしていますが、最初から問題が発生しています。テストのために、私はこのチュートリアルで与えられているものを使用しようとしています:OpenGLプログラミング/オブジェクトの選択

私のコードでは、次のことを行います。

GLbyte color[4];
GLfloat depth;
GLuint index;
glReadPixels(click->x, WINDOW_HEIGHT - click->y - 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, color);
glReadPixels(click->x, WINDOW_HEIGHT - click->y - 1, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth);
glReadPixels(click->x, WINDOW_HEIGHT - click->y - 1, 1, 1, GL_STENCIL_INDEX, GL_UNSIGNED_INT, &index);

printf("Clicked on pixel %d, %d, color %02hhx%02hhx%02hhx%02hhx, depth %f, stencil index %u\n", click->x, click->y, color[0], color[1], color[2], color[3], depth, index);

これにより、次の出力が得られます。 プログラムからの出力

RGBAまたはステンシルインデックスの値はありません。配置したオブジェクトは1つしかないglStencilFunc(GL_ALWAYS, 99, -1);ため、ほとんどの場所でステンシルインデックスが表示されることは期待できません。色については、しかし私は余分なものが必要になるとは思いませんでしたか?

ここでデバッグするために、私のOGL初期化コードのいくつかのコア部分があります:

glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_MULTISAMPLE);

glEnable(GL_STENCIL_TEST);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);

およびSDL初期化コード:

   SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
   SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
   SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
   SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
   SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
   SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
   SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
   SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 4);
   SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8); 
   window = SDL_CreateWindow(windowTitle.c_str(), SDL_WINDOWPOS_CENTERED, 
    SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);

glReadPixelsこの情報から、たとえばRGBA値を報告しない理由を抽出することは可能ですか?

4

2 に答える 2

0
glReadPixels(click->x, WINDOW_HEIGHT - click->y - 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, color);

あなたは逃した&

glReadPixels(click->x, WINDOW_HEIGHT - click->y - 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &color);
于 2012-11-24T18:22:55.593 に答える
0

この問題の解決策を見つけました...

を実行する前にバッファを交換していましたglReadPixels

于 2012-11-24T19:07:48.603 に答える