Deformujące powierzchnie

10

Staram się osiągnąć deformujące zachowanie fizyczne na płaskich powierzchniach, ale jak dotąd nie mam pojęcia, jak zacząć od implementacji.

Niezależnie od kształtu powierzchni (samoloty, sześciany, kule…) chcę mieć małe wcięcia na pozycjach od bytów gry (graczy, wrogów, przedmiotów…).

Wyjaśnienie tego jest dość skomplikowane, więc zilustrowałem to, o czym mówię, oto przykład ze sferą:

ilustracja deformująca gra powierzchniowa

Tak więc powierzchnie powinny być w stanie nieco się odkształcić (wyglądać jak naprawdę miękkie łóżko lub sofa). Moje powierzchnie potrzebują prawdopodobnie dużej liczby wierzchołków, aby uzyskać gładkie odkształcenie, ale moim wielkim problemem jest matematyka do obliczania tego odkształcenia.

Programuję w C / C ++ z OpenGL, ale wszelkie porady we właściwym kierunku będą w porządku.

Constantin
źródło

Odpowiedzi:

5

W przypadku prostej deformacji możesz wybrać punkt na powierzchni / obiekcie do manipulacji, a następnie zastosować do niego transformację (np. Translację). Następnie przekształć wszystkie punkty w pewnej odległości od tego punktu w ten sam sposób, ale transformacja traci siłę, im dalej jesteś od wybranego punktu, w którym jesteś.

Tak więc, aby zrobić wcięcie pod postacią, wybierz punkt, na którym on / ona stoi i przesuń ją w dół.

W zależności od efektu, który chcesz zarchiwizować, możesz zastosować transformację globalnie, lokalnie lub w kierunku / od centrum obiektu i / lub użyć różnych funkcji do symulacji różnych materiałów.

Prosty przykład wcięcia samolotu za pomocą funkcji Falloff / Sinos można znaleźć na stronie www.lighthouse3d.com/opengl/terrain/

Exilyth
źródło
1
Otrzymuję błąd 403 na link.
George Duckett
1
Cóż ... Lil hack jest wtedy w porządku (również bezpośrednio do odpowiedniej sekcji): web.archive.org/web/20100927141645/http
Exilyth