【发布时间】:2012-04-25 09:11:39
【问题描述】:
这可能显示为相关问题:
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)
问题是我不知道如何执行“渲染到后台缓冲区并从中读取”。
到目前为止,我的代码只是使用“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);
我已经剥离了绘图计算以使其更易于理解。 关键是我没有看到我指定“在哪里”绘制的任何地方。
感谢您的帮助。
【问题讨论】:
标签: ios opengl-es-2.0