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

Aktuelle Zeit: Fr Jul 18, 2025 21:06

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Apr 21, 2007 20:31 
Offline
DGL Member

Registriert: Sa Apr 21, 2007 19:09
Beiträge: 2
hallo,

ich hab mit einer höhenmap eine kugel erstellt. mit VBOs
das funktioniert auch wunderbar. das problem liegt jetzt bei der belecuhtung.
(objekt liegt auf 0.0,0.0,0.0)
die lichtquelle kommt von links
Code:
  1.     GLfloat light0pos[ 4 ]      = {-50.0f, 0.0f, 0.0f, 0.0f};
  2.     GLfloat light0ambient[ 4 ]  = {0.0f, 0.0f,  0.0f, 0.0f};
  3.     GLfloat light0diffuse[ 4 ]  = {0.5f, 0.5f,  0.5f, 0.5f};
  4.     GLfloat light0specular[ 4 ] = {1.0f, 1.0f,  1.0f, 1.0f};

alle anderen lichter sind aus.



Wenn ich die Normalenvektorn mit den gleichen Werte füttere wie die Vertex dann hab ich eine Kugel die richtig beleuchtet ist, jedoch keine Schattierungen.
Deshalb hab ich die Normalenvektoren mit Skalarprodukt der beiden Vektoren berechnet, die aus den 3eckpunkten des Vertex entstehen.

Code:
  1.  
  2. CNorm calcNormale(CVert v1, CVert v2, CVert v3){
  3.     CNorm v2v1, v2v3, kreuz;
  4.     double betrag;
  5.    
  6.     v2v1=CNorm();
  7.     v2v1.x = (v2.x-v1.x);
  8.     v2v1.y = (v2.y-v1.y);
  9.     v2v1.z = (v2.z-v1.z);
  10.     v2v3=CNorm();
  11.     v2v3.x = (v2.x-v3.x);
  12.     v2v3.y = (v2.y-v3.y);
  13.     v2v3.z = (v2.z-v3.z);
  14.      
  15.     kreuz.x  = v2v1.x - v2v3.x;
  16.     kreuz.y  = v2v1.y - v2v3.y;
  17.     kreuz.z  = v2v1.z - v2v3.z;
  18.     betrag  = ( GLfloat )sqrt( pow(kreuz.x, 2.0) + pow(kreuz.y, 2.0) +pow(kreuz.z, 2.0) );
  19.     kreuz.x /= betrag;
  20.     kreuz.y /= betrag;
  21.     kreuz.z /= betrag;
  22.    
  23.     return kreuz;
  24. }
  25.  
  26.  


Die schattierungen sind jetzt vorhanden, jedoch ist jetzt die Beleuchtung frontal, obwohl das lichts von links kommt.
und darin liegt mein problem.

Das licht kommt von links (siehe mond-sphere) aber meine erde "denkt" es käme von vorn. (auf der rückseite ist es auch dunkel)

für jedes viereck werden 6 punkte gezeichnet

P0/P3 ----P1
|.....\..........|
|.......\........|
|.........\......|
P4------ P5/P2


Code:
  1.  
  2. if(nTri==2)
  3.                         m_pNorms[nIndex-2] = m_pNorms[nIndex-1] = m_pNorms[nIndex] = calcNormale(m_pVertices[nIndex-1], m_pVertices[nIndex-0], m_pVertices[nIndex-2]);
  4.                     if(nTri==3)
  5.                         m_pNorms[nIndex] = calcNormale(m_pVertices[nIndex-2], m_pVertices[nIndex-1], m_pVertices[nIndex-0]);
  6.                     if(nTri==4)
  7.                         m_pNorms[nIndex] = m_pNorms[nIndex+1] = calcNormale(m_pVertices[nIndex-2], m_pVertices[nIndex-1], m_pVertices[nIndex-0]);
  8.                    
  9.                    
  10.  


______________________________

wenn ich die position hinter die kugel setz ist der schatten auf der rechten seite ... also sind es immer 90° abweischung.


ich hoff einer kennt das problem und hat eine lösung

danke im voraus

tggc


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 22, 2007 00:15 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Das Kreuzprodukt müsste in Deiner Schreibweise so lauten:

Code:
  1. kreuz.x:= v2v1.y * v2.v3.z  -  v2v1.z * v2.v3.y
  2. kreuz.y:= v2v1.z * v2.v3.x  -  v2v1.x * v2.v3.z
  3. kreuz.z:= v2v1.x * v2.v3.y  -  v2v1.y * v2.v3.x


Und davon den Einheitsvektor berechnen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 22, 2007 10:42 
Offline
DGL Member

Registriert: Sa Apr 21, 2007 19:09
Beiträge: 2
den ansatz hat ich auch schonmal da kam aber nichts raus. :oops:
nun stimmts aber.
Danke Dir


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]