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

Aktuelle Zeit: Sa Jul 26, 2025 09:34

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: So Mai 11, 2003 20:37 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Dez 30, 2002 15:48
Beiträge: 40
Wohnort: My OwnUniverse
Wieder mal wende ich mich in schwerster Not mit einem Lichtproblem an euch.

Diesmal habe ich zwar gerafft, wie Licht unter OGL funzt (:D), aber die Umsetzung ging nicht gut.
Ich habe knapp 3 Tage probiert und im Endeffekt ist eine Umsetzung von delphic's Lichttutorial
(bzw der Unit licht_spotstate) auf meine EasyGL Unit gelungen.

Wobei man allerdings nicht von gelungen reden kann :(. (Man sieht eine graue Fläche).

Wer Lust hat, sich mit meiner EasyGL auseinandersetzen will, und das Programm vn delphic kennt,
den möchte ich herzlichst bitten, mein Programm auseinanderzunehmen und mir sagen, wieso es nicht
aussieht wie bei delphic.

BIIITTTEEE!

_________________
Well a man's got to do what a man must do
But I'll never give my soul to you
No fallen angel's prophecy
Will ever take hold of the man you see.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 12, 2003 15:38 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Deine Beleuchtungsfunktionen könnten richtig sein.Allerdings wirst du deinen Boden nicht sehen, da du (wie viele das oft tun) weder auf deine Matrizen achtest, noch OpenGL das Frustum mitteilst...setz mal folgenden Code an den Anfang deiner Zeichenroutine :
<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre> glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(<span class='integer'>60</span>, egl_win.WndSizeX/egl_win.WndSizeY, <span class='integer'>0.1</span>, <span class='integer'>512</span>);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity;</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->

Jetzt befindest du dich zum einen auf jeden Fall in der richtigen Matrix, und hast auch endlich OpenGL die richtige Perspektive mitgeteilt, so daß deine Objekte auch sichtbar werden!Verändere ausserdem auch mal die Farbe, mit der du den Schirm löschst, da diese nämlich die selbe ist in der dein Quad dargestellt wird.

Außerdem solltest du unter OpenGL, wenn du Materialen verwendestm das Colortracking aktivieren damit die Materialeigenschaften deines Quads korrekt ausgewertet werden.Dies geschieht über glEnable(GL_COLOR_MATERIAL).


Das wars was mir direkt aufgefallen ist.Wenn du jetzt noch die Lichtparameter richtig setzen tust, sollte es eigentlich problemlos funzen...

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 13, 2003 14:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Dez 30, 2002 15:48
Beiträge: 40
Wohnort: My OwnUniverse
Wieso flackert jetzt mein Bildschirm:( ? Vielleicht kriege ich das ja auch allein hin.

Eine Frage:
Kann ich die gluPerspective auch ganz am Anfang in der Initroutine für OpenGL einbauen?

_________________
Well a man's got to do what a man must do
But I'll never give my soul to you
No fallen angel's prophecy
Will ever take hold of the man you see.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 13, 2003 14:50 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Zitat:
Eine Frage:
Kann ich die gluPerspective auch ganz am Anfang in der Initroutine für OpenGL einbauen?

Ja.Allerdings musst du dies dann auch bei jedem Auflösungswechsel bzw. beim Ändern der Fenstergröße tun, da die Perspektive ja vom Ration deines Renderkontextes abhängt.

P.S. : Bei mir flackert nix...

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 13, 2003 15:20 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Dez 30, 2002 15:48
Beiträge: 40
Wohnort: My OwnUniverse
Hast du die geänderte Version da?
Bei mir funzt nämlich (wie üblich) nix.

Wenn ja, dann schick mir die mal bitte an:

\[EMAIL=zwobotter@gmx.net\]zwobotter@gmx.net\[/EMAIL\]

_________________
Well a man's got to do what a man must do
But I'll never give my soul to you
No fallen angel's prophecy
Will ever take hold of the man you see.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 13, 2003 15:24 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ne, sry.Hab das Programm bereits gelöscht.Allerdings hab ich auch nix anderes gemacht, als oben geposteten Code an den Anfang der Draw-Prozedur zu setzen und die ClearColor auf Blau zu ändern.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 13, 2003 19:28 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Dez 30, 2002 15:48
Beiträge: 40
Wohnort: My OwnUniverse
Hmm.. Dann muss ich wohl noch mal rumexperimentieren

_________________
Well a man's got to do what a man must do
But I'll never give my soul to you
No fallen angel's prophecy
Will ever take hold of the man you see.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 13, 2003 19:50 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Dez 30, 2002 15:48
Beiträge: 40
Wohnort: My OwnUniverse
Tut mir leid, aber du kannst mir net verklickern das das nicht flackert und flimmert.

Bitte kuck dir das (modifizierte) Programm nochmal an. Bei mir flackert das im Fullscreen ohne Ende und Licht hab ich irgendwie immernoch net. :(

_________________
Well a man's got to do what a man must do
But I'll never give my soul to you
No fallen angel's prophecy
Will ever take hold of the man you see.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 13, 2003 19:56 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Hmm...also dein modifiziertes Programm funzt bei mir nur, wenn ich (wie man das auch machen sollte) den Farb- und Tiefenpuffer zu Beginn der Szene via glClear() lösche, ansonsten hab ich nur ein zerhacktes Bild.Aber dann flackerts weder im Vollbild- noch im Fenstermodus.

Und Beleuchtung hast du auch!Lass mal eglSwitchLight(True); weg, und du wirst sehen das dein Quad komplett anders (unbeleuchtet) erscheint.Dein Fehler liegt irgendwo bei der Positionierung oder Ausrichtung der Lichter.Vielleicht ists nur ein falscher Parameter.

P.S. : Wenn du was zum DL bereitstellst, dann achte bitte auch drauf das alles zum Kompilieren benötigte dabei ist!Bei deinem ZIP fehlen nämlich die glaux-Datein, und nicht jeder hat Lust sich diese erst herunterzuladen.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 13, 2003 20:12 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Dez 30, 2002 15:48
Beiträge: 40
Wohnort: My OwnUniverse
Sorry. Wusste ich net mit den Dateien. Aber man lernt ja nie aus :D

glClear? Hab ich das etwa tatsächlich vergessen? *hups* ;)

Ich werds mal versuchen.

Ich muss allerdings sagen, dass die Zeichenroutinen und die Lichtparameter alle komplett vom delphic Tutorial übernommen wurden.

_________________
Well a man's got to do what a man must do
But I'll never give my soul to you
No fallen angel's prophecy
Will ever take hold of the man you see.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 13, 2003 20:40 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Dez 30, 2002 15:48
Beiträge: 40
Wohnort: My OwnUniverse
Okay, ein bisschen Theorie!

Sagen wir mal, ich erstelle ein Licht an der Position 0.0/ 1.0/ -2.0 mit der Direction 0.0/ 0.0/ 1.0.
Und ein Quad wie folgt (Die Befehle sind EGL, also meine EasyGL Unit, aber trotzdem leicht zu verstehen):
<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre>
eglBeginQuad;
eglSetVertex(-<span class='integer'>1</span>, <span class='integer'>1</span>, <span class='integer'>0</span>);
eglSetVertex(-<span class='integer'>1</span>, -<span class='integer'>1</span>, <span class='integer'>0</span>);
eglSetVertex(<span class='integer'>1</span>, -<span class='integer'>1</span>, <span class='integer'>0</span>);
eglSetVertex(<span class='integer'>1</span>, <span class='integer'>1</span>, <span class='integer'>0</span>);
eglEnd;
</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->

Müsste dann nicht auf dieser Fläche das Licht erscheinen?
Das Licht hat übrigens folgende Werte:
<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre>
M.SetSpecular(<span class='integer'>1.0</span>, <span class='integer'>1.0</span>, <span class='integer'>1.0</span>, <span class='integer'>1.0</span>);
M.SetShine(<span class='integer'>50.0</span>);
M.SetAmbient(<span class='integer'>0.3</span>, <span class='integer'>0.3</span>, <span class='integer'>0.3</span>, <span class='integer'>1.0</span>);
M.SetDiffuse(<span class='integer'>0.3</span>, <span class='integer'>0.3</span>, <span class='integer'>0.3</span>, <span class='integer'>1.0</span>);

egl_Lights[<span class='integer'>0</span>].SetPosition(<span class='integer'>0.0</span>, <span class='integer'>1.0</span>, -<span class='integer'>2.0</span>, false);
egl_Lights[<span class='integer'>0</span>].SetAmbient(<span class='integer'>0.8</span>, <span class='integer'>0.0</span>, <span class='integer'>0.0</span>, <span class='integer'>1.0</span>);
egl_Lights[<span class='integer'>0</span>].SetDiffuse(<span class='integer'>0.8</span>, <span class='integer'>0.0</span>, <span class='integer'>0.0</span>, <span class='integer'>1.0</span>);
egl_Lights[<span class='integer'>0</span>].SetDirection(<span class='integer'>0.0</span>, <span class='integer'>0.0</span>, <span class='integer'>1.0</span>);
egl_Lights[<span class='integer'>0</span>].SetStreuwinkel(<span class='integer'>10.0</span>);
egl_Lights[<span class='integer'>0</span>].SetIntensity(<span class='integer'>50.0</span>);
</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->

Das Material:
[PAS][/PAS]

_________________
Well a man's got to do what a man must do
But I'll never give my soul to you
No fallen angel's prophecy
Will ever take hold of the man you see.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 13, 2003 20:41 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Dez 30, 2002 15:48
Beiträge: 40
Wohnort: My OwnUniverse
Okay, ein bisschen Theorie!

Sagen wir mal, ich erstelle ein Licht an der Position 0.0/ 1.0/ -2.0 mit der Direction 0.0/ 0.0/ 1.0.
Und ein Quad wie folgt (Die Befehle sind EGL, also meine EasyGL Unit, aber trotzdem leicht zu verstehen):
<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre>
eglBeginQuad;
eglSetVertex(-<span class='integer'>1</span>, <span class='integer'>1</span>, <span class='integer'>0</span>);
eglSetVertex(-<span class='integer'>1</span>, -<span class='integer'>1</span>, <span class='integer'>0</span>);
eglSetVertex(<span class='integer'>1</span>, -<span class='integer'>1</span>, <span class='integer'>0</span>);
eglSetVertex(<span class='integer'>1</span>, <span class='integer'>1</span>, <span class='integer'>0</span>);
eglEnd;
</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->

Müsste dann nicht auf dieser Fläche das Licht erscheinen?
Das Licht hat übrigens folgende Werte:
<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre>
M.SetSpecular(<span class='integer'>1.0</span>, <span class='integer'>1.0</span>, <span class='integer'>1.0</span>, <span class='integer'>1.0</span>);
M.SetShine(<span class='integer'>50.0</span>);
M.SetAmbient(<span class='integer'>0.3</span>, <span class='integer'>0.3</span>, <span class='integer'>0.3</span>, <span class='integer'>1.0</span>);
M.SetDiffuse(<span class='integer'>0.3</span>, <span class='integer'>0.3</span>, <span class='integer'>0.3</span>, <span class='integer'>1.0</span>);

egl_Lights[<span class='integer'>0</span>].SetPosition(<span class='integer'>0.0</span>, <span class='integer'>1.0</span>, -<span class='integer'>2.0</span>, false);
egl_Lights[<span class='integer'>0</span>].SetAmbient(<span class='integer'>0.8</span>, <span class='integer'>0.0</span>, <span class='integer'>0.0</span>, <span class='integer'>1.0</span>);
egl_Lights[<span class='integer'>0</span>].SetDiffuse(<span class='integer'>0.8</span>, <span class='integer'>0.0</span>, <span class='integer'>0.0</span>, <span class='integer'>1.0</span>);
egl_Lights[<span class='integer'>0</span>].SetDirection(<span class='integer'>0.0</span>, <span class='integer'>0.0</span>, <span class='integer'>1.0</span>);
egl_Lights[<span class='integer'>0</span>].SetStreuwinkel(<span class='integer'>10.0</span>);
egl_Lights[<span class='integer'>0</span>].SetIntensity(<span class='integer'>50.0</span>);
</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->

Das Material:
<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre>
M.SetSpecular(<span class='integer'>1.0</span>, <span class='integer'>1.0</span>, <span class='integer'>1.0</span>, <span class='integer'>1.0</span>);
M.SetShine(<span class='integer'>50.0</span>);
M.SetAmbient(<span class='integer'>0.3</span>, <span class='integer'>0.3</span>, <span class='integer'>0.3</span>, <span class='integer'>1.0</span>);
M.SetDiffuse(<span class='integer'>0.3</span>, <span class='integer'>0.3</span>, <span class='integer'>0.3</span>, <span class='integer'>1.0</span>);
</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->

_________________
Well a man's got to do what a man must do
But I'll never give my soul to you
No fallen angel's prophecy
Will ever take hold of the man you see.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.015s | 17 Queries | GZIP : On ]