Как распознать меши

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Как распознать меши

Сообщение longwair » 07.10.2011 (Пт) 10:19

Допустим имеется два меша "шар и куб", как сделать так, что бы при наведение курсора на куб он распознавался как куб, а шар как шар. Неужели это всё делается при помощи этого не понятного мне Intersect?
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 07.10.2011 (Пт) 12:40

А понятно сформулировать можешь?

Wikipedia писал(а):Mesh (компьютерная графика) — В компьютерной графике меш — это набор вершин и многоугольников, определяющих форму трёхмерного объекта

Где у шара вершины/грани?

И что значит "распознавался при наведении курсора"?

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Как распознать меши

Сообщение FireFenix » 07.10.2011 (Пт) 16:16

Qwertiy писал(а):
Wikipedia писал(а):Mesh (компьютерная графика) — В компьютерной графике меш — это набор вершин и многоугольников, определяющих форму трёхмерного объекта

Где у шара вершины/грани?

Учите мат. часть!

Меш - список треугольников.
Каждый треугольник - имеет 3 вершины.
Триангулировав сферу, мы получим меш с вершинами!

Изображение
Изображение

longwair писал(а):Допустим имеется два меша "шар и куб", как сделать так, что бы при наведение курсора на куб он распознавался как куб, а шар как шар.

Треугольник - представляет плоскость.
От точки зрения до мышки можно провести прямую.
Тогда задача выбора объекта - сводиться к нахождению треугольника, которого пересекает прямая "зрения".

Как только мы переберём некоторый список треугольников (либо все, либо выбранные после некоторой оптимизации) на предмет пересечения, то мы потом можем определеить к какой группе он относится (шар или куб).

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

longwair писал(а):Неужели это всё делается при помощи этого не понятного мне Intersect?

Да. Но никто не заставляет юзать D3DX, можешь написать свою функцию
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Как распознать меши

Сообщение longwair » 07.10.2011 (Пт) 20:19

Поясняю суть проблемы, в проекте 2 .X объекта шар и куб. нужно что бы при наведение на них курсора мыши текстом писалось что это куб или шар. Вот хоть убей даже не знаю с чего начинать, куда и какой код впихнуть. Буду рад если хоть кто то поможет, хотя бы несколько строк что бы оттолкнуться от чего то.
У вас нет доступа для просмотра вложений в этом сообщении.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Как распознать меши

Сообщение FireFenix » 07.10.2011 (Пт) 23:09

longwair писал(а):Поясняю суть проблемы, в проекте 2 .X объекта шар и куб. нужно что бы при наведение на них курсора мыши текстом писалось что это куб или шар.

Что было не ясно из того что было сказано выше?
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Как распознать меши

Сообщение longwair » 08.10.2011 (Сб) 10:59

FireFenix, я начинающий поэтому половину из того что ты написал не понимаю. Пол дня ломал голову с этим Intersect, не могу понять как заставить проверять выбранный Mesh и как вообще вызвать эту функцию. На форуме стянул пример прицел, запихал всё в свой проект, пробовал разобраться но ничего не получилось. Я конечно понимаю что вы думаете "сам учись", но учится ведь надо у кого то. Сам пока нифига разобраться не могу.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Как распознать меши

Сообщение FireFenix » 08.10.2011 (Сб) 13:56

longwair писал(а):FireFenix, я начинающий поэтому половину из того что ты написал не понимаю. Пол дня ломал голову с этим Intersect, не могу понять как заставить проверять выбранный Mesh и как вообще вызвать эту функцию. На форуме стянул пример прицел, запихал всё в свой проект, пробовал разобраться но ничего не получилось. Я конечно понимаю что вы думаете "сам учись", но учится ведь надо у кого то. Сам пока нифига разобраться не могу.

Ну тогда нужно начинать не с программирования, а азов математики, т.к. код описывает как раз таки математическое решение пересечения прямой и плоскости
Аналитическая геометрия
Аналитическая геометрия на плоскости и в пространстве
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Как распознать меши

Сообщение longwair » 08.10.2011 (Сб) 16:02

Код: Выделить всё
Function GetWall(Mesh As D3DXMesh, XStart As Single, YStart As Single, ZStart As Single, XEnd As Single, YEnd As Single, ZEnd As Single) As Long

Я так понимаю что "Mesh As D3DXMesh" определяет тот объект который будем проверять, значит я должен писать "Box As D3DXMesh" или как? В данном случае "Box"- это мой .X файл
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Как распознать меши

