WPF中的摄影机位置和注视方向

WPF中的摄影机位置和注视方向,wpf,perspectivecamera,Wpf,Perspectivecamera,我希望你们都做得很好 我目前正在处理wpf应用程序。我是wpf的新手。我正在创建一个场景,它表示wpf中的一个实验室。我在安装照相机方面遇到了很大的困难。我不知道摄影机的原点从何处开始,即(0,0,0)或默认位置。我玩的是位置值,但我无法确定摄像机的位置。我必须缩小并将光标放在 查看摄像机的位置。而且我也不知道这些线显示了什么 <PerspectiveCamera Position="-40,40,40"/> //a little modification via mouse to

我希望你们都做得很好

我目前正在处理wpf应用程序。我是wpf的新手。我正在创建一个场景,它表示wpf中的一个实验室。我在安装照相机方面遇到了很大的困难。我不知道摄影机的原点从何处开始,即(0,0,0)或默认位置。我玩的是位置值,但我无法确定摄像机的位置。我必须缩小并将光标放在
查看摄像机的位置。而且我也不知道这些线显示了什么

<PerspectiveCamera Position="-40,40,40"/> //a little modification via mouse to show these three lines appropriate 
我的问题是,如何理解这个位置属性和观察方向(完全不知道,已经搜索了它,但寻找简单的解释)。类似的代码可以完美地工作,但当我试图编写自己的代码时,我被困在相机的位置

请帮帮我。欢迎所有建议。我正在使用VS2012解决.Net 4.5的问题 我想问题的根源在于,每当指定一个LookDirection时,人们通常会认为这个值是相机所观察的空间中的一个点。错了!例如,将LookPosition指定为0,0,0并不意味着相机正朝着原点看,正如前面的一些注释所示。


解决方案 解决方案在于“LookDirection”这个词本身:它提到了“direction”。现在,尽管在XAML中指定LookPosition的方式与指定相机位置的方式相同,但使用三个逗号分隔的有序数字,这两种情况下,这些数字的含义有所不同。Position类型为Point3D,LookDirection类型为Vector3D。因此,当输入LookDirection的值时,实际上指定了一个向量。没什么。

在不讨论太多向量细节的情况下,有必要提到,我们在这里讨论的向量是一个欧几里德向量,其特征是大小和方向。如果向量由三个逗号分隔的有序数字(三元组)定义,则该向量称为坐标向量。这样的坐标向量总是意味着一个基准和一个原点的存在,正是这个原点对于找到相机的观察方向很重要。

要了解您的相机瞄准的目标(以及为什么您可能看不到您想要看到的东西),请遵循以下简单的步骤:想象您自己站在原点(0,0,0)上,同时查看LookDirection指定的点。这正是相机的方向,尽管它位于另一个点上,但它也朝着这个方向看。

在下图中,一个对象(框)位于原点。我们相机的位置设置为(-2,1,2)。问题:要在屏幕上看到方框,LookDirection应该设置为什么?假设站在(0,0,0)处时,您正朝着例如(-2,1,-1)的方向看。该框在屏幕上是否可见?答案是否定的,因为通过将LookDirection设置为(-2,1,-1),您的相机将指向点的方向(-4,2,1)。通过将矢量的初始点滑动(平移)到相机所在的点,然后获取矢量的终点,可以找到该点。

那么,我们应该将LookDirection设置为什么点呢?要找出这个问题,请再次将自己放在原点(0,0,0),并朝红色箭头所指的方向看。想象一下你身体上站在那里。在这种情况下,你会感觉到红色箭头指向你的背部,而你的视线会沿着红色箭头的延伸线。在这个假想的箭头延伸上,您可以看到的每个点(不是在您的背部)都可以用作方向向量,即有效的LookDirection值。例如,(2,-1,-2)是一个好的。此外,该值的每一个倍数都可以。因此,(4,-2,-4)也会起作用。(1,-0.5,-1)也是如此。没有必要,这是一个倍数;也允许使用(2.1,-1,-2)等非倍数,但在这种情况下,您会注意到屏幕上的对象不再居中。请记住,对象位于原点的右侧。



让我们将其带到下一个级别:对象不位于原点,但例如在(-2,1,-1)中,而相机仍在(-2,1,2)中。LookDirection值应该是多少?再次,想象你自己站在原点,朝着你希望相机指向的同一方向看,以便在屏幕上看到一些东西。与前面的示例不同,在该示例中,红色箭头指向您的背部。这实际上是一个特例:除非对象也位于原点,否则红色箭头不会指向您的背部,如第二个示例所示。再一次,从你站的原点开始画一条假想的线,并跟随你的视线。当您站在原点时,您可以看到这条线上的所有点都是有效的LookDirection值。例如点(0,0,-3)。但是,正如前面的例子一样,所有倍数都可以。注意,(0,0,3)也是一个倍数,但当站在原点时,这一点位于你的背部。因此,这不是一个好的LookDirection值。

最后,让我们提供一个寻找适当LookDirection值的一般规则。取您希望相机聚焦的点,减去指示相机位置的点。得到的值是正确的LookDirection值。让我们把这条规则应用于这两个例子。在第一个例子中,我们有(0,0,0)-(-2,1,2),结果是(2,-1,-2)。在第二个例子中,我们通过从(-2,1,-1)中减去(-2,1,2)得到一个值。这等于(0,0,-3)。


意味着,首先我必须创建然后放置相机?如果是这样的话,我怎么知道对象的创建是正确的呢?请导游!它取决于3D场景和对象的放置位置。相机的位置和方向没有通用的规则。“位置”是摄影机的位置,“注视方向”是摄影机注视的点。很简单。那么,jus
Position="12.5,50,20" LookDirection="0,-.7,-0.35" //it works perfectly :(