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

Aktuelle Zeit: Fr Jul 18, 2025 08:51

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



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Lightmapper Problem
BeitragVerfasst: Di Dez 23, 2003 18:30 
Offline
DGL Member

Registriert: Fr Jan 10, 2003 20:18
Beiträge: 88
Hi hab mal versucht ein Lightmapper zu programmieren, bin auch schon ziehmlich weit gekommen (finde ich), dafür dass ich nix copied and pasted
habe.Also will alles verstehen, sonst könnte ich ja einfach SOS Source klauen ;-)
Also hier ist mein Source:
Code:
  1.  
  2.  
  3. Procedure getLightColor(l:TLight;v,Nor:TglVertex3f;var color:TglVertex3f);
  4. var
  5.     distance,len,angle:GLfloat;
  6.     tmp:TglVertex3f;
  7. begin
  8.     if (glPointProduct(glSubtractVector(l.Pos,v), Nor) < 0.0) then
  9.         Nor := VectorNegativ(Nor);
  10.  
  11.     tmp:=glSubtractVector(l.pos,v);
  12.     len:=glVectorLength(tmp);
  13.     if len > l.density then exit;
  14.     distance:=(l.density-len)/l.density;
  15.     color.x:=color.x+Distance*l.color.x;
  16.     color.y:=color.y+Distance*l.color.y;
  17.     color.z:=color.z+Distance*l.color.z;
  18.     if color.x>1 then color.x:=1;
  19.     if color.y>1 then color.y:=1;
  20.     if color.z>1 then color.z:=1;
  21. end;
  22.  
  23. {$DEFINE SAVE_BITMAPS}
  24.  
  25. procedure CalculateLightmap(pol:TPolygon;num:Integer);
  26. var
  27.     i,x,y:Integer;
  28.     nor:TglVertex3f;
  29.     actualvertex:TglVertex3f;
  30.     actualcolor:TglVertex3f;
  31. begin
  32. ...
  33.     for x:=0 to LSIZE-1 do
  34.     for y:=0 to LSIZE-1 do
  35.     begin
  36.         actualcolor.x:=0;
  37.         actualcolor.y:=0;
  38.         actualcolor.z:=0;
  39.         for i:=0 to High(Lights) do
  40.         begin
  41.             actualvertex:=VectorInterpolate(
  42.                 VectorInterpolate(pol.face[0].v,pol.face[2].v,y/LSIZE),
  43.                 VectorInterpolate(pol.face[2].v,pol.face[1].v,y/LSIZE),x/LSIZE);
  44.             getLightColor(Lights[i],actualVertex,nor,actualcolor);
  45.         end;
  46.         Lightmaps[num].data[x,y].r:=Round(actualcolor.x*255);
  47.         Lightmaps[num].data[x,y].g:=Round(actualcolor.y*255);
  48.         Lightmaps[num].data[x,y].b:=Round(actualcolor.z*255);
  49.     end;
  50. ...
  51.  
  52.  


Aber es stimmt was nicht, denn das Bild sieht komisch aus.

Ich denkie,dass ich irgendwas an der Mathematik falsch gemacht habe. Hab schon rumprobiert aber ich komm nicht weiter.


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 24, 2003 11:21 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Hab mir deinen Quellcode ned genauer angesehen (mache sowas nicht gerne), aber mit nem Lightmapper hat das obige recht wenig zu tun. Bei nem Lightmapper musst du nämlich für jeden Texel der beleuchtet werden soll die Weltposition herausfinden, was mittels planarem Mapping recht "einfach" machbar ist. Die Methode die du da oben verwendest wird z.B. bei nem gebilde das nicht grade ein Würfel ist niemals funktionieren.
Schau dir also am besten meinen Lightmapper-Thread an, wo ich auch Links gepostet habe unter denen erklärt wird wie ein richtiger Lightmapper funktioniert. Obigen Code solltest du dann am besten schleunigst verwerfen, da du damit niemals einen universell nutzbaren Lightmapper wirst realisieren können.

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


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


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 10 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 | 17 Queries | GZIP : On ]