Hallo Forum,
ich habe mein erstes Lazarus-Programm unter Einbindung von OpenGL geschrieben.
Ich habe ein Haus in 3D konstruiert.
Was mich wundert ist, dass mit verschiedenen Drehwinkeln nicht immer alles angezeigt wird.
Was habe ich falsch gemacht?
Gruß heizkoerper
OpenGL
-
- Beiträge: 24
- Registriert: Mo 1. Aug 2011, 14:39
- OS, Lazarus, FPC: Windows XP und 7, L 0.9.31, FPC 2.4.4
- CPU-Target: 32 und 64 Bit
- Wohnort: Hannover
- Kontaktdaten:
OpenGL
- Dateianhänge
-
- Haus3D.zip
- (260.76 KiB) 116-mal heruntergeladen
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: OpenGL
Es gibt eine Technik die heißt "Backface Culling".
Man kann auf ein Viereck immer von 2 Positionen schauen, von vorne und von hinten. Und um GPU power zu sparen wird nur die version von vorne gerendert, wenn du von hinten auf das viereck schaust (was man eigentlich nie macht da eine Wand eigt immer aus 2 Vierecken besteht) rendert die GPU das viereck einfach nicht.
Beispiel, eine Hauswand besteht aus 2 Vierecken, eins mit der Außenmauer, eins mit der Tapete. Jetzt steht man entweder außerhalb vom Haus, oder im Haus, aber nie zwischen den zwei Teilen einer Wand...
Im grunde geht es darum in welcher Reihenfolge du die 3 Koordinaten für dein Dreieck (oder halt Viereck) eingibst. Achte darauf das die Koordinate gegen den Uhrzeigersind eingegeben werden. Oder wenn du "unsauber" arbeiten willst dann schalte das Feature einfach ab, DGL-wiki sollte was dazu sagen...
Man kann auf ein Viereck immer von 2 Positionen schauen, von vorne und von hinten. Und um GPU power zu sparen wird nur die version von vorne gerendert, wenn du von hinten auf das viereck schaust (was man eigentlich nie macht da eine Wand eigt immer aus 2 Vierecken besteht) rendert die GPU das viereck einfach nicht.
Beispiel, eine Hauswand besteht aus 2 Vierecken, eins mit der Außenmauer, eins mit der Tapete. Jetzt steht man entweder außerhalb vom Haus, oder im Haus, aber nie zwischen den zwei Teilen einer Wand...
Im grunde geht es darum in welcher Reihenfolge du die 3 Koordinaten für dein Dreieck (oder halt Viereck) eingibst. Achte darauf das die Koordinate gegen den Uhrzeigersind eingegeben werden. Oder wenn du "unsauber" arbeiten willst dann schalte das Feature einfach ab, DGL-wiki sollte was dazu sagen...
Code: Alles auswählen
Signatur := nil;
-
- Beiträge: 24
- Registriert: Mo 1. Aug 2011, 14:39
- OS, Lazarus, FPC: Windows XP und 7, L 0.9.31, FPC 2.4.4
- CPU-Target: 32 und 64 Bit
- Wohnort: Hannover
- Kontaktdaten:
Re: OpenGL
Hallo,
vielen Dank für den Tip.
Jetzt funktioniert alles so, wie ich es mir gewünscht habe.
Gruß heizkoerper
vielen Dank für den Tip.
Jetzt funktioniert alles so, wie ich es mir gewünscht habe.
Gruß heizkoerper