- 92 名前:91 mailto:sage [04/07/10 14:06 ID:mnKwxbw9]
- 3D座標を2D座標にするのは
// ワールドマトリクスで座標変換します。 pos := Figure.TopFrame.LocalToWorld(testFigure.TopFrame.GetTranslation(testFigure.TopFrame)); Hgpos := NowHomoginize(pos); // ビューマトリクスで座標変換します。 Hgpos:=NowTransform(Hgpos, NowInvMatrix(Camera.WorldMatrix)); // プロジェクションマトリクスで座標変換します。 Hgpos:=NowTransform(Hgpos, (Scene.ProjectionMatrix));//ScreenMatrix // ビューポート情報からクライアント座標を取得します。 Hgpos.x := (Hgpos.X / Hgpos.W * 800 / 2) +800 / 2; Hgpos.y := -(Hgpos.Y / Hgpos.W * 600 / 2) +600 / 2; これで出来たっぽい 2D座標を3D座標にするのはこれの逆をやればよいから・・・ こうか?? pos.X := マウス座標X; pos.Y := マウス座標Y; pos.Z := 1; //W付きに変換 Hgpos := NowHomoginize(pos); // クライアント座標からビューポート情報を取得します。 Hgpos.x := (Hgpos.X -800 / 2) * Hgpos.W/(800 * 2); Hgpos.y := -(Hgpos.Y -600 / 2)*Hgpos.W/(600 * 2); // プロジェクションマトリクスで座標変換します。 Hgpos:=NowTransform(Hgpos, NowInvMatrix(Scene.ProjectionMatrix)); // ビューマトリクスで座標変換します。 Hgpos:=NowTransform(Hgpos, (Camera.WorldMatrix)); pos := NowHeteroginize(Hgpos); testFigure.Figure.TopFrame.SetTranslation(Camera ,pos); 出来ない _no
|

|