Projekt Micarpet Projektbericht - artecLab - Universität Bremen
Projekt Micarpet Projektbericht - artecLab - Universität Bremen
Projekt Micarpet Projektbericht - artecLab - Universität Bremen
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>Projekt</strong> MiCarpet <strong>Projekt</strong>bericht<br />
'M' 'C' 'S' (optionale Nutzdaten)<br />
4 Bytes<br />
0-n Bytes (durch Typ bestimmt)<br />
Abbildung 12.12: Paketaufbau im Netzwerksystem<br />
Name Zweck Nutzdaten?<br />
SLAVEBROADCAST Slave sucht Masterserver Nein<br />
MASTERANNOUNCE Master gibt Präsenz und eigene Adresse bekannt Nein<br />
JOIN Slave will Sitzung beitreten Nein<br />
JOINACK Master bestätigt Beitritt und sendet Szenendaten Ja<br />
FRAMEUPDATE Master sendet Updatedaten für neuen Frame Ja<br />
FRAMEUPDATELAST Master sendet Updatedaten / letztes Update für diesen Frame Ja<br />
FRAMEFINISH Slave meldet, dass Frame fertig gerendert Nein<br />
NEWLEVEL Master meldet Szenenwechsel Ja<br />
NEWLEVEL_ACK Slaves bestätigen Szenenwechsel Nein<br />
SHUTDOWN Master beendet Sitzung Nein<br />
Ablauf einer Sitzung Generell besteht eine Sitzung aus zwei Phasen: einer Startphase, in der der<br />
Master auf Slaves wartet, und einer Laufphase, in der das Rendern in einer Schleife abläuft.<br />
Eine Sitzung beginnt damit, dass der Master gestartet wird. Dieser startet lokal mit den vorgegebenen<br />
Einstellungen (u.a. erwartete Anzahl der Slaves), öffnet aber sonst nur einen Verbindungskanal (Port) und<br />
wartet auf eingehende Verbindungswünsche. Startende Slaves müssen nun als erstes den Masterserver<br />
ausfindig machen. Bei Unicast muss dazu zwingend vorher direkt die IP-Adresse bekannt sein (einstellbar<br />
beim Start), bei Broadcast schickt der Slave einfach das Discover-Paket an alle Rechner, bei Multicast<br />
an die Gruppe. Falls ein Master in der Startphase ist, antwortet er darauf mit einem Announce-Paket an<br />
den Slave, in dem er seine eigene Adresse bekannt gibt. Der Slave kann nun eine Anfrage zum Beitritt<br />
(Join) stellen. Hat der Master noch freie Plätze, so schickt er ein Join-Acknowledgement als Antwort, in<br />
dem unter anderem die Szene angegeben ist, welche geladen werden soll.<br />
Hat der Master alle erwarteten Slaves gefunden, so beginnt er die Render-Schleife, die für jeden zu rendernden<br />
Grafik-Frame durchlaufen wird. Am Anfang jedes Frames sendet er ein oder mehrere Update-<br />
Pakete (sind die Slaves noch in der Startphase, so gelangen sie mit dem ersten Update-Paket in die<br />
Laufphase) an alle Slaves. In diesen Paketen sind die Änderungen an den Objekten in der Welt (siehe<br />
nächsten Abschnitt) kodiert. Da diese Informationen beliebig umfangreich werden können (je nach Anzahl<br />
der Änderungen), werden die Informationen eventuell auf mehrere Pakete aufgeteilt, da UDP eine<br />
maximale Paketlänge hat. In diesem Fall zeigt das Paket mit dem Typ FRAMEUPDATELAST an, dass dieses<br />
Paket das letzte für diesen Frame ist. Nachdem die Slaves alle Update-Informationen haben, wenden<br />
sie diese auf ihre lokale Kopie der Szene an. Danach starten sie das Rendern der Szene mit den aktuellen<br />
Einstellungen; sind sie damit fertig, sendet jeder Slave ein Finish-Paket an den Master, um anzuzeigen,<br />
daß er bereit zum Umschalten auf das neu gerenderte Bild ist. Hat der Master die Bestätigungen von<br />
allen Slaves erhalten, ist dieser Frame beendet und der Master sendet das nächste Update-Paket und so<br />
fort. Das nächste Updatepaket dient damit auch als Signal für die Slaves, das gerade fertiggestellte Bild<br />
bei sich sichtbar zu schalten.<br />
Zum Beenden der Sitzung kann der Master schließlich ein Shutdown-Paket schicken. Dies führt auch<br />
dazu, dass alle Slaves die Ausführung der Engine beenden und herunterfahren.<br />
6. Januar 2005 Seite 110