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

Aktuelle Zeit: Fr Jul 18, 2025 23:19

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Okt 19, 2006 18:45 
Offline
DGL Member

Registriert: Mo Jun 12, 2006 14:47
Beiträge: 75
Programmiersprache: Object FPC
Hallo,

Ich versuche seit einiger Zeit in meinem 3d Spiel unter meinen Player einen Schatten zu bekommen.

Ettliche Samples habe ich schon durchgesehen und nichts hat geklappt. Nun habe ich ein Sample von Sascha Williams gefunden.

( http://www.delphigl.de/files/shadowmap.zip

Das habe ich gleich gestartet undd as Lief auch ganz gut.

Mein Problem nur ist das ich ja Lauter Texturen in meinem Spiel habe.

Also habe ich versucht die grundplatte auf die Gerendert wird eine Texture zu legen.

Das Laden eines Bildes in das OpenGL ist ja kein Problem.

Saschas Code muste ich natürlich anpassen.

Das habe ich so gemacht.

Code:
  1.  
  2.   If pDrawFloor Then Begin
  3.     glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, @ColorGray);
  4.     glBindTexture(gl_texture_2d, tmp); // Binden der Graphik für den Boden
  5.     glBegin(GL_QUADS);
  6.     For i := -2 To 11 Do
  7.       For j := -2 To 11 Do Begin
  8.         glNormal3f(0, 1, 0);
  9.         glVertex3f(-5 + i, 0, -5 + j);
  10.         glVertex3f(-5 + i, 0, -5 + j + 1);
  11.         glVertex3f(-5 + i + 1, 0, -5 + j + 1);
  12.         glVertex3f(-5 + i + 1, 0, -5 + j);
  13.       End;
  14.     glEnd;
  15.   End;
  16.  


Was dann passierte war das vom schatten nun nichts mehr zu sehen ist. Dafür wird meine Texture mehr oder weniger 'Komisch' angezeigt je nach dem wie der Schatten eben fällt. ( Siehe Attechment )

Weis irgendjemand was ich Falsch gemacht habe ?

Weil der schatten mir natürlich überhaupt nichts Bringt wenn ich dafür meine Objekte ohne Texturen Rendern mus.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 19, 2006 19:17 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also ich habe mir gerade mal die Quellen angeschaut und Sascha hat dort automatische Texturkoordinatengenerierung eingeschaltet. Um die Schattentextur zu zeichnen. Wenn diese fertig gezeichet ist und wieder andere Sachen zeichnen möchtest musst du das natürlich deaktivieren.

Code:
  1. glDisable(GL_TEXTURE_GEN_S);
  2. glDisable(GL_TEXTURE_GEN_T);
  3. glDisable(GL_TEXTURE_GEN_R);
  4. glDisable(GL_TEXTURE_GEN_Q);


Wenn du mal schaust sieht es so aus als ob deine Bodentextur von der Lichtquelle ausgestralt wird. Also von der Verzerrung her gesehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 19, 2006 20:04 
Offline
DGL Member

Registriert: Mo Jun 12, 2006 14:47
Beiträge: 75
Programmiersprache: Object FPC
Hmm,

Sascha schaltet das schon wieder aus so ist das nicht.

ich habe nun versucht meine Textur wann anderst zu rendern.

Bzw mit den Disable sachen versucht rum zu spielen.

nichts hat geholfen.

Ich kann zwar nun die Texture Rendern, aber nur in einem total anderen Polygon. Und so das die Bodenfläche da ist und der Schatten auf der Texture das Kriege ich nicht hin.

