3D透视图投影,带有摄像头旋转

3d perspective projection with camera rotation

本文关键字:摄像头 旋转 透视图 投影 3D      更新时间:2023-10-16

我现在正在开发一个3D游戏引擎(非常简单,只是立方体,也许还有其他简单的3D对象(。我正在使用C ,对于图形SFML,它是C 的2D图形库。

我已经有了透视投影的公式:

s将是屏幕上点的位置。P将是3D空间中点的位置。E是眼睛的位置(相机(。

sx =((ez *(px -ex((/(ez pz(( ex

sy =((ez *(py -ey(((/(ez pz(( ey

现在,这很好!我现在想做的是旋转相机本身。我已经考虑过在相机周围旋转所有其他所有内容,因为我可以快速使用当前的代码来执行此操作,其中包括3D点的" rotatearoundpoint"功能。

但是有什么更快,更简单的东西吗?我的公式/新配方均可以使我旋转相机本身?

感谢您的任何帮助,并希望某人有解决方案; DArad Arble。

使我的评论成为答案。

我建议您研究主要图形库用于渲染的管道。(例如,openGL。(SFML在引擎盖下使用OpenGL,因此您无需重新发明轮子。这是openGl的另一个示例。

还查看现有的矩阵库(例如GLM(提供所需的转换。如果您可以将必要的转换凝结为OpenGL可以使用的一些矩阵,则渲染管道将会更快。例如,您的问题中的方程式通常会分为型号矩阵(要从模型/局部空间 ->世界空间转换每个顶点的位置(,视图矩阵(要改变世界空间 ->相机空间,使顶点看起来像从相机的角度出现(,以及一个透视图投影矩阵(从相机空间 ->屏幕空间转换为定义诸如视场之类的事物(。当将所有这些矩阵乘以乘以时,您最终会获得最终矩阵,当将位置向量乘以时,它会在屏幕空间中占据位置。因此,此最终矩阵应用于您的场景中的每个顶点,其中包括模型变换,相机变换,透视部门,剪辑等,以给出绘制该顶点的最终结果。

要回答您的原始问题,传统上,"相机"由视图矩阵投影矩阵的组合表示。要旋转相机,您要做的就是应用旋转转换(或可能是" lookat"变换;从您的问题中很难说出(到您的 view矩阵,而数学将贯穿到管道中的以下操作。