Конференция "Игры" » Collusion Detection на ID3DXSprite [Delphi, D3D9]
 
  • ElectriC © (15.09.07 19:16) [0]
    Есть спрайт с прозрачностью(т.б. с альфа-каналом) в некоторых местах.
    Как узнать, находится ли точка на прозрачной(альфа-канале) области спрайта?
    P.S. Если такое возможно на ID3DXSprite.
  • Megabyte-ceercop © (18.09.07 08:28) [1]
    Действительно ли необходима такая коллизия? Если это для того чтобы мышкой перетаскивать объект, достаточно проверять попадание в окружность по центру объекта. Это даже удобнее в большинстве случаев.

    Если нужна попиксельная коллизия, то придется делать вручную, через свой бэкбуфер альфы.
  • PixelShader © (18.09.07 15:12) [2]
    Megabyte-ceercop
    +1
    Проверка через свой бэкбуффер может еще усложнится тем, что спрайт может быть повернут, смасштабирован, иметь покадровую анимацию и тд.

    Потому если этот возможно, лучше использовать коллижн  окружностей\прямоугольников. Будет быстрее и проще в реализации.
  • ElectriC © (18.09.07 19:47) [3]
    Просто я вывожу GUI с помощью ID3DXSprite (Кстати это нормально - т.б. быстро ли?).
    P.S. Как проверить попадание точки в прямоугольник с округлыми краями?
  • megabyte-Ceercop © (19.09.07 11:58) [4]
    Сделай окружность с ней проще всего, не придется учитывать поворот.
    Я сам вообще использую прямоугольник без учета поворота спрайта.
    по такой формуле
    if ((Abs(Xobj - Xmouse) < Wobj/3) && (Abs(Yobj - Ymouse) < Hobj/3) )
    then  коллизия есть.

    Wobj, Hobj - ширина и высота объекта соотв.  Делиться должно на 2, если объект ровно прямоугольный, но если его края рваные и неправильные, то делим на 3, чтобы заузить тело колизии.
  • ElectriC © (19.09.07 15:08) [5]

    > megabyte-Ceercop ©

    Спасибо.
    P.S. Правильно ли выводить GUI с помощью ID3DXSprite?
 
Конференция "Игры" » Collusion Detection на ID3DXSprite [Delphi, D3D9]
Есть новые Нет новых   [134431   +10][b:0][p:0]