y=-50平面にクワッドがあります。現時点では、クワッドをマウスでクリックしたときの座標を取得するだけです。私はこれを限られた範囲で行うことができました。問題は、クワッドを描画するときに適用した変換が考慮されていないことです。いくつかの定数を追加して機能させることもできますが、ユーザーがglRotatef()を使用してx軸とy軸を中心にシーンを回転できるようにすると、回転が発生するとすぐに座標が乱れます。
これが私が今していることです:
gluUnProject()を2回呼び出します。1回はz = 0で、もう1回はz=1です。
gluUnProject( mouseX, WINDOW_HEIGHT - mouseY, 0, modelView, projection, viewport, &x1, &y1, &z1);
gluUnProject( mouseX, WINDOW_HEIGHT - mouseY, 1, modelView, projection, viewport, &x2, &y2, &z2);
正規化された光線ベクトル:
x = x2 - x1;
y = y2 - y1;
z = z2 - z1;
mag = sqrt(x*x + y*y + z*z);
x /= mag;
y /= mag;
z /= mag;
パラメトリック方程式:
float t = -(camY) / y;
planeX = camX + t*x;
planeY = camY + t*y;
planeZ = camZ + t*z;
ここで、(camX、camY、camZ)は、gluLookAt()に渡されるカメラの位置です。
平面X、平面Y、平面Zを、四角形の描画に使用したのと同じ座標系で、四角形のクリックの座標にします。どうすればこれを達成できますか?