Render.ru

Пересечение объетков

-VZ-

Активный участник
Рейтинг
5
#1
Добрый день! Подскажите пожалуйста, как программно описать проверку: пересекаются объекты на сцене или нет?
Заранее благодарю!
 

Максим Смирнов 36776

Пользователь сайта
Рейтинг
2
#2
Я в своё время тоже искал информацию на эту тему. Стандартной функции в MAXscript я не нашёл, поэтому написал свою.
функция проверяет пересечение треугольника с линией. В цикле подкидываем в неё треугольники и edge.

v1,v2,v3 - координаты вершин треугольника
norm - нормаль треугольника
p1,p2 - координаты точек линии
Код:
fn checkInterestTriangAndLine v1 v2 v3 norm p1 p2 = (

	r1 = dot norm (p1 - v1)
	r2 = dot norm (p2 - v1)
	
	if(sgn r1 != sgn r2) then (

	vector1 = (p1 + ((p2 - p1) * (-r1/(r2 - r1))))
	
	if( ( dot ( cross (v2 - v1) (vector1 - v1)) norm) <=0 ) then false	
	else if( ( dot ( cross (v3 - v2) (vector1 - v2)) norm) <=0 ) then false	
	else if( ( dot ( cross (v1 - v3) (vector1 - v3)) norm) <=0 ) then false
	else vector1
	) else false
)
может поможет
 

-VZ-

Активный участник
Рейтинг
5
#3
Спасибо! Но я нашел, по моему, лучший способ:
Функция, которая делает пересечение объектов
Код:
fn intersect sourseObj interObj = 
(
inter = (copy sourseObj) * interObj
interData = GetTriMeshFaceCount inter
delete inter
)
где sourseObj - объект который проверяем
interObj - объект который пересекает
inter - сюда ми записываем результат пересечения(новый объект)
interData - сюда записываем данные пересечения

А потом в самой программе делаем, например, вот такую проверку:
Код:
if interData[2] > 0 then print "1" else print "0"
Тоесть проверяем количество вершин, которые создались после пересечения объектов.

Попробуй, может эта функция тебе больше понравиться.
Удачи!!!
 

Максим Смирнов 36776

Пользователь сайта
Рейтинг
2
#4
да, точно, совсем забыл про этот способ, но в моем случае он не подходил. мне надо было детектить самопересечения одной сетки после Skin модификатора
 
Сверху