Matrix 如何从视图矩阵确定摄像机位置?

Matrix 如何从视图矩阵确定摄像机位置?,matrix,graphics,3d,vertices,Matrix,Graphics,3d,Vertices,对于个人项目,我使用尽可能少的库在python中创建了一个简单的3D引擎。我做了我想做的-我能够渲染简单的多边形,并且有一个可移动的相机。但是,有一个问题: 我实现了一个简单的平面着色器,但是为了让它工作,我需要知道相机的位置(相机是我的光源)。然而,问题是我无法知道相机在世界空间中的位置。在任何时候,我都可以显示我的视图矩阵,但我不确定如何从中提取相机的位置,尤其是在旋转相机之后。这是我的引擎和视图矩阵的屏幕截图。相机尚未旋转,提取其位置(0、1、4)非常简单。 但是,将相机移动到X轴和Z轴

对于个人项目,我使用尽可能少的库在python中创建了一个简单的3D引擎。我做了我想做的-我能够渲染简单的多边形,并且有一个可移动的相机。但是,有一个问题:

我实现了一个简单的平面着色器,但是为了让它工作,我需要知道相机的位置(相机是我的光源)。然而,问题是我无法知道相机在世界空间中的位置。在任何时候,我都可以显示我的视图矩阵,但我不确定如何从中提取相机的位置,尤其是在旋转相机之后。这是我的引擎和视图矩阵的屏幕截图。相机尚未旋转,提取其位置(0、1、4)非常简单。

但是,将相机移动到X轴和Z轴之间的某个点并将其指向上方(并保持在相同高度)时,视图矩阵将更改为:

现在很明显,最后一列不能直接用于确定相机位置(它应该类似于最后一张照片上的(4,1,4))

我尝试了很多数学运算,但我无法找出从视图矩阵确定摄影机x、y、z位置的方法。我将感谢任何和所有帮助解决这个问题,因为这似乎是一个简单的问题,但谁的解决办法逃避我。多谢各位

编辑: 有人建议我用视图矩阵变换顶点(0,0,0,1)。然而,这是行不通的。请参见示例(顶点显然不位于打印的坐标处):

只需将向量
(0,0,0,1)
与modelview矩阵进行变换:它只是modelview矩阵最右边的一列

编辑:@ampersander:如果假设照明源位于相机的位置,我想知道你为什么要首先尝试使用相机位置。在这种情况下,请注意,在OpenGL中没有摄影机,事实上,“视图”变换所做的是移动世界上的所有东西,以便假设摄影机位于坐标原点(0,0,0)


或者换句话说:在modelview变换之后,变换的顶点位置实际上是视图空间中从摄影机到顶点的向量。这意味着,对于假设的照明计算,朝向光源的方向是负顶点位置。拿着它,将其标准化为单位长度,并将其粘贴到照明术语中。

谢谢您的回答。不幸的是,它不起作用。看我的edit@ampersander请参阅我的编辑。