1

使って描いたたくさんの点からなるシーンがあります

glBegin(GL_POINTS);
glVertex3f(x[i],y[i],z[i]); // the points are displayed properly .. 
glEnd();

私がやりたいことは、マウスを使用してシーン上のポイントの 1 つをクリックし、その 3 次元座標を取得できるようにすることです。

私は使用する他のスレッドを見てきました:

glReadPixels((GLdouble)mouse_x, 
    (GLdouble) (rect.Height()-mouse_y-1),1, 1,GL_DEPTH_COMPONENT, GL_FLOAT, &Z);

z の値を使用します

gluUnProject(mouse_x, mouse_y, 0, modelview, projection, viewport, out posX, out posY, out posZ);

しかし、私は常にz=0出力として取得します.これは、これらがポリゴンではなくポイントであるためですか?zの座標を取得する方法はありますか?

4

2 に答える 2

0

残念ながら、それはできません。画面上の任意のポイント x、y ポイントは、シーン内の特定の光線に沿った任意のポイントを参照できます。

ポイントを描画していることを考えると、選択モードを使用して特定のポイントを選択し、そのポイントの座標を決定することをお勧めします。

于 2011-03-03T19:13:45.803 に答える
0

glReadPixels を間違った方法で呼び出していると思います。x、y、幅、高さは double ではなく GLint でなければなりません。これは、glReadPixels が返す結果の形式とは関係ありません。そのため、マウスの位置とウィンドウ サイズのウィンドウ座標を glReadPixels に渡す必要があります (例: glReadPixels (mouse_x, rect.Height() - mouse_y, rect.Width(), rect.Height(), GL_DEPTH_COMPONENT, GLfloat, &z);mouse_x と mouse_y の値の範囲が [0.0 .. 1.0] の場合、glReadPixels ( rect.Width * mouse_x, rect.Height() * (1.0 - mouse_y)への呼び出しでそれらを適切にスケーリングする必要があります)。そうです、あなたのコードは期待どおりに動作するはずです。

于 2011-08-21T12:46:10.980 に答える