WPF 中的相机位置和视线方向

2023-12-29

我希望你们都做得很好。

我目前正在开发 wpf 应用程序。我是 wpf 的新手。我正在创建一个代表 wpf 中的实验室的场景。我在设置相机方面遇到了很大的困难。我不知道相机的原点从哪里开始,即 (0,0,0) 或默认位置。我正在研究位置值,但无法确定相机的位置。我必须缩小并将光标放在<ModelVisual3D>查看相机的位置。而且我也不知道这些线显示什么

<PerspectiveCamera Position="-40,40,40"/> //a little modification via mouse to show these three lines appropriate 

These red, green and blue lines When I use position= 0,0,1 it stays inside window but when I use 1,0,2 it vanished and have to relocate it. There is a similar code available on stackoverflow, it says:

Position="12.5,50,20" LookDirection="0,-.7,-0.35" //it works perfectly :(

我的问题是如何理解这个位置属性和查看方向(完全不知道,已经搜索过但正在寻找简单的解释)。类似的代码工作得很好,但是当我尝试编写自己的代码时,我陷入了相机的位置。

请帮帮我。欢迎所有建议。我正在使用 VS2012 和 .Net 4.5


Problem

我想问题源于这样一个事实:每当一个人指定一个观察方向人们通常认为该值是相机正在观察的空间中的一个点。错误的!例如,指定 LookPosition 等于 0,0,0 并不意味着相机正朝着原点看,正如一些早期评论所暗示的那样。

Solution

解决方案就在于“LookDirection”这个词本身:它提到了“方向”。现在,虽然人们指定的方式观察位置在 XAML 中与Position使用三个逗号分隔的有序数字指定相机的编号,这些数字在两种情况下表示不同的含义。 位置属于类型Point3DLookDirection 的类型为Vector3D。因此,当输入值时观察方向,实际上指定了一个向量。不是重点。

无需过多讨论矢量细节,有必要提及的是,我们在这里讨论的矢量是欧几里得矢量,其特征为幅度方向。如果向量由三个逗号分隔的有序数字(三元组)定义,则该向量称为坐标向量。这样的坐标向量总是意味着存在一个基和一个origin正是这个原点对于找到相机观察的方向非常重要。

要了解相机的瞄准目标(以及为什么您可能看不到您想看到的东西),请遵循以下简单步骤:想象自己站在原点 (0,0,0),同时看向由观察方向。摄像机虽然位于另一个点,但也正在观察这个方向。

在下图中,一个对象(盒子)位于原点。这Position我们的相机设置为(-2,1,2)。问: 应该做什么观察方向设置为以便在我们的屏幕上看到该框?假设您站在 (0,0,0) 处,朝以下方向看: (-2,1,-1)。该框会在您的屏幕上可见吗?答案是否定的,因为通过设置观察方向(-2,1,-1) 你的相机指向点(-4,2,1)的方向。该点是通过将矢量的初始点滑动(平移)到相机所在的点,然后取矢量的终点来找到的。

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

让我们把它提升到一个新的水平:该对象不是位于原点,而是例如在 (-2,1,-1) 中,而相机仍处于 (-2,1,2) 中。应该是什么观察方向价值?再次想象您站在原点,朝着您希望相机指向的相同方向看,以便在屏幕上看到某些内容。与前面的示例有所不同,其中红色箭头指向您的背部。这实际上是一种特殊情况:除非该对象也位于原点,否则红色箭头不会指向您的背部,如第二个示例所示。再次,从您站立的原点开始并跟随您的视线画一条假想线。当您站在原点时,您能够看到的这条线上的所有点都是有效的观察方向价值观。例如点 (0,0,-3)。而且,正如前面的示例所示,所有倍数都可以。但要注意,(0,0,3)也是倍数,但站在原点时该点位于您的背部。因此,这不是一个好的观察方向 value.

最后,让我们提供一个寻找合适的通用规则观察方向价值。选取您希望相机聚焦的点并减去指示相机位置的点。你得到的值是一个合适的值观察方向价值。让我们将这条规则应用到这两个例子中。在第一个示例中,我们有 (0,0,0) - (-2,1,2),结果为 (2,-1,-2)。在第二个示例中,我们通过从 (-2,1,-1) 减去 (-2,1,2) 得到一个值。这等于 (0,0,-3)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 中的相机位置和视线方向 的相关文章

随机推荐