小编Jos*_*eph的帖子

无法实施openGL选择

我已经能够找到我点击的地方的世界坐标,并且它还使用深度缓冲区进行检查.为此,使用以下代码:

GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX,winY;
glGetIntegerv(GL_VIEWPORT, viewport);
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection);

// obtain the Z position (not world coordinates but in range 0 - 1)
GLfloat z_cursor;
winX = (float)x_cursor;
winY = (float)viewport[3]-(float)y_cursor;
glReadPixels(winX, winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &z_cursor);

// obtain the world coordinates
GLdouble x, y, z;
gluUnProject(winX, winY, z_cursor, modelview, projection, viewport, &x, &y, &z);
Run Code Online (Sandbox Code Playgroud)

x_cursor和y_cursor是我的光标坐标.

到目前为止这么好,打印x,y,z时,它们似乎很好!

但是现在......在解析包含所有多边形/三角形的文件之后.我把每一个都放在openGL DISPLAY列表中.所以我的程序基本上只调用列表,并翻译/旋转它们.每个对象都有一个唯一的名称.所以我保留的是列表,我没有保留每个对象的点/三角形

我的问题 :

所以我有我点击的世界坐标,但我怎样才能找出哪个对象匹配该位置!

c++ opengl picking

5
推荐指数
1
解决办法
2921
查看次数

标签 统计

c++ ×1

opengl ×1

picking ×1