raV Posted May 21, 2011 Report Share Posted May 21, 2011 Witajcie Jak mając N powierzchni (trójkątów) sprawdzić przecięcia? bo można przez poprowadzenie pół-prostej z punktu P i chcę stwierdzić, którą powierzchnię przetnę jako pierwszą. Zadanie jak dla Z-bufora, ale potrzebuje rozwiązanie analityczne. Ja mam bardzo doskonały pomysł brute-force: sprawdzić przecięcie z każdą powierzchnią i tyle. Macie jakieś pomysły? Link to comment Share on other sites More sharing options...
Stelma Posted May 22, 2011 Report Share Posted May 22, 2011 Jedyny pomysł jaki mi przychodzi do głowy to potraktować ekran jako układ współrzędnych z ćwiartki I jak dobrze pamiętam. I sprawdzić czy prosta o równaniu y = ax + b przetnie się z odcinkiem |AB| później |A'B'| itd jednak to w sumie również jest brutalem jechane O tyle dobre że jeżeli odcinek będzie miał taki sam współrzędnik a to wiadome że się nigdy nie przetnie z półprostą (zakładając iż się nie nakładają) Link to comment Share on other sites More sharing options...
raV Posted May 22, 2011 Author Report Share Posted May 22, 2011 A, powinno to wynikać z użytego słownictwa, ale problem dotyczy przestrzeni 3D. Póki co będzie brutal. Trudno. Link to comment Share on other sites More sharing options...
Integer Posted May 22, 2011 Report Share Posted May 22, 2011 A ja się podepnę pod temat bo interesują mnie kolizje z obiektami, i wykrywanie która płaszczyzna została "przecięta" przez prosta lub przez inną płaszczyznę, opiszę obrazowo: mam np. płot a sztachety i słupki to prostopadłościany pionowe (dla uproszczenia) oraz dwa poziome prostopadłościany - rygle do których sztachety są przybite. "Macham" teraz okręgiem (zbudowanym z 20 odcinków) który symuluje siekierę i trafia losowe jeden lub kilka sztachet, "przecina na wylot lub tylko nacina, zarysowuje" Pytanie o najszybszy możliwy sposób na sprawdzenie: 1. na których prostopadłościanach jedna ze ścian została przecięta nie koniecznie cała bo może być nacięta w poprzek sześcianu jedna , dwie, wszystkie cztery krawędzie 2. lub jeśli ostrze pójdzie wzdłuż to krawędzie nie będą ruszone a jednak ostrze przetnie płaszczyznę. Czy można zastosować jakieś uogólnienie, bo wydaje mi się że sprawdzanie przecięcia każdej krawędzi (odcinka) przy dużej ilości tych elementów może znacząco spowolnić symulację .. bo nie będzie to tylko niszczenie jednego płotu czy wybijanie (trafianie) w cegły w ścianie żeby zrobić dziurę. Taka cegła w ścianie 3D uderzona np 10 razy stopniowo znikała by jako niszczona, różna siłą (głębokością) uderzeń. Chyba że macie prostszy sposób na sprawdzanie tego. Link to comment Share on other sites More sharing options...
Blind Posted May 23, 2011 Report Share Posted May 23, 2011 Jest kilka algorytmów do podziału przestrzeni, jednym z prostszych i wystarczających jest np. "drzewo ósemkowe". www.blinder.pl - Blog Link to comment Share on other sites More sharing options...
raV Posted May 23, 2011 Author Report Share Posted May 23, 2011 Czy ktoś ma takie matematyczne umiejętności, by podać mi wzór na punkt leżący na pół-sferze (zaznaczony na obrazku). Chodzi o to, by parametryzując alfa i betha (0,180) móc otrzymać współrzędne punktu. Link to comment Share on other sites More sharing options...
Toster Posted May 24, 2011 Report Share Posted May 24, 2011 x = sin( a ) * cos( B ) * r y = sin( a ) * sin (B ) * r z = cos( a ) * r pisane z pamięci, sprawdź sobie wzór na transformacje do układu sferycznego z układu kartezjańskiego. Always Dark<br /> Link to comment Share on other sites More sharing options...
raV Posted May 24, 2011 Author Report Share Posted May 24, 2011 Dzięki Toster, o to mniej więcej mi chodzi, niestety tylko mniej więcej. We wzorach algebraicznych nie znalazłem zależności na płaszczyznę, na której leży punkt.. Ilustruje to zmieniony rysunek. Generalnie możemy założyć, że mamy dane 3 punkty z płaszczyzny -> stąd płaszczyznę da się wyznaczyć. Mamy też normalną (określa która pół-przestrzeń nas interesuje). Wszystko w kolorze niebieskim na rysunku. Płaszczyzna nie musi być równoległa do niczego, czerwony punkt w srodku pol-sfery niech będzie np. srodkiem ciezkosci tego trójkąta. I jak coś takiego właśnie ugryźć? Link to comment Share on other sites More sharing options...
Spider100 Posted May 25, 2011 Report Share Posted May 25, 2011 Jeśli chodzi o to by punkt był ustawiony lokalnie względem jakiejś płaszczyzny to za mało danych nadal masz by to wyznaczyć. należy wyznaczyć macierz przekształcenia: http://www.songho.ca/opengl/files/gl_anglestoaxes01.png Potrzeba trzech wektorów bazowych określający lokalny układ wsp. są to np Front,Up,Left . Powiedzmy że Up to normalna trójkąta musisz dobrać do tego pozostałe dwa np Front to jedna z krawędzi a Left to iloczyn wektorowy dla Up i Front. Ostatecznie te trzy wektory tworzą macierz obrotu układu współrzędnych (nazwijmy mR) Druga macierz to translacja która jest określona przez punkt P (nazwijmy mT) P' będzie punktem względem płaszczyzny która nas interesuje P' = (P(???) * mR) * mT Mniej więcej tak to wygląda, możliwe że kolejność mnożeń pomyliłem ale sama koncepcja ok www.spider.dathox.com Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.