1

これは、関連する質問として表示される場合があります。

iOS での OpenGL ES 2.0 オブジェクト ピッキング

これは、カラーピッカーが良い解決策であり、それについて読んだ後に実際に次のように述べています。

http://www.lighthouse3d.com/opengl/picking/index.php?color1

それは非常に単純な解決策のように思えるので、これは私にこの質問をもたらします

iPhone での OpenGL ES カラーピッキング

残念ながらopengl es 1.0を使用していますが、2.0で実行しようとしているため、その質問で説明されている機能にアクセスできません。

しかし、理論は単純に思えます。私がすべきことは次のとおりです。

タッチが始まると、オブジェクトを固有の色でレンダリングします。

タッチが終了すると、その位置からピクセルを取得し、色をチェックしてオブジェクトを取得します。(おそらく glReadPixels で)

問題は、「バックバッファーにレンダリングしてそこから読み取る」方法がわからないことです。

私のコードはこれまで単に「Draw」を使用していましたが、glBindのようなことを他のバッファに行う必要があると思いますが、助けていただければ幸いです。

私の描画コードは次のようなものです:

glClearColor(0, 0, 0, 0.0); 
glClear(GL_COLOR_BUFFER_BIT);

// Set the Projection Matrix
GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(60), 2.0/3.0, 0, 50);


glUseProgram(_programHD);

glBindVertexArrayOES(_vao);

glActiveTexture(GL_TEXTURE1); 
glBindTexture(GL_TEXTURE_2D, _textureBuffer[1]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

glUniform1i(uniforms[UNIFORM_TEXTURE_HD], 1);

// Drawing starts here //

// Pass the Model View Matrix to Open GL
_modelViewProjectionMatrix = GLKMatrix4Multiply(projectionMatrix,rotationMatrix);

glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX_HD], 1, GL_FALSE, _modelViewProjectionMatrix.m);

// Change texture coordinates to draw a different image

glUniform2fv(uniforms[TEXTURE_OFFSET_HD], 1, offSet.v);

glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);

//glUniform2i(uniforms[TEXTURE_OFFSET], 7, -5);
glUniform2fv(uniforms[TEXTURE_OFFSET_HD], 1, borderHD.v);

glDrawElements(GL_LINE_STRIP, 6, GL_UNSIGNED_SHORT, 0);



glBindVertexArrayOES(0);
glUseProgram(0);

より理解しやすいように、図面の計算を削除しました。ポイントは、私が描いている「どこ」に指定した場所がどこにも見えないということです。

ご協力いただきありがとうございます。

4

1 に答える 1

0

私は実際に、openGL ES 2.0 を使用して、十分に面白いライトハウス チュートリアルを使用して、iPhone ゲームにカラー ピッキング機能を実装し終えたところです。

フレーム バッファに描画する必要があります。

フレーム バッファから読み取りたい場合は、glReadPixels を使用するという点で正しいです。詳細はこちら:

http://www.opengl.org/sdk/docs/man/xhtml/glReadPixels.xml

灯台のチュートリアルと異なる唯一の点は、アルファ値も保存する必要があることです。特定のピクセルの色を取得する簡単な関数を次に示します。自由に改善または変更してください。

+ (void) ProcessColourPick : (GLubyte*) out : (Float32) x : (Float32) y
{
    GLint viewport[4];
    //Get size of screen
    glGetIntegerv(GL_VIEWPORT,viewport);

    GLubyte pixel[4];
    //Read pixel from a specific point
    glReadPixels(x,viewport[3] - y,1,1,
             GL_RGBA,GL_UNSIGNED_BYTE,(void *)pixel);

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

お役に立てれば。

于 2012-04-27T00:43:42.433 に答える