Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 三维物体透视_C#_Geometry_Perspective - Fatal编程技术网

C# 三维物体透视

C# 三维物体透视,c#,geometry,perspective,C#,Geometry,Perspective,我正在将一个旧的应用程序从vb6升级到c#,在此过程中,我必须重新创建一个由原始程序员设计的自定义控件。控件只需获取一个对象的尺寸,矩形或圆锥形,然后在3D中放置一个对象的轮廓草图(我认为技术上是2.5D)。当然,控件或算法的代码是不存在的 之前我对此一无所知,除了透视图之外,我几乎复制了所有东西。我正在使用我在另一个答案中找到的代码 } double w = 400; double h = 250; double t = 0.6;

我正在将一个旧的应用程序从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度,这样我就不会直视前方

谢谢你的帮助

正如评论者所说:你应该使用矩阵来使你的生活变得简单

通过将两个矩阵、一个旋转矩阵和一个透视矩阵相乘,可以很容易地进行旋转:

// 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#矩阵,或者从其他任何地方获取它。是实现矩阵的极好来源。

如果我了解您想要做什么,您需要使用旋转矩阵。是的,理解这一切的最好方法是阅读openGL转换