Fehler beim Schattenwurf mit Stencil Buffer
-
Hi,
Kennt sich zufällig jemand mit dem NeHe-Tutorial zur Stencil-Buffer-Schatten-Erstellung aus?
Ich hätte damit nämlich folgendes Problem mit dem Setzen der Verbindungen zwischen 2 Dreiecken:
Wenn ich den unten stehenden Code auf ein komplexes Modell anwende, so werfen manche Dreiecke keinen Schatten, sondern die Schattenkante (die eigentlich nicht vorhanden sein dürfte) erscheint. Sobald ich SetConnectivity wieder deaktiviere, funktioniert der Schattenwurf wieder (allerdings mit den hässlichen Linien zwischen den Dreiecken). Folglich muss der Fehler irgendwo in folgendem Code vorhanden sein:
void setConnectivity() { Def3D p1i, p2i, p1j, p2j; int i1i, i2i, i1j, i2j; int i, j, ki, kj; Obj3D* o = getObject(); //jedes Dreieck wird mit jedem anderen Dreieck verglichen for (i = 0; i < o->getTriangleCount(); i++) { for (j = i + 1; j < o->getTriangleCount(); j++) { //für jedes Dreieck werden alle 3 Punkte betrachtet for (ki = 0; ki < 3; ki++) { //wenn sie bereits benachbart sind, wird mit dem nächsten Dreieck fortgefahren if (!(o->getTri(i)->neigh[ki] == j)) { for (kj = 0; kj < 3; kj++) { //die zu vergleichenden Punkte werden ermittelt i1i = ki; i1j = kj; i2i = (ki + 1) % 3; i2j = (kj + 1) % 3; p1i = o->getTri(i)->edges[i1i].coords; p2i = o->getTri(i)->edges[i2i].coords; p1j = o->getTri(j)->edges[i1j].coords; p2j = o->getTri(j)->edges[i2j].coords; //wenn die Punkte der beiden Dreiecke gleich sind, sind diese Nachbarn if (((p1i == p1j) && (p2i == p2j)) || ((p1i == p2j) && (p2i == p1j))) { o->getTri(i)->neigh[ki] = j + 1; o->getTri(j)->neigh[kj] = i + 1; } } } } } } }
Def3D ist eine Klasse mit Variablen x, y und z (und Vergleichsoperator), in o sind alle wichtigen Daten gespeichert, der Rest der Variablen dürfte selbsterklärend sein ...
Danke schon mal im Voraus
MfG
Thomas
-
Ergänzung:
Ich habe jetzt noch ein Weilchen damit herumexperimentiert und bin nun zu dem Schluss gekommen, dass das Setzen der Connectivity nur bei nicht geschlossenen Körpern bzw. bei Objekten mit inneren Dreiecken, die gemeinsame Kanten mit äußeren Dreiecken besitzen nicht funktioniert...
Äußerst merkwürdig ...