透视3D对象
本文关键字:对象 3D 透视 | 更新日期: 2023-09-27 18:07:30
我正在将我们的一个旧应用程序从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#矩阵,或者从其他地方获得它。这是一个实现矩阵的优秀源代码。