作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 opengl 中选择 2d 对象,但不知道如何操作。我希望它像在 3d 中一样使用 gluPickMatrix。这是我试过的:
void initDraw2D(){
GLuint buff[BUFSIZE];
GLint hits, view[4];
glSelectBuffer(BUFSIZE, buff);
glGetIntegerv(GL_VIEWPORT, view);
glRenderMode(GL_SELECT);
glInitNames();
glPushName(0);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
gluPickMatrix(mouseX, view[3] - mouseY, 1.0, 1.0, view);
glMatrixMode(GL_MODELVIEW);
Draw();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
hits = glRenderMode(GL_RENDER);
if (onSelect){
processHits(hits, buff);
onSelect = false;
}
Draw();
glutPostRedisplay();
}
但是当我点击它时它没有选择。
最佳答案
一个简单的方法是用不同的颜色渲染每个对象。编写一个函数,返回一个三维数组( vector ),如果还没有选择,则选择它作为对象的选择颜色,添加到选择颜色列表中。所以现在每个对象都有不同的颜色,您可以检查光标位置像素的颜色。为此使用帧缓冲区或 pbo-s。然后在选择列表中进行查找,并返回指向该对象的指针。(或者用它做任何你想做的事)。
当然不一定要渲染到屏幕上。
它看起来像这样:(伪代码)
object* object1 = new object();
object1->createSelectColor();
object1->addColorToList();
...
objectRenderer->renderColoredObjects(/*to the fbo or texture for example*/);
objectRenderer->pickColorAtCursorPos();
objectRenderer->lookUpColorInList(/*objectRenderer->selectedcolor*/);
objectRenderer->setTarget(/*objectRenderer->selectedobject*/);
这是独立于几何的。颜色在 R、G 和 B 中从 0-255 缩放。所以有 255*255*255=16581375 种不同的颜色,每个对象一种。
您可以为颜色查找创建 map ,为对象和颜色建立索引,创建巧妙的颜色选择功能,使查找变得容易......等等。
这个方法可以在书中找到:Chris Seddon - OpenGL Game Development,这是一个很好的开始。
关于c++ - 如何在 2D opengl 中进行拾取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19773613/
我是一名优秀的程序员,十分优秀!