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

Aktuelle Zeit: Di Jul 15, 2025 07:46

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



Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: Das Licht mag mich nicht :(
BeitragVerfasst: Fr Okt 10, 2003 12:41 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Tach,

ich kämpf momentan mit nem problem, mit dem ich momentan nicht weiter komme :(

Ich habs nun Geschafft Diffuses Bumpmapping + Stencilschatten-Volumen in meine Engine zu integrieren.
Nur unter einbüsung das meine Lichtintensität danach echt merkwürdig aussieht :(

Siehe folgenden shot:

Bild
Bild

wenn ich das bumpmapping von anfang deaktiviere dann ist es richtig:

Bild

Nachdem der Bumppass einmal durchgelaufen ist, dann stimmt die lichtintensität nicht mehr, siehe 2 shots oben.
Wenn dieser aber niemals durchläuft, dann ist das licht korrekt.

Ihr könnte das gern mal testen, ich hab default mässig alles deaktiviert.
Hier das testprog:

http://www.xenorate.com/final/buggylight_template.zip

Der Code pro Licht hier:

Code:
  1.  
  2. procedure SetTextureStageRGB(param1, op, param2 : Integer);
  3. begin
  4.   glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_COMBINE_ARB);
  5.   glTexEnvi(GL_TEXTURE_ENV,GL_COMBINE_RGB_ARB,op);
  6.  
  7.   glTexEnvi(GL_TEXTURE_ENV,GL_SOURCE0_RGB_ARB,param1);
  8.   glTexEnvi(GL_TEXTURE_ENV,GL_OPERAND0_RGB_ARB,GL_SRC_COLOR);
  9.  
  10.   glTexEnvi(GL_TEXTURE_ENV,GL_SOURCE1_RGB_ARB,param2);
  11.   glTexEnvi(GL_TEXTURE_ENV,GL_OPERAND1_RGB_ARB,GL_SRC_COLOR);
  12.  
  13.   glTexEnvi(GL_TEXTURE_ENV,GL_RGB_SCALE_ARB,1);
  14. end;
  15.  
  16. procedure SetTextureStageAlpha(param1, op, param2 : Integer);
  17. begin
  18.   glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_COMBINE_ARB);
  19.   glTexEnvi(GL_TEXTURE_ENV,GL_COMBINE_ALPHA_ARB,op);
  20.  
  21.   glTexEnvi(GL_TEXTURE_ENV,GL_SOURCE0_ALPHA_ARB,param1);
  22.   glTexEnvi(GL_TEXTURE_ENV,GL_OPERAND0_ALPHA_ARB,GL_SRC_ALPHA);
  23.  
  24.   glTexEnvi(GL_TEXTURE_ENV,GL_SOURCE1_ALPHA_ARB,param2);
  25.   glTexEnvi(GL_TEXTURE_ENV,GL_OPERAND1_ALPHA_ARB,GL_SRC_ALPHA);
  26.  
  27.   glTexEnvi(GL_TEXTURE_ENV,GL_ALPHA_SCALE,1);
  28. end;
  29.  
  30. procedure ResetTextureStage(mode : Integer);
  31. begin
  32.   glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,mode);
  33.   glTexEnvi(GL_TEXTURE_ENV,GL_RGB_SCALE_ARB,1);
  34.   glTexEnvi(GL_TEXTURE_ENV,GL_ALPHA_SCALE,1);
  35. end;
  36.  
  37. procedure TR3DLight.beginLightIntensity;
  38. begin
  39.   // Nur Alpha Kanal nehmen
  40.   glColorMask(False,False,False,True);
  41.  
  42.   // Alpha Kanal überschreiben
  43.   glBlendFunc(GL_ONE, GL_ZERO);
  44.   glDisable(GL_BLEND);
  45.  
  46.   // 2D Attenuation map
  47.   gTextureAtt2D.BindMultiTexture(0);
  48.   SetTextureStageAlpha(GL_PRIMARY_COLOR_ARB,GL_SUBTRACT,GL_TEXTURE);
  49.  
  50.   // 1D Attenuation map
  51.   gTextureAtt1D.BindMultiTexture(1);
  52.   SetTextureStageAlpha(GL_PREVIOUS_ARB,GL_SUBTRACT,GL_TEXTURE);
  53. end;
  54.  
  55. procedure TR3DLight.processLightIntensityVertex(const _Vertex : TR3DVector);
  56. var
  57.   texCoords   : TR3DVector;
  58.   versuborig  : TR3DVector;
  59. begin
  60.   // Texture Koordinaten berechnen für Lightmap
  61.   versuborig := r3d_VectorSub(_Vertex, Position);
  62.   texCoords := r3d_VectorDiv(versuborig, Radius * 2.0);
  63.   texCoords.Add(0.5);
  64.  
  65.   glMultiTexCoord2fARB(GL_TEXTURE0_ARB, texCoords.x, texCoords.y);
  66.   glMultiTexCoord1fARB(GL_TEXTURE1_ARB, texCoords.z);
  67.   glVertex3fv(@_Vertex);
  68. end;
  69.  
  70. procedure TR3DLight.endLightIntensity;
  71. begin
  72.   // 1D Attenuation map
  73.   glActiveTextureARB(GL_TEXTURE1_ARB);
  74.   glDisable(GL_TEXTURE_1D);
  75.   ResetTextureStage(GL_MODULATE);
  76.  
  77.   // 2D Attenuation map
  78.   glActiveTextureARB(GL_TEXTURE0_ARB);
  79.   ResetTextureStage(GL_MODULATE);
  80.  
  81.   // Nur Alpha aus
  82.   glColorMask(True,True,True,True);
  83. end;
  84.  
  85. procedure TR3DLight.beginDiffuseBumpmapping;
  86. begin
  87.   // Nur Alpha Kanal nehmen
  88.   glColorMask(False,False,False,True);
  89.  
  90.   // Alpha Kanal überschreiben
  91.   glBlendFunc(GL_SRC_ALPHA, GL_ZERO);
  92.   glEnable(GL_BLEND);
  93.  
  94.   // Normalization Cubemap
  95.   gNormalizationCubemap.BindMultiTexture(1);
  96.   SetTextureStageRGB(GL_PREVIOUS_ARB,GL_DOT3_RGBA,GL_TEXTURE);
  97.  
  98.   // Bumpmap
  99.   glActiveTextureARB(GL_TEXTURE0_ARB);
  100.   glEnable(GL_TEXTURE_2D);
  101.   SetTextureStageRGB(GL_TEXTURE,GL_REPLACE,GL_TEXTURE);
  102. end;
  103.  
  104. procedure TR3DLight.processDiffuseBumpmappingVertex(const _Vertex : TR3DVector; const _BumpCoord : TR3DTexcoord; const _Light : TR3DVector);
  105. begin
  106.   glMultiTexCoord2fvARB(GL_TEXTURE0_ARB, @_BumpCoord);
  107.   glMultiTexCoord3fvARB(GL_TEXTURE1_ARB, @_Light);
  108.   glVertex3fv(@_Vertex);
  109. end;
  110.  
  111. procedure TR3DLight.endDiffuseBumpmapping;
  112. begin
  113.   // Normalization Cubemap
  114.   glActiveTextureARB(GL_TEXTURE1_ARB);
  115.   glDisable(GL_TEXTURE_CUBE_MAP_EXT);
  116.   ResetTextureStage(GL_MODULATE); // Modulate muss rein, ansonsten gehen Farben nicht mehr :(
  117.  
  118.   // Bumpmap
  119.   glActiveTextureARB(GL_TEXTURE0_ARB);
  120.   ResetTextureStage(GL_MODULATE); // Modulate muss rein, ansonsten gehen Farben nicht mehr :(
  121.  
  122.   // Nur Alpha aus
  123.   glColorMask(True,True,True,True);
  124. end;
  125.  
  126. procedure TR3DLight.beginDiffuse;
  127. begin
  128.   glBlendFunc(GL_DST_ALPHA, GL_ONE);
  129.   glEnable(GL_BLEND);
  130.  
  131.   // Keine Texture
  132.   glActiveTextureARB(GL_TEXTURE1_ARB);
  133.   glDisable(GL_TEXTURE_2D);
  134.   glDisable(GL_TEXTURE_CUBE_MAP_EXT);
  135.  
  136.   // Decal Texture
  137.   glActiveTextureARB(GL_TEXTURE0_ARB);
  138.   glEnable(GL_TEXTURE_2D);
  139.  
  140.   // Licht Farbe
  141.   glColor3ubv(@Color);
  142. end;
  143.  
  144. procedure TR3DLight.processDiffuseVertex(const _Vertex : TR3DVector; const _Texcoord : TR3DTexcoord);
  145. begin
  146.   glMultiTexCoord2fvARB(GL_TEXTURE0_ARB, @_Texcoord);
  147.   glVertex3fv(@_Vertex);
  148. end;
  149.  
  150. procedure TR3DLight.endDiffuse;
  151. begin
  152.   glActiveTextureARB(GL_TEXTURE0_ARB);
  153.   glColor3ub(255,255,255);
  154. end;
  155.  


kurze erklärung dazu:

- BindMultiTexture macht nichts weiter als die Texture zu binden und ein glActiveTextureARB(GL_TEXTURE0_ARB+Index).

- Die Attenuation 1D -und 2D texture wird mit GL_RGBA8 - GL_RGBA eingelesen. TexWrapS und R sind beide GL_CLAMP_TO_EDGE

- Die normalization cubemap wird auch mit GL_RGBA8 - GL_RGBA eingelesen mit TexWrapS, T, R = GL_CLAMP_TO_EDGE


danke schonmal fürs lesen,
matane,
Final


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


Wer ist online?

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