2009-11-08 54 views
2

在3D场景中,我们经常需要在场景中移动(旋转,平移)的3D对象旁边应用标签(小textelements或图标)。这些标签应该始终朝向相机,但仍然随物体一起移动。我相信这种技术叫做广告牌。WPF 3D广告牌

如果标签始终保持相同的大小 - 无论相关对象距离多远,额外的一个很酷的功能就是如此。所以标签似乎生活在2D屏幕空间中,而不是在3D场景图中。

有没有人想出一个聪明的方式如何在WPF中做到这一点?

回答

1

对于广告牌,您需要确保脸部正常指向相机。该算法是面法线与视线方向之间的点积应为-1(减1)。

我有一些旧的C代码可以做到这一点,但它可能不是特别有用。

为了保持对象具有相同的尺寸,您需要计算出屏幕尺寸,然后应用变换以保持您希望的恒定尺寸。

但是,如果您希望对象看起来好像处于2D空间中那样,为什么不将它绘制在2D叠加层中呢?这将同时解决广告牌和缩放问题。您计算出标签的屏幕位置,然后使用2D绘图功能。

+0

我可以在2D覆盖图中绘制它,但是如何确定标签的位置?当关联的3D对象移动时,标签需要随之移动。我想它invloves计算投影矩阵或什么的。 – bitbonk 2009-11-08 18:47:39

+0

我或多或少地意识到所有这些背后的数学问题,如果我努力尝试,我甚至可以计算出正确的矩阵,我需要将它转换为视图。但我真的希望我不必自己来做这件事:)另外我不太清楚我是如何将所有这些融入到WPF Viewport3D场景中的。 – bitbonk 2009-11-08 18:51:24

+0

是的,你需要参与投影矩阵。我没有用WPF做过3D,所以我不太想说说你需要什么方法和/或属性。 – ChrisF 2009-11-08 19:19:45