Сообщение Mikle » 08.10.2011 (Сб) 19:34

longwair писал(а):Я так понимаю что "Mesh As D3DXMesh" определяет тот объект который будем проверять, значит я должен писать "Box As D3DXMesh" или как? В данном случае "Box"- это мой .X файл

Box не может быть файлом, это объект типа D3DXMesh, который ты загрузил из своего .X файла. Кстати, зачем сферу и куб грузить из файла, когда можно создать "на месте" средствами D3DX?
Смотри во вложении мой старый пример применения ф-ции d3dx.Intersect, может поможет.
Кстати, такой объект, как сфера, ОЧЕНЬ легко рассчитывается без всяких Intersect, куб посложнее.
Более сложные модели просчитать сложнее, но и тут существуют другие средства, кроме Intersect - например, можно каждый объект рисовать своим цветом в Stencil, потом брать пиксель из Stencil и по нему определять.
У вас нет доступа для просмотра вложений в этом сообщении.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Как распознать меши

Сообщение longwair » 08.10.2011 (Сб) 19:52

Mikle писал:
Кстати, зачем сферу и куб грузить из файла, когда можно создать "на месте" средствами D3DX

Да это я так к примеру привёл.

Спасибо Mikle, в твоём проекте хоть как то более или менее понятно, буду разбираться.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Как распознать меши

Сообщение longwair » 25.03.2016 (Пт) 10:41

Есть D3dXMesh загруженный из .Х файла, проверяю его Intersect-ом и всё работает норм. Но мне надо проверить группу таких же мешей. В приложенном проекте в рендере сделал так:
Код: Выделить всё
    DrawGameMesh Platform, 0, 0, 0
    intersection
    DrawGameMesh Platform, 0, 0, 20
    intersection

После второй прорисовки меша вызываю тот же Intersect, работает всё неправильно, да и не правильно всё это. По сути проверять надо не два объекта, несколько сотен. Рисоваться будут через
Код: Выделить всё
For.....Next.
Как всё это сделать, помогите добрые люди кто чем может.
У вас нет доступа для просмотра вложений в этом сообщении.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как распознать меши

Сообщение alibek » 25.03.2016 (Пт) 14:04

longwair писал(а):Как всё это сделать, помогите добрые люди кто чем может.

Без работы головой тут никак.
А я этого пока не наблюдаю.
Ты в принципе не понял того, о чем говорил FireFenix, а это основа. Оптимизировать решения для конкретных фигур, как предложил Mikle для сферы, можно будет только после того, как основа будет понята.
Lasciate ogni speranza, voi ch'entrate.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Как распознать меши

Сообщение longwair » 25.03.2016 (Пт) 16:01

Alibek, Проект скинул как пример, понятное дело что у меня не кубики и шарики а более сложные меши. И понимаю я что Intersect рассчитывает пересечение с мешем матрицу которого использую. Но мешь то один и матрица у них одна, это по сути клон. Можно конечно создать массив мешей и перебирать их, но мне нужно именно распознать их как в проекте.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Как распознать меши

Сообщение Mikle » 25.03.2016 (Пт) 16:31

longwair писал(а):Но мешь то один и матрица у них одна, это по сути клон. Можно конечно создать массив мешей и перебирать их, но мне нужно именно распознать их как в проекте.

Это в корне неверно.
Во-первых - у меша НЕТ матрицы, с чего бы ей быть вообще.
Во-вторых - достаточно создать массив матриц.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Как распознать меши

Сообщение longwair » 25.03.2016 (Пт) 17:05

Mikle, это вот этих
Код: Выделить всё
Private Sub intersection()
Dim M As D3DMATRIX
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Как распознать меши

Сообщение Mikle » 26.03.2016 (Сб) 12:02

Подожди, пример сделаю, может будет понятнее.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Как распознать меши

Сообщение Mikle » 26.03.2016 (Сб) 12:27

Готово.
Обрати внимание, есть модуль управления modCtrl, в нём процедура Control, она меняет положение камеры.
Есть массив юнитов Unit() типа tUnit, он содержит ссылки на меши (не сами меши!) и соответствующие матрицы.
Всё тебе нужное находится в процедуре TestIntersect - зная положение камеры и матрицы юнитов, мы определяем факт коллизии с лучом. Это без оптимизации, сам принцип.
У вас нет доступа для просмотра вложений в этом сообщении.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Как распознать меши

Сообщение longwair » 26.03.2016 (Сб) 13:03

Mikle, Огромное спасибо, на первый взгляд всё более чем понятно.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26

    TopList