C#XNA-我有一个摄像头在观察一个点——那么为什么我还需要一个投影矩阵呢?逻辑问题

C#XNA-我有一个摄像头在观察一个点——那么为什么我还需要一个投影矩阵呢?逻辑问题,c#,xna,logic,C#,Xna,Logic,我很好奇为什么没有投影矩阵什么都不会显示,以及投影矩阵到底在做什么。我已经搜索了MSNDN,但没有结果,所以我想我应该试着问问有使用经验的人 我看一看这一点: viewMatrix=Matrix.CreateLookAt(camPos、trackPos、player.getMatrix().Up); …从我对其工作原理的理解来看,我不需要任何补充信息来让相机工作。我可以使用投影矩阵使一切都显示得很好,但我真的不明白为什么需要它/它到底在实现什么 也许如果有人能传递一个链接或者简单地解释一下

我很好奇为什么没有投影矩阵什么都不会显示,以及投影矩阵到底在做什么。我已经搜索了MSNDN,但没有结果,所以我想我应该试着问问有使用经验的人

我看一看这一点:

viewMatrix=Matrix.CreateLookAt(camPos、trackPos、player.getMatrix().Up);

…从我对其工作原理的理解来看,我不需要任何补充信息来让相机工作。我可以使用投影矩阵使一切都显示得很好,但我真的不明白为什么需要它/它到底在实现什么

也许如果有人能传递一个链接或者简单地解释一下,我就能更好地处理这个属性,并从中获得一些更流畅的镜头效果,但总的来说,我不喜欢使用我不完全理解的代码

干杯,

-霍希海默投影矩阵从相机空间转换到二维空间

  • 世界矩阵=对象变换
  • 摄影机矩阵=将世界变换为摄影机空间
  • 投影矩阵=将摄影机空间变换为二维空间
如果没有投影,你会被困在3d中,我们还没有3d显示器

简单示例:如果对象在对象空间中居中,并对世界矩阵应用旋转,则对象将围绕其自身的中心旋转

如果稍后旋转摄影机,所有对象将围绕摄影机位置旋转

稍后,您需要查看所做的操作,然后应用投影。它可以使用透视图,也可以不使用透视图。对于透视投影,基本上用z除以x,y,最简单的透视投影可能是:

x2d = x/z * screenwidth + screenwidth/2;
y2d = y/z * screenheight + screenheight/2;

这给了我们一种“3d感觉”,通过进一步深入3d空间,靠近屏幕中央,想象一个经典的星光场,你就会明白。要了解更多信息,您需要了解基本线性代数,我建议您感兴趣的话就从这里开始

划掉所有“我能让一切都好起来”的部分。。。hahaI认为最好的开始是创建这些3Dmonitors@Remm是的,但这会把代数h*ll拖进我们的普通计算机软件;-)真正的问题是,既然XNA知道你使用的是要输出的相机,为什么它不能将其作为自动功能。。。或者至少是“默认”位置。投影是一个矩阵,但你说它可以用两个浮点数正确地固定(我可能会添加两个浮点数,看起来逻辑上很正确)好吧,不管怎样,现在我明白了为什么3D图形的人对数学也很感兴趣。@Remm实际上,你想做的比我在简单示例中做的要多得多。你需要修正视场、剪辑,并将透视图/三维图引入二维空间,以便能够在二维空间中插值fake3d中的纹理贴图,等等。矩阵只是许多数学运算的一种紧凑形式。但它需要一本书来详细描述。是的,遗憾的是,我的截止日期只允许我寻找问题的答案,而不是追求知识。真可惜。你赢了,斯托夫。当我放弃尝试让这个透视矩阵正确地跟随玩家时,我会回来的。