3D透视图投影,带有摄像头旋转
3d perspective projection with camera rotation
我现在正在开发一个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矩阵,而数学将贯穿到管道中的以下操作。
- 与互斥锁相比,旋转锁可以保证上下文切换
- 绘制旋转的三角形
- 旋转模型矩阵时的形状失真
- 四边形的 2D 旋转
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- 发布旋转矩阵(openGL/glm)
- OpenCV 4.1.2 - 从网络摄像头获取帧并将其拆分
- 使用OpenCV和覆盆子上的多个网络摄像头拍摄延时摄影,出现多个V4L错误
- 顺时针迭代旋转 3 位数字
- 形状对象的旋转和缩放不正确C++
- 如何在 OpenSceneGraph 中缩放/旋转/移动资产
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- 子轴围绕父轴而不是他自己的轴旋转
- 将使用太多的纹理插值器 - 带旋转的着色器
- SFML 向下移动时如何围绕屏幕中心旋转?
- 使用源读取器从网络摄像头源获取 H264 样本
- 如何在OpenGL中正确旋转和缩放对象?
- 使用 C++在 OpenGL 中移动自动旋转的 3D 多边形
- UE4-使用摄像头时,观众不会旋转(俯仰)
- 3D透视图投影,带有摄像头旋转