Обнаружение щелчка мыши и Transformation2D в Direct3D - PullRequest
1 голос
/ 02 октября 2009

Я использую спрайты для рисования изображений в окне 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. Размер и положение изображения внутри спрайта.

Это должно быть достаточно данных, чтобы получить то, что я хочу, но я понятия не имею, что делать.

КСТАТИ - ни трансформации мира, ни другого, чтобы включить в расчет. Я просто трансформирую спрайты.

1 Ответ

1 голос
/ 21 декабря 2010

Вы должны иметь возможность сделать это с помощью matrix.Invert (). Псевдокод:

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

return null;
...