2

点と三角形の交点をテストする方法を知っています。

...しかし、マウス座標を使用してポイントの開始位置を画面平面上に正確に移動する方法がわからないため、マウスカーソルが画面上のどこにあるかに応じてポイント角度が変化する必要があります。これも機能するはずです私のOpenGLアプリケーションで使用している透視角度に関係なく完全に、異なる透視角度ではポイント角度が異なります... gluPerspective() は、私が話している関数です。

4

3 に答える 3

2

ええと、ショットを撮って、あなたが何を意味するかを推測します。おそらく、マウスでオブジェクトを選択したいと思うでしょう。チェックアウト:

glUnProject .

これにより、画面座標が 3D ワールド座標に変換されます。

問題が発生した場合は、 Googleに詳しい情報が表示されます。

乾杯 !

于 2009-05-23T20:15:25.350 に答える
1

はい、画面上のポイントを移動したいので、たとえば、3D 座標を使用して、マウスが現在あるポイントに立方体をレンダリングし、その位置からマウスがある場所まで線を放ちます。が指しているので、私の 3D ワールドでは三角形にぶつかり、マウスでそのオブジェクトを選択する方法がわかりました。

わかりづらくてすみません:/

--

編集:ええ、私はそれがそのneheチュートリアルで動作するようになりました! ありがとう、こんなに簡単だとは知らなかった!

これは現在使用しているコードであり、うまく機能します:

void GetOGLPos(int x, int y, GLdouble &posX, GLdouble &posY, GLdouble &posZ){
    GLint viewport[4];
    GLdouble modelview[16];
    GLdouble projection[16];
    GLfloat winX, winY, winZ;

    glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
    glGetDoublev(GL_PROJECTION_MATRIX, projection);
    glGetIntegerv(GL_VIEWPORT, viewport);

    winX = (float)x;
    winY = (float)viewport[3]-(float)y;
    glReadPixels(x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);

    gluUnProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);
}
于 2009-05-24T10:59:08.057 に答える
0

画面に垂直なマウスの位置を通過する光線 (線) を生成する必要があります。

先に進む前に、3D ジオメトリと 2D 投影に関する基本的な情報を取得することをお勧めします。

ウィキペディアをご覧ください

Google で本を検索すると、かなりの数のタイトルが出てきました。

Foley & Van Dam は決定版ですが、Amazon.co.ukまたはAmazon.comで購入できます。

于 2009-05-24T11:13:14.537 に答える