鼠标单击检测和Direct3D中的Transformation2D

时间:2009-10-02 06:18:44

标签: c# directx mouse transform direct3d

我使用Sprites在D3D窗口中绘制图像。我在矩形(0,0,宽度,高度)内的每个精灵上绘制图像,并使用Matrix.Transformation2D将图像放置在渲染视图中。

示例:

using (Sprite s = new Sprite(device))
   {
      s.Begin(SpriteFlags.AlphaBlend);
      Matrix tranz = new Matrix();
      tranz =
         Matrix.Transformation2D(new Vector2(0, 0), 0.0f,
            new Vector2(scale, scale),
            new Vector2(0, 0), Geometry.DegreeToRadian(angle),
            new Vector2(positionX, positionY));

      s.Transform = tranz;

      Vector3 spriteCenter = new Vector3(0.0f, 0.0f, 0.0f);
      Vector3 sprPosition = new Vector3(0.0f, 0.0f, 0.0f);

      s.Draw(someTexture, new Rectangle(0, 0, width, height), 
         spriteCenter, sprPosition,
         Color.FromArgb(0xff, 255, 255, 255));
      s.End();
   }

如何检测单击某个图像?

已知参数: 1.鼠标位置:mouseX,mouseY 2.所有transformation2D参数 3.精灵内图像的大小和位置。

这应该足以获得我想要的数据,但我不知道该怎么做。

BTW - 没有世界变革,也不包括在计算中。我只是改变了精灵。

1 个答案:

答案 0 :(得分:1)

你应该能够使用matrix.Invert()来做到这一点。伪代码:

Foreach sprite
    Matrix inverse = tranz.Invert()
    objectCoords = mouseCoords * inverse;
    if (objectCoords in (0,0,width, height))
        return sprite

return null;