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

Aktuelle Zeit: Fr Jul 18, 2025 15:54

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Feb 15, 2006 11:59 
Offline
DGL Member

Registriert: Mi Feb 15, 2006 11:50
Beiträge: 4
Hi,

Diese Seite und auch dieses Forum hat mir in den letzten Tagen bei meinem kleinen Projekt sehr weitergeholfen.
Nun hab ich aber doch mal eine Frage auf die ich keine Antwort gefunden habe.
Da mein Projekt fast fertig ist will ich nun zum Schluss noch ein Beispiel für eine Lightmap einbauen. So weit so gut, nur wenn ich sie aktiviere wird die Ausleuchtung der ganzen Szene wesentlich verringert.
Meine Frage nun:
Ist das normal?
Und:
Was kann ich tun, das mir die normale Beleuchtung erhalten bleibt.

icewing.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Feb 15, 2006 12:51 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
icewing hat geschrieben:
Hi,

Diese Seite und auch dieses Forum hat mir in den letzten Tagen bei meinem kleinen Projekt sehr weitergeholfen.
Nun hab ich aber doch mal eine Frage auf die ich keine Antwort gefunden habe.
Da mein Projekt fast fertig ist will ich nun zum Schluss noch ein Beispiel für eine Lightmap einbauen. So weit so gut, nur wenn ich sie aktiviere wird die Ausleuchtung der ganzen Szene wesentlich verringert.
Meine Frage nun:
Ist das normal?
Und:
Was kann ich tun, das mir die normale Beleuchtung erhalten bleibt.

icewing.


Kannst du vielleicht den Quelltext zeigen wo die Lightmap mit der Szene verrechnet wird?
Zudem wäre ein Screenshot vielleicht auch nicht schlecht! ;-)

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 15, 2006 13:58 
Offline
DGL Member

Registriert: Mi Feb 15, 2006 11:50
Beiträge: 4
Der Code ist kein Problem. Er entspricht im wesentlichen dem Tuto von delphigl.de.

Code:
  1.  
  2. procedure TForm1.paintMultiTexture;
  3. var
  4.  px,py,pz : TGLFloat;
  5. begin
  6.   px := -3;
  7.   py := 3;
  8.   pz := -5;
  9.  
  10.   glMaterialfv(GL_FRONT, GL_AMBIENT,   @mat_fest[0]);
  11.   glMaterialfv(GL_FRONT, GL_Diffuse,   @mat_fest[0]);
  12.  
  13.   TSActive[0] := True;
  14.   TSActive[1] := True;
  15.  
  16.   glActiveTexture(GL_TEXTURE1);
  17.   // Lightmap (Texture stage 1)
  18.   glEnable(GL_TEXTURE_2D);
  19.   glBindTexture(GL_TEXTURE_2D,texture[5]);
  20.   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
  21.  
  22.    // Basetexture (texture stage 0)
  23.    glActiveTexture(GL_TEXTURE0);
  24.    glEnable(GL_TEXTURE_2D);
  25.    glBindTexture(GL_TEXTURE_2D,texture[4]); //Raser
  26.    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
  27.  
  28.  // Fläche
  29.   glBegin(GL_QUADS);
  30.     glMultiTexCoord2f(GL_TEXTURE0, 0, 0);
  31.     glMultiTexCoord2f(GL_TEXTURE1, 0, 0);
  32.     glMultiTexCoord2f(GL_TEXTURE2, 0, 0);
  33.       glVertex3f(px, py, pz);
  34.     glMultiTexCoord2f(GL_TEXTURE0, 0, 1);
  35.     glMultiTexCoord2f(GL_TEXTURE1, 0, 1);
  36.     glMultiTexCoord2f(GL_TEXTURE2, 0, 3);
  37.       glVertex3f(px, py + 3, pz);
  38.     glMultiTexCoord2f(GL_TEXTURE0, 1, 1);
  39.     glMultiTexCoord2f(GL_TEXTURE1, 1, 1);
  40.     glMultiTexCoord2f(GL_TEXTURE2, 3, 3);
  41.       glVertex3f(px + 3, py + 3, pz);
  42.     glMultiTexCoord2f(GL_TEXTURE0, 1, 0);
  43.     glMultiTexCoord2f(GL_TEXTURE1, 1, 0);
  44.     glMultiTexCoord2f(GL_TEXTURE2, 3, 0);
  45.       glVertex3f(px + 3, py, pz);
  46.   glEnd;
  47.   TSActive[0] := False;
  48.   TSActive[1] := False;
  49. end;
  50.  


