Autor Wątek: Punkt przecięcia prostej i bryły 3d (opisanej analitycznie)  (Przeczytany 1207 razy)

Offline komorra

  • Użytkownik
    • Blog naszego teamu (o grze Voxelfield)

# Marzec 24, 2011, 16:21:49
Jak można znaleźć punkt przecięcia (pół)prostej i dowolnej bryły 3d opisanej analitycznie? Do tej pory wyznaczałem to iteracyjnie, ale teraz wolałbym mieć dokładny punkt. Generalnie mam klasę abstrakcyjną z wirtualną metodą double DoFormula(double x,double y,double z) i każdy podtyp (kula, walec,itd.) definiuje jej własną wersję. Oprócz tego klasa abstrakcyjna ma zdefiniowaną metodę Intersect, która jako parametr wejściowy bierze sobie tą prostą bądź półprostą (w zasadzie półprosta, bo potrzebny mi jest punkt najbliższy punktowi startowemu).

Wiem ze mniej wiecej wzor bedzie taki f(x,y,z) - (ax + bx + cx + d) = 0, ale co z tym dalej zrobić, czy to ruszyć wyznacznikiem czy podstawić coś - nie wiem. Mam w klasie pomocniczej napisaną funkcję liczącą normalną powierzchni w punkcie (na zasadzie różniczki po x,y,z), ale nie wiem czy to się tutaj przyda do czegoś. Dzięki za pomoc.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Marzec 25, 2011, 00:52:30
Poczytaj o "distance fields" (np. z linka poniżej). Generalnie bardzo fajna metoda i działa w real-time na GPU (obecnie jest to główny nurt w intrach 4k).

http://www.iquilezles.org/www/material/nvscene2008/rwwtt.pdf

Offline komorra

  • Użytkownik
    • Blog naszego teamu (o grze Voxelfield)

# Marzec 25, 2011, 05:21:33
Dzięki Krzysiek. A polecasz jakieś fajne demko/demka do obejrzenia?

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Marzec 25, 2011, 08:13:22
Jasne - oczywiście swoje. ;)