News

Was ist BillardGL?

Regeln

Technik
Stossablauf
Aufbau
Physik
Kugeln
Tisch
Kamera

Download
Sprachen

FAQ

Impressum


de en

BillardGL © 2001 - 2008 by
T. Nopper, S. Disch, M. Welte

iguana

SourceForge Logo

Die Kugeln

Kugeldarstellung

Die hier verwendeten Kugeln waren ursprünglich genau wie die aus den Übungen bekannten aus einem in Höhen- und Breitengranden aufgeteilten Polygonmuster aufgebaut.

Inzwischen wurde die Geometrie der wurde überarbeitet und basiert jetzt nicht mehr auf dem Höhen/Breitengraden-Modell, sondern auf einem Isokaeder, einem Körper, der sich aus 20 gleichseitigen Dreiecken zusammensetzt. Diese 20 Dreiecke lassen sich recht einfach in mehrere kleinere Dreiecke unterteilen, die dann besser in Kugelform gebracht werden können. Das Ergebnis ist eine optisch bessere Kugeldarstellung mit weniger darzustellenden Dreiecken, was in einer höheren Geschwindigkeit resultiert.

Zusätzlich werden die Kugeln noch mit einer Textur belegt, um sie wirklich wie Billardkugeln aussehen zu lassen. Man kann sich die Abbildung des Texturbildes auf die Kugel wie im Bild unten vorstellen: Erst wird die Textur um die Kugel, dann auch oben und unten an die Kugel gelegt (wobei die Textur natürlich umso mehr gestaucht wird, je weiter sie sich vom "Äquator" der Kugel entfernt).

Die Schatten

Aufbau des Schattenkreises

Der Schattenkreis an sich ist ein relativ einfaches Objekt, das nur aus einer Handvoll Polygone besteht. Wichtig sind die beiden Kreise, von denen man nur den inneren auf dem Bild sieht (halbtransparent), der äußere ist vollständig transparent. Durch die Vermeidung einer harten Kante entsteht so der Eindruck eines weichen Schattens.

Transformation der Schattenkreises

Translatiert man den Schattenkreis immer genau unter die Kugel, so entsteht zwar schon ein recht guter Schatten-Eindruck, realistisch und vor allem dynamisch sieht das aber nicht aus. Daher wird der Schattenkreis je nach Position einer Lichtquelle (gelber Kreis) so transformiert, daß ein realistischerer Eindruck entsteht. Dazu wird der ursprüngliche Schattenkreis (Bild 1) erst in Abhängigkeit der Entfernung zur Lichtquelle in x-Richung skaliert (glScale) (Bild 2), dann so rotiert, daß der Schatten zur Lichtquelle "zeigt" (glRotate) (Bild3), und schließlich so translatiert, daß die Lichtquelle, der Mittelpunkt der Kugel und der Mittelpunkt des Schattenkreises auf einer Gerade liegen (glTranslate) (Bild 4)

Mehrere Schattenkreise übereinander

Durch glBlendFunc(GL_ZERO,GL_ONE_MINUS_SRC_ALPHA) läßt sich eine Substraktion der Farbwerte im Schattenbereich simulieren. Die halbtransparenten, in Volltransparenz übergehenden Schattenkreise überlagern sich dabei optisch gut, aber mathematisch nicht korrekt.

z-Buffer-Problem

Da die Schattenkreise natürlich bündig zu der Tischebene liegen sollten, muß man vor dem Zeichnen der Schattenkreise den z-Buffer abschalten, da dieser sonst sämtliche Schattenkreise weg"optimiert".

Das Rollen der Kugeln

Jedesmal, wenn die Kugel eine neue Position erhält, dreht sie sich so, als wäre sie dorthin gerollt. Hierzu wird eine Rotationsmatrix für die aktuelle Bewegung berechnet: Die Rotationsachse liegt in der xy-Ebene und rechtwinklig zu der Bewegungsrichtung, der Rotationswinkel (im Bogenmaß) errechnet sich aus der zurückzulegenden Strecke im Verhältnis zum Kugelradius. Die Kugeln merken sich jeweils ihre bisherige Rotationsmatrix und berechnen die neue durch linksseitiges Aufmultiplizieren der eben berechneten Rotationsmatrix mit der alten.