gpt4 book ai didi

ios - iOS 上的 OpenGL ES 2.0 对象拾取(使用颜色编码)

转载 作者:行者123 更新时间:2023-11-28 17:34:12 25 4
gpt4 key购买 nike

这可能会显示为相关问题:

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);

我已经去除了绘图计算以使其更易于理解。关键是我没有看到我指定“在哪里”绘图的任何地方。

感谢您的帮助。

最佳答案

我实际上刚刚在我的 iPhone 游戏中实现了一个颜色选择功能,使用 openGL ES 2.0,使用足够有趣的灯塔教程。

您应该绘制到帧缓冲区。

如果你想从帧缓冲区中读取,那么你想使用 glReadPixels 是正确的。更多信息在这里:

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

与灯塔教程唯一不同的是您还想存储 alpha 值。这是获取特定像素颜色的快速函数。您可以随意改进或更改它,但它可以完成工作。

+ (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];
}

希望这对您有所帮助。

关于ios - iOS 上的 OpenGL ES 2.0 对象拾取(使用颜色编码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10312607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com