Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mär 28, 2024 10:13

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Di Okt 20, 2015 09:35 
Offline
DGL Member

Registriert: Mo Okt 19, 2015 12:18
Beiträge: 2
Programmiersprache: C
Hallo :)

ich habe angefangen mich mit OpenGL 3 zu beschäftigen, weil ich gehört habe, dass da Mathe nicht so anspruchsvoll ist, wie in neueren Versionen.
1. glClear verwende ich beim jeden Neuzeichnen/rendern eines Frames.
Sollte ich das immer bei jedem Frame verwenden? Auch bei Animationen?
Werden dann sowohl bei normalem Frames als auch bei Animationen die Objekte in der falschen Rheinfolge angezeigt, wenn es darum geht, wer im Vordergrund ist.
Z.b Brille, Gesicht. So wird dann die Brille hinter dem Gesicht? sowohl bei einem normalen Bild als auch bei der Animation? oder was wird da passieren?

2. glClearDepth legt den Wert fest, mit dem de Z-Wert geleert wird. Wenn ich den Wert auf 0 setze, verschwindet mein Objekt.
Bedeutet das, dass der aktueller Z-Wert =0 kleiner ist als der Z-Wert von der HIntergrundfarbe und so ist mein Objekt dann "hinter" dem Hintergrund?
Oder wieso verschwindet er?
Ich kann auch manchmal diesen Aufruf weglassen. Wann ist er unerlässlich? Ich denke mir, dass wenn ich die Transparenz haben möchte, dann muss ich zwar den
prozentuallen Anteil der Transparenz berechnen, aber glClearDepth muss ich ausführen lassen, damit überhaupt geprüft werden kann, welcher Pixel wen verdeckt.
Ist meine Theorie richtig?

Danke für die Antworten.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Okt 20, 2015 16:13 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2067
Programmiersprache: C++
glClear löscht den aktuellen Buffer und setzt in auf die passende Farbe.
Somit ist dein Bild z.B. Schwarz. Wenn du alles inklusive Hintergrund zeichnest, kannst du darauf verzichten.
Er ist aber auch nicht teuer.

Der Z-Wert ist für die Tiefentests wichtig. Bei jedem Objekt schaut OpenGL ob es überhaupt sichtbar ist. Du kannst somit zu ferne Objekte ausblenden. Beachte bitte, dass eigene Tests schneller sind, da diese sich auf das gesamte Objekt beziehen.
Den Tiefenbuffer willst du eigentlich immer zurücksetzen da ansonsten Objekte im Hintergrund nicht gezeichnet werden. Dies ist z.B. bei Blending wichtig!

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Okt 22, 2015 14:50 
Offline
DGL Member

Registriert: Mo Okt 19, 2015 12:18
Beiträge: 2
Programmiersprache: C
Jetzt bin ich etwas verwirrt :)

Z.b:
Zwei Objekte A und B + Hintergrundbild sind "nah" an der Kamera. Das bedeutet sie liegen zwischen 0 und 1.
Jetzt möchte ich, dass A vor dem B zu sehen ist, und B vor dem Hintergrundbild.
Ich dachte, ich steuere das mit dem Z-Wert jedes einzelnen Pixels.
Obwohl ich jetzt nicht wüsste, wie ich das im Code ausdrücken kann.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Okt 22, 2015 16:47 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Vielleicht lösen dir diese beiden Funktionen dein Problem.
Code:
  1. glEnable(GL_DEPTH_TEST)
  2. glDepthFunc(GL_LESS);


Diese wären im Wiki beschrieben.

Hast du ein Programm als Muster bei dem alles richtig läuft, oder baust du von Grund aus ein Programm ?


Zitat:
ich habe angefangen mich mit OpenGL 3 zu beschäftigen, weil ich gehört habe, dass da Mathe nicht so anspruchsvoll ist, wie in neueren Versionen.

Bei dem alten OpenGL < 3, braucht du weniger Mathe wissen.
Aber sobald du dich mit Shader, etc auseinander setzt, wirst du mit Mathe konfrontiert.
Bei den alten Versionen konntest du nur glRotate schreiben, und musstest nicht wissen was ein Matrix ist.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Okt 22, 2015 17:35 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2067
Programmiersprache: C++
Drangler hat geschrieben:
Z.b:
Zwei Objekte A und B + Hintergrundbild sind "nah" an der Kamera. Das bedeutet sie liegen zwischen 0 und 1.
...

In was für Koordinaten redest du?
Im allgemeinen positionierst du deine Objekte in Weltkoordinaten, also A auf (0, 1, 2) und B auf (2, 3, 5). Jetzt ist natürlich noch keine Aussage über die Kamera getroffen. Diese hat eine Position im Raum und eine Blickrichtung. Erst damit wird definiert was vorne und was hinten ist.
So hast du zwei Matrizen: Eine um Objektkoordinaten in Weltkoordinaten umzuwandeln und eine um aus Weltkoordinaten Bildpunkte (=Pixel) zu erzeugen.
Die Matrix welcher du OpenGL gibst, ist ein Produkt dieser beiden Matrizen.
Schau dir mal das (Mathe)-Tutorial an:
Tutorial_Nachsitzen
Bei der Definition der Kameramatrix gibst du dann auch an was die naheste Distanz und die größte Distanz sein kann die du noch angezeigt bekommst. Und den Wert der größten Distanz nimmst du als ClearDepth.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 21 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.476s | 17 Queries | GZIP : On ]