2010-08-15 54 views
1

我正在使用3D引擎,需要在3D世界空间和2D屏幕空间之间使用透视投影进行翻译,因此我可以在3D空间中的物品上放置2D文本标签。 我见过这个问题的各种答案的几个帖子,但他们似乎使用我没有的组件。世界空间屏幕空间(透视投影)

我有一个Camera对象,只能设置它的当前位置和lookat位置,它不能滚动。相机沿着路径移动,某个目标对象可能会出现在视图中然后消失。 我只有下面的值

  • LOOKAT位置
  • 位置
  • 垂直FOV
  • Ž远
  • Ž邻近
  • 和明显的目标对象的位置。

任何人都可以请给我一个算法,只使用这些组件来做到这一点吗?

非常感谢。

回答

8

所有图形引擎都使用矩阵在不同的协调系统之间进行转换。的确,OpenGL和DirectX使用它们,因为它们是标准的方式。

摄像机通常使用你有参数构建矩阵:

  • 视图矩阵(变换世界位置的方式你看它从摄像机位置)时,它使用LOOKAT位置和照相机的位置(也是向上的向量,通常是0,1,0)

  • 投影矩阵(从3D坐标转换到2D坐标),它使用fov,near,far和aspect。

你可以找到如何构建在互联网搜索的矩阵为创建它们的OpenGL函数信息:

  • gluLookat创建viewmatrix

  • gluPerspective:创建投影矩阵

但我无法想象一个引擎th在不允许你得到这些矩阵,因为我可以确保你在哪里,引擎正在使用它。

一旦你有了这些矩阵,你将它们相乘,得到viewprojeciton矩阵。这个矩阵从世界坐标变换到屏幕坐标。所以,只需将矩阵乘以你想知道的位置(以向量4格式,即4º分量1.0)。

但是等等,结果将会是齐次坐标,您需要将生成的向量的X,Y,Z除以W,然后在Normalized屏幕坐标中有位置(0代表中心,0.5代表右边等)。

从这里很容易变换乘以宽度和高度。

祝你好运:)

P.S:当您使用3D工作,它是非常重要的,了解三个矩阵(模型,视图和投影),否则你会跌倒每次。

0

所以

你有没有抬头“广告牌”技术,我可以把2D文字标签在三维空间的物品 ?有时候,只要知道正确的术语就可以根据需要进行搜索。这是指总是面向相机的多边形(通常是矩形),而不管相机的位置或方向如何。

相关问题