3D物体的透视视角

3

我正在将我们的一款旧应用程序从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度,这样我不会一直看着正面。

谢谢您的任何帮助。


如果我理解你想做什么,你需要使用__旋转__矩阵。http://en.wikipedia.org/wiki/Transformation_matrix 是的,了解这一切的最好方式是阅读有关OpenGL变换的资料。http://www.songho.ca/opengl/gl_transform.html - Alleo
1个回答

0
正如评论者所说:你应该使用矩阵来使你的生活更轻松。 旋转可以通过将两个矩阵相乘来轻松完成,一个旋转矩阵和一个透视矩阵,具体方式如下:
// 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#矩阵,或从其他任何地方获取它。这里是实现矩阵的绝佳来源。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接