Jump to content

[C++][OpenGL] Powłoka wypukła


raV

Recommended Posts

Muszę wyznaczyć z zadaną dokładnością powłokę wypukłą zbioru punktów z przestrzeni trójwymiarowej, tak aby żaden z punktów nie wystawa ponad nią bardziej niż ustalę.

 

Dla powierzchni znam algorytm Grahama. Dla 3D nie znam odpowiednika.

Jeżeli idzie o tą "dokładność", chodzi o to, żeby zmniejszyć czas obliczeń. Myślałem o podziale przestrzeni na podobszary i otaczaniu "wokseli o krawędzi (np) 10px" ..

Link to comment
Share on other sites

triangle strip np albo lista trojkatow. podajesz liste wspolrzednych wierzcholkow (x, y,z) jako vertex buffer, a nastepnie 2 ga list indexow, gdzie kazdy wierzcholek z pierwszej listy ma kolejny index. Ta druga lista zwie sie index bufer. No i dajesz na tym render :)

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link to comment
Share on other sites

Chyba mowa o otoczce wypukłej w 3d ;]

 

Można zrobić to bruteforce dość prosto.

Bierzesz 4 punkty i tworzysz z nich czworościan wypukły.

Sprawdzasz kolejne punkty:

Jeśli punkt znajduje się wewnątrz czworościanu to go pomijasz jeśli nie to dodajesz go do bryły jako nowy wierzchołek i budujesz ściany podparcia. Trzeba usunąć tutaj wcześniej dodawane wierzchołki które automatycznie mogą znajdować się wewnątrz nowej bryły.

Metoda nie jest najszybsza ale względnie prosta.

 

Opengl tego nie załatwi... No chyba że narysujesz wszystkie możliwości trójkątów na zbiorze wierzchołków z depth testem to wynikiem na ekranie faktycznie będzie otoczka wypukła ale to bezsnesowne i niepraktyczne :P

www.spider.dathox.com :)

Link to comment
Share on other sites

 

Jeśli punkt znajduje się wewnątrz czworościanu to go pomijasz jeśli nie to dodajesz go do bryły jako nowy wierzchołek i budujesz ściany podparcia. Trzeba usunąć tutaj wcześniej dodawane wierzchołki które automatycznie mogą znajdować się wewnątrz nowej bryły.

 

 

Dzięki za odpowiedź. Być może to, czego szukam to otoczka wypukła a nie powłoka wypukła. Potrzebuję różnych pomysłów, również wolnych (żeby inne były "szybkie" :-)

Powiedz mi tylko, jak sprawdzić, czy punkt leży wewnątrz bryły, a jeżeli leży, to jakie ściany stworzyć a które usunąć ?

Link to comment
Share on other sites

By sprawdzić czy punkt jest wewnątrz bryły wystarczy sprawdzić czy znajduje się dla wszystkich ścian po tej samej stronie płaszczyzn wyznaczanych przez ściany z których składa się bryła. Do tego zadania wystarczy równanie płaszczyzny lub google :P

Jeżeli nowy punkt leży wewnątrz bryły to go pomijasz.

Jeśli któryś ze starych punktów leży wewnątrz bryły po dodaniu nowego punktu to usuwasz wszystkie ściany z którymi się łączy.

Największy problem tego algorytmu to dodawanie nowego punktu, wymaga znalezienia płaszczyzn stycznych do krawędzi na których będą znajdować się nowe ścianki.

 

Ogólnie jeśli nie masz trochę obycia z geometrią obliczeniową to radzę poszukać gotowych algorytmów pod hasłem "3d convex hull" :)

www.spider.dathox.com :)

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...