這可能會出現一個相關的問題:OpenGL ES 2.0的對象採摘在iOS(使用顏色編碼)
OpenGL ES 2.0 Object Picking on iOS
它說顏色選擇器是一個很好的解決方案,並在契稅閱讀之後:
http://www.lighthouse3d.com/opengl/picking/index.php?color1
它似乎是一個非常簡單的解決方案,因此這使我對這個問題
OpenGL ES color picking on the iPhone
不幸的是,它使用的是opengl es 1.0,我試圖在2.0中這樣做,所以我沒有訪問 來解決該問題中描述的功能。
但這個理論似乎很簡單,這裏是什麼,我想我應該做的:
上的觸摸開始我使我的對象具有獨特的顏色。
觸摸結束我得到該位置的像素,並檢查它的顏色 來得到我的對象。 (可能與glReadPixels)
問題是,我不知道如何做「渲染到後臺緩衝區並從中讀取」。
我的代碼到目前爲止只是使用「繪製」,我懷疑我不得不做一些像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);
我已經剝離了圖紙計算,以使其更容易理解。 重點是我沒有看到任何地方,我指定「我在哪裏」繪圖。
感謝您的幫助。
你如何寫入這個幀緩衝區,但在同一個渲染循環中只顯示其他幀緩衝區?是否像你這樣綁定第一個緩衝區,繪製,讀取顏色像素,然後綁定另一個,繪製,呈現給屏幕?你能告訴我這個代碼嗎? – Pochi 2012-04-27 00:49:57
對不起,我不完全明白你想要做什麼。你使用兩種不同的緩衝區並在它們之間交換? 您是否嘗試設置延遲渲染器?如從中,從着色器輸出到渲染目標,在另一個通道中使用? 或者你只是試圖挑選顏色。 – Ben 2012-04-27 02:18:48
我想在屏幕上渲染一些對象,但同時呈現完全充滿特定顏色的「屏幕外」的相同對象,以便當用戶觸摸屏幕時,我可以在屏幕外調用讀取像素方法「渲染和基於顏色我可以看到什麼對象被觸摸。 – Pochi 2012-04-27 02:35:17