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