14.11.2012 Aufrufe

Projekt Micarpet Projektbericht - artecLab - Universität Bremen

Projekt Micarpet Projektbericht - artecLab - Universität Bremen

Projekt Micarpet Projektbericht - artecLab - Universität Bremen

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!