Skocz do zawartości

Featured Replies

Napisano

Witajcie.

Mym proglemem jest to:

 

Posiadam w animacji 3 plane'y. Czy jest możliwość jakaś, żeby "przesuwając" jeden plane w górę i w dół, kolejne dwa będą automatycznie podnościć opadać.

 

Głębjej:

Obiekty: plane1, plane2 oraz plane3.

Wyjaśnienia:

- plane1 - Najwyżej usadowiony.

- plane2 - Niżej od plane1, dalej usadowiony.

- plane3 - Niżej od plane2, dalej usadowiony.(najniżej)

Dodatkowe info:

Podobne jak byśmy przelewali wodę z jednaj szklanki do drugiej. Czyli, jak podniesiemy poziom plane1, "przelewa się" do plane2. Załóżmy że plane1 ma granicę do podniesienia o 1 cm, plane2 o 0.5 cm, plane3 o 0.2 cm.

Działanie:

plane1 chcemy podnieść o 2 cm (ale wlać możemy tylko o 1, ponieważ się wyleje). To co się wylewa, czyli brakujący centymetr podnosi wysokość plane2 o 1 cm, ale znowu powtarza się sytuacja. Dlaczego? Nie wiesz? No to tłumaczę: Plane2 może podnieść tylko wysokość o 0.5 cm, więc co się dzieje z pozostałym 0.5 cm? Odziałowuję na plane3 i podnosi się wtedy o 0.2 cm... 0.3 cm które zostało do podniesienia "znika".

Problem:

Czy jest możliwość napisania takiego algorytmu? Jak to będzie działać? Czy na live, czy potrzeba będzie renderować? Jak na żywo to jak to będzie działać? Chodzi mi o to czy trzeba by renderować to, czy da się na żywo to mieszać?

Rozwiązanie łopatologiczne:

Bazując na moim doświadczeniu z programowaniem (błehehehe) mogę napisać jak to widzę ;)

 

int ile,resztki=0;

poziom_plane1=0;

poziom_plane2=0;

poziom_plane3=0;

granica_plane1=2;

granica_plane2=1;

granica_plane3=0.5;

wpisz(ile);

if ile>granica_plane1

{

ile=ile-granica_plane1;

poziom_plane1=granica_plane1;

{

if ile>granica_plane2

{

ile=ilei-granica_plane2;

poziom_plane2=granica_plane2;

{

if ile>granica_plane3

{

ile=ile-granica_plane3;

poziom_plane3=granica_plane3;

}}}}};

 

No coś takiego, ale nie wiem jak przekładać to na język w blenderze (hehe to jest kombinacja wszystkich języków jakie znam ;) Sorki za ortografię.

 

Proszę o rozpatrzenie tego problemu, oraz podesłania swoich włąsnych pomysłów, prostrzych, bądź bardziej rozbudowanych.

 

Dziękuję i czekam na wiadomości...

  • Odpowiedzi 5
  • Wyświetleń 1,1k
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Napisano

nie chce mi sie zagłębiać w algorytm :P ale spróbuj constrainami copy location i limit location ewentualnie transformation ;) to bedzie dzialac w realtime

http://wiki.blender.org/index.php/Doc:Manual/Constraints

w pythonie raczej da sie napisać przesuwanie na kolejnych klatkach czyli będzie działać pod alt+a albo renderze

Edytowane przez szczuro

Napisano

Nie wiem czy Cię dobrze zrozumiałem i nie bardzo mam czas tak w środku dnia - ale może o coś takiego chodzi?

 

Wciskasz 'P' i potem 'W' i 'S' dodajesz i ujmujesz 0.1 z 'ile' - po 'przelaniu' plane1 napełnia się 'plane2' itd.

 

Starałem się maksymalnie łopatologicznie to napisać - w razie czego wal - pomogę ile dam radę.

 

Założyłem, że 'na live' znaczy, że chcesz to w Blender Game Engine mieć.

Tak?

Napisano

Poczytaj o constrainach. Jak się czyta manuale to wszystko jest proste.

Napisano

@dac77:

Hmm, a możesz coś więcej napisać? Myślałem trochę, ale nie mam pojęcia jak to zrobić 'normalnymi' constrainami.

 

@Coody:

Ruszaj Emptym w załączonym pliku.

W 'Options' można sobie ustawić pozycje początkowe plejnów i ich limity ruchu.

 

@all:

Proszę się nie śmiać - to mój pierwszy PyConstrain i pewnie wszystko jest dookoła głowy robione - ale chiba działa :D Komentarze i wytknięcie większych błędów mile widziane.

 

EDIT:

Aaa, bo zapomniałem:

Ruszanie jest Emptym, bo nie umiem w constrainie wyłapać ruchu dalej - dopóki plane1 jedzie w górę to mam jego pozycję, a jak się plane1 'wypełni' i zatrzyma to nie wiem skąd wziąć dane o dalszym przesunięciu mychy. Anyone?

Edytowane przez ArturM

Napisano

Dla prostych rzeczy wystarczy Transformation. Dla skomplikowanych Script.

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności