02.11.2013 Aufrufe

Würfelsimulator

Würfelsimulator

Würfelsimulator

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

PDA-Programmieren • "<strong>Würfelsimulator</strong>" • SS10 • Simon Brennecke • Ivo Torp • Klaus Manneck<br />

Generierung der Drahtgittermodelle<br />

Die 3D-Modelle der Würfel (Meshes) werden zur Laufzeit generiert. Dies geschieht im Konstruktor<br />

der jeweiligen Dice-Klasse (z.B. Dice6 ). Dabei wird zunächst eine Liste der Eckpunkte erstellt.<br />

Vector3f[] vectors = new Vector3f[8];<br />

vectors[0] = new Vector3f(-0.5f, -0.5f, -0.5f);<br />

vectors[1] = new Vector3f(+0.5f, -0.5f, -0.5f);<br />

vectors[2] = new Vector3f(+0.5f, +0.5f, -0.5f);<br />

vectors[3] = new Vector3f(-0.5f, +0.5f, -0.5f);<br />

vectors[4] = new Vector3f(-0.5f, -0.5f, +0.5f);<br />

vectors[5] = new Vector3f(+0.5f, -0.5f, +0.5f);<br />

vectors[6] = new Vector3f(+0.5f, +0.5f, +0.5f);<br />

vectors[7] = new Vector3f(-0.5f, +0.5f, +0.5f);<br />

for (int i = 0; i < vectors.Length; i++)<br />

vectors[i].Normalize();<br />

Des Weiteren muss definiert werden, welche der Punkte zu einer Würfelseite gehören. Es wird pro<br />

Würfelart im Code festgelegt, wie viele Punkte eine Fläche bilden. Zu jedem Punkt einer jeden<br />

Fläche werden zusätzlich Texturkoordinaten hinzugefügt. Da (wie später noch erläutert) auf jeder<br />

Würfelseite eine eigene Textur mit jeweils einer Zahl verwendet wird, sind die Texturkoordinaten<br />

für jede Seite gleich.<br />

Für einen Dice6 sieht der Code, der die Eckpunkte, Flächen und Texturkoordinaten zusammenfasst,<br />

so aus:<br />

int[] vi = { 2, 3, 0, 1, 3, 2, 6, 7, 6, 2, 1, 5, 7, 4, 0, 3, 1, 0, 4, 5, 7, 6, 5, 4 };<br />

float[] tv = { 1.0f, 0.0f, 0.0f, 1.0f };<br />

float[] tu = { 1.0f, 1.0f, 0.0f, 0.0f };<br />

int i=0;<br />

for (int i = 0; i < 6; i++){<br />

Vertex3f[] vertices = new Vertex3f[4];<br />

for (int v = 0; v < vertices.Length; v++)<br />

vertices[v] = new Vertex3f(vectors[vi[n++]], tv[v % 4], tu[v % 4]);<br />

// … generate Surface with vertices …<br />

}<br />

Analog dazu wird es für die anderen Würfel gehandhabt. Dabei muss eine Fläche nicht zwingend<br />

aus 4 Ecken zusammengesetzt werden – so haben der Dice8 und der Dice20 nur 3-eckige Flächen,<br />

und der Dice12 hat sogar 5-eckige.<br />

Seite 13 / 37

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!