Войти
ПрограммированиеФорумОбщее

Пересечение круга и пиксельной маски

#0
21:09, 10 апр. 2012

Есть пиксельная маска(область хотспота) нужно мышкой которая имеет радиус клика - выбрать этот предмет,
как лучше всего сделать эту проверку? а то брутфорсом чтото не хочется :)


#1
21:23, 10 апр. 2012

Для пиксельной маски иметь bouding box. Сначала проверять по нему, если попал то проверить по пиксельной маске.
HOG?

#2
21:23, 10 апр. 2012

>радиус клика
Это что за радиус такой?

>выбрать этот предмет
Какой еще предмет?

>как лучше всего сделать эту проверку?
Какую проверку?

Из того что ты написал ничего не понятно даже телепатам.

#3
21:25, 10 апр. 2012

VIP_Artemka
HOG

BB это оптимизация - а вот сама проверка?
когда у меня поинт - то тут проблем вообще нет.
а вот когда у меня круг - то мне что для каждой точки круга проверять? (брутфорс)

#4
21:34, 10 апр. 2012

IROV..
все просто, надо маску объектов заранее нарастить на радиус круга :)

#5
21:37, 10 апр. 2012

IROV..
>а вот когда у меня круг - то мне что для каждой точки круга проверять? (брутфорс)
Это то есть каждую точку с круга проверять с массивом точек маски?

А если делать копию маски, в нее по этой же маске рендерить круг и сверять первую маску со второй?

#6
6:38, 11 апр. 2012

В случае, если ты собираешься тыкать указателем мыши сложной формы по не менее простой геометрии несколько миллионов раз в секунду, то можно построить на битовой маске модели и указателя по sparse voxel octree и проецировать их друг на друга, отыскивая коллизии. Также можно эксплойтить временную когерентность, сохраняя ссылки на узлы, которые пересеклись при прошлом клике, это поможет достичь сублогарифмической скорости от размеров маски указателя и модели.

А в случае если тебе надо мышью пикнуть какой-то спрайт, то лучше не парить людям мозг и проверить попиксельно.

#7
7:53, 11 апр. 2012

Просто сделай саму маску жирнее, как советует LuckyMan.

#8
9:52, 11 апр. 2012

Suslik +200 )))

#9
12:47, 11 апр. 2012

BUzer
Насколько жирнее?

Усложняем - радиус может менятся )

Suslik
А если мне нужно отловить, не только клик, но и движение - Over|Out?

#10
15:11, 11 апр. 2012

IROV..
> Усложняем - радиус может менятся )
Разноцветная (черно - серо - светло-серая) маска.

#11
23:24, 19 апр. 2012

пиксельную маску хранишь как Distance field, тогда клик мышкой - одно чтение пикселя под курсором и сравнение значения с радиусом клика.

#12
11:59, 20 апр. 2012

veth
интересный способ - динамики не хватает :)

З.Ы. я уже решил эту проблему, пойже раскажу если никто не предложит этот вариант (там есть динамика)

ПрограммированиеФорумОбщее

Тема в архиве.