3d与照相机自转的透视投射

时间:2018-02-05 18:27:49

标签: c++ 3d sfml perspectivecamera projection-matrix

我现在正在开发一个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”功能。

但那有什么更快更简单的东西吗?我的配方中的任何附加物/一个允许我自己旋转相机的新配方?

感谢您的帮助,希望有人有解决方案; D. Arad Arble。

1 个答案:

答案 0 :(得分:1)

让我的评论成为答案。

我建议您查看主要图形库用于渲染的管道。 (例如OpenGL。)SFML在引擎盖下使用OpenGL,因此您不需要重新发明轮子。 Here是OpenGL的另一个例子。

另请查看现有的矩阵库,例如GLM,它们提供您需要的转换。如果您可以将必要的转换压缩成OpenGL可以使用的几个矩阵,那么渲染管道将会快得多。例如,您问题中的方程通常会被分为模型矩阵(从模型/局部空间转换每个顶点的位置 - >世界空间),视图矩阵< / strong>(转换世界空间 - >相机空间,使顶点看起来好像是从相机的角度来看),以及perspective 投影矩阵(进行转换)从相机空间 - >屏幕空间,并定义像视野的东西)。当所有这些矩阵相乘时,最终得到一个最终矩阵,当乘以位置向量时,会在屏幕空间中给出一个位置。因此,这个最终矩阵应用于场景中的每个顶点,包括模型变换,相机变换,透视分割,裁剪等,以给出将该顶点绘制到屏幕的最终结果。

回答你原来的问题,传统上是#34;相机&#34;由视图矩阵投影矩阵的组合表示。要旋转相机,您所要做的就是应用旋转变换(或者可能是&#34; lookAt&#34;变换;很难从您的问题中判断出来)到查看矩阵,数学将继续进行管道中的以下操作。