我正在使用3D引擎,需要使用透视投影在3d世界空间和2D屏幕空间之间进行转换,因此我可以在3d空间中的项目上放置2d文本标签.我已经看到了一些关于这个问题的各种答案的帖子,但他们似乎使用了我没有的组件.
我有一个Camera对象,只能设置它的当前位置和lookat位置,它不能滚动.相机沿着路径移动,某个目标对象可能会出现在其视图中,然后消失.我只有以下数值
任何人都可以给我一个算法,只使用这些组件来做到这一点?
非常感谢.
所有图形引擎都使用矩阵在不同的协调系统之间进行转换.事实上,OpenGL和DirectX使用它们,因为它们是标准方式.
摄像机通常使用您拥有的参数构建矩阵:
视图矩阵(将世界变换为从摄像机位置看它的位置),它使用了观察位置和摄像机位置(也就是通常为0,1,0的向上矢量)
投影矩阵(从3D坐标转换为2D坐标),它使用fov,near,far和aspect.
您可以在Internet上找到有关如何构建矩阵的信息,以搜索创建它们的opengl函数:
gluLookat创建一个viewmatrix
gluPerspective:创建投影矩阵
但我无法想象一个引擎不允许你得到这些矩阵,因为我可以确保它们在某个地方,引擎正在使用它.
一旦你有了这些矩阵,你就可以将它们相乘,得到viewprojeciton矩阵.此矩阵从世界坐标转换为屏幕坐标.因此,只需将矩阵与您想知道的位置相乘(以矢量4格式,即4º分量1.0).
但是等等,结果将是齐次坐标,你需要将得到的矢量的X,Y,Z除以W,然后你在Normalized屏幕坐标中有位置(0表示中心,0.5表示右边等).
从这里可以轻松转换乘以宽度和高度.
祝好运 :)
PS:当你使用3D时,理解三个矩阵(模型,视图和投影)非常重要,否则你每次都会绊倒.
| 归档时间: |
|
| 查看次数: |
5867 次 |
| 最近记录: |