Die Screeshots kann ich im Moment nirgends hin laden. Mit ist einfach nur dunkler als ohne (Der Lichkegel des Spots ist dann kaum noch Wahrnehmbar.)

Diese Procedure wird als letzte in Render aufgerufen.
Sie wird nicht mit in den Stencil zum Rendern geladen und kommt auch nach der abschaltung von gl_blend.

Ich hatte gehofft man muss nur einen Parameter ändern der so offensichtlich ist das noch nie jemand wirklich ein Problem damit hatte.

icewing


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 15, 2006 14:22 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 21, 2003 17:36
Beiträge: 141
Ich weiß nicht, ob ich dein Problem richtig verstehe -- ich versuchs mal.
Wenn ich das meine, was du meinst, ist es ein Verständnisproblem deinerseits. Jedenfalls wenn du davon ausgehst, dass beispielsweise ein Pointlight den Schatten auf einer Lightmap "wegmachen" kann. Denn wenn du Lightmaps benutzt, wird die Szene zwangsläufig dunkler (das Licht schwächer). Wenn das Licht jetzt mit der Textur + Lightmap verrechnet wird, wird es eben auch nur maximal so hell, wie es aussehen würde, wenn du (OpenGL-) Licht nicht benutzen würdest. Um das zu umgehen müsstest du tricksen, die Szenen mehrere male rendern und verschieden hin- und herblenden.

Ich hoffe, wir haben uns verstanden :P


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 15, 2006 14:38 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Mit Lightmap kann es nur dunkler werden aber man kann mittels GL_RGB_SCALE_ARB bei glTexEnvf die Helligkeit auf 2.0x oder 4.0 mal skalieren.
Das müßte ungefähr so funktionieren:
glTexEnvf(GL_COMBINE_ARB,RGB_SCALE_ARB,2.0)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 15, 2006 15:51 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
Zeichnest du den Rest deiner Szene vielleicht ohne Multitexturing und hast vergessen Texturing für die nicht bemötigten Textureinheiten zu deaktivieren? Mit etwas "Glück" wird dann ein dunkler "Bildpunkt" deiner Lightmaps über alle anderen Primitive projiziert.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 15, 2006 15:58 
Offline
DGL Member

Registriert: Mi Feb 15, 2006 11:50
Beiträge: 4
Das war nahe dran.

Als ich mit den Befehl glTexEnvf(GL_COMBINE_ARB,GL_RGB_SCALE_ARB,2.0); probiert habe bin ich darauf gekommen mal bei der Zeile
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
das GL_MODULATE durch GL_ADD zu ersetzen.
Das führte dazu das jetzt die Szene (die Gesamte Szene auch alle nicht LightMap-Flächen) überblendet sind, aber wenigstens kann ich jetzt was zum hin und her schalten machen.

Währe nur noch die Frage kann man den durch glTexEnvi erzielten Effekt der auf der LightMap richtig Sinn macht auch wieder abschalten damit er nicht im nächsten Ränderdurchgang auf den Rest der Szene wirkt?
Wenn ja wäre mein Problem gelöst, wenn nicht bau ich eine Umschaltmöglichkeit ein und lass es erst mal so.

schon mal danke für die Hilfe

EDIT
Den letzten Post vor meinem hab ich Übersehen.
Abschalten ist genau der Punkt (denke ich) ich weiß nur leider nicht wie.
/EDIT

icewing


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 15, 2006 17:01 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Entweder Texturing ausschalten mit glDisable(GL_TEXTURE_2D) oder mal bei glTexEnv gucken was der standardwert war und den wieder setzen. Ich glaub es war REPLACE, bin mir aber nicht sicher.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 15, 2006 19:06 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
Wie Flash schon geschrieben hat:

Genau so, wie du sie auch aktiviert hast ;)

Code:
  1.  
  2. glActiveTexture(GL_TEXTURE0+x);
  3. glDisable(GL_TEXTURE_2D);
  4.  


Vergiss aber nicht nach dem deaktivieren des Texturings auf den zusätzlichen Ebenen, die erste Ebene wieder zur aktiven zu machen, denn sonst wirken sich vielleicht deine Texturwechsel usw. auf die anderen Ebenen aus.
GL_REPLACE hilft dir bei diesem Fehler nicht weiter, denn es beseitigt die Ursache des Problems nicht.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


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 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.011s | 14 Queries | GZIP : On ]