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

Aktuelle Zeit: Do Jul 10, 2025 13:24

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



Ein neues Thema erstellen Auf das Thema antworten  [ 24 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 17, 2009 14:46 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
ALso die Normalen werden schon normalisiert, das hab ich auch schon überprüft
Hier mal ein Screenshot mit Wireframe, normalen und in Rot das Licht

Klick


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 17, 2009 15:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Du hast mal geschrieben das sich die Beleuchtung ändert, wenn du die Kamera bewegst. Ist das immer noch der Fall? Du musst die Lichtposition immer setzen nachdem du die Kameramatrix (gluLookAt, etc.) gesetzt hast.

Edit: Die Normalen sehen halbwegs richtig aus.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 17, 2009 15:12 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Aaaaarg das wars ^^ Hab das Licht in der InitMethode meiner Szene gesetzt, und diese Init wird am Anfang halt aufgerufen. Danach startet der RenderProzess und meine Camera wird gesetzt... wenn ich danach noch die Lichtpos setze, dann sieht alles wunderbar aus ;)
Danke dir ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 17, 2009 15:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Jetzt vielleicht noch ein bissel PerPixel-Lighting einbauen. Dann sieht es nicht mehr so eckig aus :)

Edit: Schönere Textur kommt natürlich auch gut....Texturesynthesis

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 20, 2009 15:29 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
PerPixelLightning geht nur über Shader oder? Die kann mit der grottigen OnBoard Graka meines TPs nicht testen :/

die texturen seh ich mir aber mal an^^


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 20, 2009 15:33 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
PerPixelLightning geht nur über Shader oder?

Jap.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 17, 2009 13:18 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Ich muss hier nochmal nachfragen, alsoi die Normalen sahen ja ganz ok aus, tun sie auch immernoch. Allerdings, wenn ich zb die Map per Interpolation verändere, dann bleiben die Normalen wertetechnisch gleich, obwohl sich die Vektoren der Map ja erheblich verändern. Ich lasse nach der Interpolierung mit der Methode:
Code:
  1.  
  2.     public void recalculateNormal(int i, int j)
  3.     {
  4.        
  5.         gridData[i][j][NORMAL] = new Vector3f(0,0,0);      
  6.         if (((i+j) % 2 )==0)
  7.         {
  8.             gridData[i][j][NORMAL].AddVector(Vector3f.getNormal(gridData[i][j][VECTOR],
  9.                                                                 gridData[i-1][j-1][VECTOR],
  10.                                                                 gridData[i-1][j  ][VECTOR]));
  11.             gridData[i][j][NORMAL].AddVector(Vector3f.getNormal(gridData[i][j][VECTOR],
  12.                                                                 gridData[i-1][j  ][VECTOR],
  13.                                                                 gridData[i-1][j+1][VECTOR]));
  14.             gridData[i][j][NORMAL].AddVector(Vector3f.getNormal(gridData[i][j][VECTOR],
  15.                                                                 gridData[i-1][j+1][VECTOR],
  16.                                                                 gridData[i  ][j+1][VECTOR]));
  17.             gridData[i][j][NORMAL].AddVector(Vector3f.getNormal(gridData[i][j][VECTOR],
  18.                                                                 gridData[i-1][j+1][VECTOR],
  19.                                                                 gridData[i+1][j+1][VECTOR]));
  20.             gridData[i][j][NORMAL].AddVector(Vector3f.getNormal(gridData[i][j][VECTOR],
  21.                                                                 gridData[i+1][j+1][VECTOR],
  22.                                                                 gridData[i+1][j  ][VECTOR]));
  23.             gridData[i][j][NORMAL].AddVector(Vector3f.getNormal(gridData[i][j][VECTOR],
  24.                                                                 gridData[i+1][j  ][VECTOR],
  25.                                                                 gridData[i+1][j-1][VECTOR]));
  26.             gridData[i][j][NORMAL].AddVector(Vector3f.getNormal(gridData[i][j][VECTOR],
  27.                                                                 gridData[i+1][j-1][VECTOR],
  28.                                                                 gridData[i  ][j-1][VECTOR]));
  29.             gridData[i][j][NORMAL].AddVector(Vector3f.getNormal(gridData[i][j][VECTOR],
  30.                                                                 gridData[i  ][j-1][VECTOR],
  31.                                                                 gridData[i-1][j-1][VECTOR]));
  32.         }
  33.         else
  34.         {
  35.             gridData[i][j][NORMAL].AddVector(Vector3f.getNormal(gridData[i][j][VECTOR],
  36.                                                                 gridData[i-1][j  ][VECTOR],
  37.                                                                 gridData[i  ][j-1][VECTOR]));
  38.             gridData[i][j][NORMAL].AddVector(Vector3f.getNormal(gridData[i][j][VECTOR],
  39.                                                                 gridData[i  ][j-1][VECTOR],
  40.                                                                 gridData[i+1][j  ][VECTOR]));
  41.             gridData[i][j][NORMAL].AddVector(Vector3f.getNormal(gridData[i][j][VECTOR],
  42.                                                                 gridData[i+1][j  ][VECTOR],
  43.                                                                 gridData[i  ][j+1][VECTOR]));
  44.             gridData[i][j][NORMAL].AddVector(Vector3f.getNormal(gridData[i][j][VECTOR],
  45.                                                                 gridData[i  ][j+1][VECTOR],
  46.                                                                 gridData[i-1][j  ][VECTOR]));
  47.         gridData[i][j][NORMAL].ScaleVector(-1);
  48.         }
  49.         gridData[i][j][NORMAL].Normalize();    
  50.     }

Nochmal alles nachberechnen. Die Methode scheint ja zu stimmen, denn bei der Ausgangsberechnung sehen die Normalen gut aus. Aber je öfter ich interpoliere und je extremer die Map dadurch wird, desto deutlicher wird, dass sich die Normalen irgendwie falsch berechnen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 17, 2009 13:41 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Was genau interpolierst du da?

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 17, 2009 13:54 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Ich lasse meine Map ein wenig abrunden. Ich erzeuge die Felder mit sehr willkkürlichen Y Werten und runde sie danach ein paar mal ab, bis sie schön rund aussieht. Allerdings werden dabei irgendwie die Normalen falsch nachberechnet und die Map hat hässliche flecken, obwohl sie ja, wenn sie rund ist, auch sher weiche schatten haben müsste

Code:
  1.  
  2.     public void interpolate(float factor)
  3.     {
  4.         for (int i = 1; i < fieldCount; i++)
  5.         {
  6.             for (int j = 1; j < fieldCount; j++)
  7.             {
  8.                 gridData[i][j][0].y =  (gridData[i][j-1][0].y + gridData[i][j][0].y*factor +gridData[i][j+1][0].y)/3;
  9.                 gridData[i][j][0].y =  (gridData[i-1][j][0].y + gridData[i][j][0].y*factor +gridData[i+1][j][0].y)/3;
  10.             }
  11.         }
  12.         recalculateNormals();
  13.     }


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 24 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

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