3

古いアプリの1つをvb6からc#に更新していますが、その過程で、元のプログラマーが設計したカスタムコントロールを再作成する必要があります。コントロールは、長方形または円錐形のオブジェクトの寸法を取得し、オブジェクトのアウトラインスケッチを3D(技術的には2.5Dだと思います)に配置しました。もちろん、コントロールまたはアルゴリズムのコードはどこにもありません。

これについて前もって何も知らなかったので、視点を除いてほとんどすべてが複製されました。私はここで別の答えで見つけたこのコードを使用しています。

        }
        double w = 400;
        double h = 250;
        double t = 0.6; // tilt angle   
        double X = w / 2 - x;
        double Y = h / 2 - y;
        double a = h / (h + Y * Math.Sin(t));
        double u = a * X + w / 2;
        double v = a * Y * Math.Cos(t) + h / 2;
        }

最後に助けが必要なのは、視点を左から右に約30度回転させることなので、真っ直ぐ見ているわけではありません。

助けてくれてありがとう。

4

1 に答える 1

0

コメンターが言うように:ライブを簡単にするためにマトリックスを使用する必要があります。

回転は、次のように、回転行列と遠近行列の 2 つの行列を乗算することで簡単に実行できます。

// We don't have a view matrix here
Matrix4x4 modelProjection = Matrix4x4.Perspective(400, 250, Math.PI / 4) * Matrix4x4.RotationX(degree);
// Get a specifics point position, use x and y to determine the screen position and z for the z-order
Vector3 screenPosition = modelProjection * myPosition; // myPosition is a Vector3

コードを実行するには、いくつかのことを行う必要があります 。C# マトリックスを実装するか、他の場所から取得します。これは、行列を実装するための優れたソースです。

于 2012-10-11T15:16:03.867 に答える