Auserdem sieht es so aus wie wenn ich meine textur zwar schon Binden Kann aber die Trozdem so Komisch degreht Gezeichnet wird. Irgendwelche weiteren KAmera einstellungen mus man da wohl auch noch zurückdrehen, aber welche ?


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 20, 2006 08:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Das Andere was es auch sein könnte ist, dass dort irgendwann mal die Texturmatrix verändert wurde. Sonst wüsste ich so aus dem Kopf ohne Kaffee keine weitere Möglichkeit, wie man die Texturendarstellung beeinflussen kann (Shader etc ausgenommen aber das ist da nicht drinne). Aber ich habe nicht gesehen, dass Sascha die Matrix verändert und deswegen hatte ich das auch nicht erwähnt. Aber da die automatische Generierung anscheinend nicht funktioniert bleibt nicht viel übrig.

Code:
  1. glMatrixMode(GL_TEXTURE);
  2. glLoadIdentity;
  3.  
  4. glMatrixMode(GL_MODELVIEW);
  5.  
  6. // Plane Zeichnen


Wenn das auch nichts bringt musst du uns wohl mal deinen kompletten Code zur Verfügung stellen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 20, 2006 14:20 
Offline
DGL Member

Registriert: Mo Jun 12, 2006 14:47
Beiträge: 75
Programmiersprache: Object FPC
Also eigentlich dachte ich es sei Klar wie ich das Sample beeinflusst habe.

da das mit den Projectionen und so nu auch nicht ging habe ich es eich mal hochgeladen.

nicht wundern

Sascha hat das Sample wohl in d7 geschrieben und ich habe es runtergekürzt auf d5.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 20, 2006 15:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Zitat:
Also eigentlich dachte ich es sei Klar wie ich das Sample beeinflusst habe.

Ah. Dieser zusammenhang zwischen alle dem ist ziemlich wichtig. Und da ist jede kleinigkeit wichtig. Abgesehen davon muss man selber teilweise auch ein bisschen probieren bzw sich anschauen wie es sich in echt verhält.

Als Erstes. Ich weiß wo das Problem liegt. Allerdings als gut gemeinter Rat solltest du dich entweder eindringlichst mit dem Thema zu beschäftigen und dann nicht nur so larifari es geht sondern wirklich intensiv und auch mathematische Grundlagen. Oder du lässt die Schatten derzeit erst einmal Schatten sein. Es nützt ja nun mal nichts, wenn du etwas einbaust und nicht weißt wie es funktioniert. Also einfach nur den Code kopierst ohne ihn zu verstehen. Zur Beruhigung. Für mich ist das auch nicht einfach zu verstehen.

Aber hier mal die Lösung zu deinem Problem. Du musst mit Multitexting arbeiten. Oder im Multipassverfahren. Also erst Rendern und dann die Textur drüber blenden. Habe für meine Lösung Multitexturing benutzt. Auf der Textureinheit 0 benutzte ich die normale Texture und auf der 1 benutzte ich eine andere Textur. Für diese Textureinheit habe ich auch die Texturkoordinatengeneration deaktiviert. dann bind ich meine Textur an diese Einheit, aktiviere sie und weise meinen Vertexen eine Texturkoordinate zu. Damit sie wissen was sie mit der Textur anstellen sollen. Im Groben war es das eigentlich.

Es sollte auch eher so sein, dass die Ursprungstextur auf der Textureinheut 0 klebt und die Schattentextur auf der 1. Aber das habe ich mir gerade aus Zeitgrüngen, umbastelarbeit (Faulheit) und fehlendem Verständniss einmal gesparrt. Im späteren Spiel macht das mitunter wiederrum einen entscheidenen Unterschied.

