我正在开发一个使用Directx的小应用程序,用于绘制瀑布图中的频谱数据。 它应该是这样的:
到目前为止,我设法创建了大部分图表组件(轴,标题和数据可以绘制成线或切片,如上图所示)。 现在的问题是,我无法创建一个类似于图像中的投影。 我知道图像中显示的投影是“斜投影”,我尝试了几种方法来获得它:
在这里,作者提出投影matrix为
P = M_orth * H(θ,φ)
其中M_orth
是一个正交投影matrix, H(θ,φ)
是一个定义为的剪切matrix
H(θ,φ) = | 1 0 -cot(θ) 0 | | 0 1 -cot(φ) 0 | | 0 0 1 0 | | 0 0 0 1 |
这里,投影matrix被定义为
P(α,θ) = | 1 0 cos(θ) / tan(α) 0 | | 0 1 sin(θ) / tan(α) 0 | | 0 0 0 0 | | 0 0 0 1 |
笔者给出了两个特例:
但他们都没有给我很好的结果:
而我不明白为什么我会得到这个奇怪的结果? 你们中的任何人都知道如何正确设置斜投影?
提前致谢
结果发现,设置斜投影非常简单。 为了使它在D3D11上工作,斜投影应该由两个matrix组成:
P(α,θ)= S(α,θ)* M_orth
哪里
M_orth是正交投影matrix,而S(α,θ)剪切matrix由下式给出:
S(α,θ)= | 1 0 0 0 | | 0 1 0 0 | | ab 1 0 | | 0 0 0 1 |
同
a = cos(θ)/ tan(α)
和
b = sin(θ)/ tan(α)
这些是我得到的结果: