如何模拟2d 3D样(放下)

时间:2012-06-12 18:26:32

标签: windows-phone-7 3d xna 2d

如果我有一个文字和图像网格,就像日历视图一样。如果我希望整个网格放下45度仍然能够响应手指点击/滚动,该怎么办?非常感谢!

2 个答案:

答案 0 :(得分:4)

这是一个非常简单的解决方案。 如果使用Expression Blend打开项目,选择网格后,转到属性选项卡,向下缩放到'Transform',应该有一个名为'Rotation'的属性,只需更改X:Y:Z:值直到网格旋转到您希望它的样子。它的行为完全符合您的预期。

这是XAML代码:

<Grid.Projection>
    <PlaneProjection RotationX="-43"/>
</Grid.Projection>

答案 1 :(得分:2)

好的,如果你在XNA中这样做,你会想要使用Billboarding。我担心我还没有需要广告牌,所以我不能给你具体细节,但像往常一样Riemers Tutorial就是这样。现在,特别想要一个带控件的交互式广告牌。如果您之前从未有过3D体验,那将会很复杂。以下是您想要做的事情:

  1. 像往常一样使用SpriteBatch绘制控件/文本,但事先将GraphicsDevice的RenderTarget设置为新的RenderTarget,然后保存。查看here以获取有关更改rendertarget的文档。在绘制控件后,请务必将其设置回来。
  2. 现在使用显式转换将RenderTarget转换为Texture2D:Texture2D myTex = (Texture2D)myRenderTarget;
  3. 在广告牌上绘制此纹理。
  4. 现在出现了棘手的部分:您需要使用一种名为“Picking”的技术来确定用户点击的3D空间中的位置。 App Hub有一些挑选教程,但它们面向复杂的模型。由于广告牌仅使用具有2个三角形的平面,因此在这种情况下它们将无法满足您的需要。相反,我建议using Viewport.UnProject to pick on the plane
  5. 基本上,您将需要一个良好的系统来跟踪3D空间中可点击事物在广告牌上的位置。如果你知道它们,你可以使用平面方程式(我想我在微积分III中学到了这些)。如果您只需要基本功能,您可以使用这些公式来仅跟踪按钮的中心,然后进行半径测试以进行点击,但除非您的按钮是圆形,否则这不完全准确。

    如果你无法分辨,当你尝试在3D世界中应用2D概念时,事情会变得很复杂。