クリックした場所の世界座標を既に見つけることができ、これも深度バッファーでチェックします。これには、次のコードが使用されます。
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);
x_cursor と y_cursor がカーソル座標です。
これまでのところ非常に良好で、x、y、z を印刷すると良好なようです。
しかし今...すべてのポリゴン/三角形を含むファイルを解析した後。すべてをopenGL DISPLAY Listsに入れました。したがって、私のプログラムは基本的にリストを呼び出して、それらを翻訳/回転するだけです。すべてのオブジェクトには固有の名前があります。だから私が保持しているのはリストだけで、すべてのオブジェクトのポイント/三角形を保持しているわけではありません
私の質問 :
クリックした場所の世界座標はわかりますが、どのオブジェクトがその位置に一致するかをどのように把握できますか!?