Code:
  1.   If pDrawFloor Then Begin
  2.     // Textureinheit1 aktivieren und Texturkoodinatengeneration deaktivieren
  3.     glActiveTextureARB(GL_TEXTURE1_ARB);
  4.     glDisable(GL_TEXTURE_GEN_S);
  5.     glDisable(GL_TEXTURE_GEN_T);
  6.     glDisable(GL_TEXTURE_GEN_R);
  7.     glDisable(GL_TEXTURE_GEN_Q);
  8.  
  9.     glEnable(GL_TEXTURE_2D);
  10.     // LenaTex ist tmp. tmp ist nur ein doofer Nname
  11.     glBindTexture(gl_texture_2d, LenaTex);
  12.     glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, @ColorWhite);
  13.  
  14.     glBegin(GL_QUADS);
  15.       glNormal3f(0, 1, 0);
  16.  
  17.       // Vereinfachter Boden MIT texturkoordinaten für die 2te Einheit
  18.       glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0, 0);  glVertex3f(-5, 0, -5);
  19.       glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0, 1);  glVertex3f(-5, 0,  5);
  20.       glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1, 1);  glVertex3f( 5, 0,  5);
  21.       glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1, 0);  glVertex3f( 5, 0, -5);
  22. (*
  23.     For i := -2 To 11 Do
  24.       For j := -2 To 11 Do Begin
  25.         glNormal3f(0, 1, 0);
  26.         glVertex3f(-5 + i, 0, -5 + j);
  27.         glVertex3f(-5 + i, 0, -5 + j + 1);
  28.         glVertex3f(-5 + i + 1, 0, -5 + j + 1);
  29.         glVertex3f(-5 + i + 1, 0, -5 + j);
  30.       End;
  31. *)
  32.     glEnd; //}
  33.  
  34.     // Alte Textureinheit wieder aktivieren
  35.     glActiveTextureARB(GL_TEXTURE0_ARB);
  36.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 20, 2006 17:15 
Offline
DGL Member

Registriert: Mo Jun 12, 2006 14:47
Beiträge: 75
Programmiersprache: Object FPC
Danke

in der Zeile

Zitat:
Code:
  1. #
  2. // Textureinheit1 aktivieren und Texturkoodinatengeneration deaktivieren
  3.  
  4. glActiveTextureARB(GL_TEXTURE1_ARB);


gibts ne AV und das kommplette Programm ist weg.

Ja mein Problem bezüglich des Spieles ist so eins.

Ich habe eigentlich alles hinbekommen.

Nur das mit dem Schatten nicht.

Ich will eigentlich nur diesen etwas dunkleren Kreis unter meiner Kugel das der Player weis wo er sich befindet.

Und Leider stellt sich das als Größtes Problem der Welt dar.

Mittlerweile habe ich sogar eine Extra Routine die mir die Elemente Unter der Kugel einzeln Rendert. ( Dachte erst man brüchte das )

Hab es auch schon mit dem Projectionssample versucht. Aber nix kriege ich hin.

Und im Tutorials verstehn bin ich Wohl nicht so gut. Ich brauch da immer jemand der mir das Zu Fus erklärt. Nur kenne ich leider niemanden der das Kann, also Probiere ich sein nun über 10 Wochen an dem Gruscht rum und komme von einer AV zur nächsten.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 20, 2006 20:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also die AV kommt jetzt vom Header, weil die Methoden noch nicht geladen waren. Du musst nach dem Erstellen des Kontextes bzw nach wglMakeCurrent folgendes aufrufen.

Code:
  1. ReadExtensions;
  2. ReadImplementedProperties;


Wenn ich mich nicht verschrieben habe. Nur um vorzubeugen. Aber so ähnlich heißen die.


[edit] Um genau zu sein muss man eigentlich auch noch Abprüfen ob Multitexturing überhaupt unterstützt wird. Aber für den Echteinsatz solltest du sowieso unseren Header benutzen. Der ist wesentlich aktueller.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 21, 2006 20:44 
Offline
DGL Member

Registriert: Mo Jun 12, 2006 14:47
Beiträge: 75
Programmiersprache: Object FPC
Hmm das geht auch nicht.

Ich denke fast ich werde es aufgeben einen Scahtten in mein Spiel zu machen.

Das Verhältniss Aufwand / Nutzen stimmt schon seit langem nicht mehr.

Aber Trotzdem Danke für deine Hilfe.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 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.009s | 15 Queries | GZIP : On ]