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

Aktuelle Zeit: Fr Jul 18, 2025 21:12

Foren-Übersicht » Programmierung » Mathematik-Forum
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Matrix auf Normal anwenden..?
BeitragVerfasst: So Jun 12, 2005 13:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ich hab ein problem mit bei der berechnung ob dir Normal eines Faces in richtung licht zeigt oder nicht...

berechnen tue ich das ganze hiermit:
Code:
  1. if PointProduct(FaceNormal, SubtractVector(LightPosition, FacePosition)) > 0 then
  2.   Zeight richtung licht!


Funktioniert soweit auch wunderbar, das problem ist nur.. wenn ich das Face jetzt Rotiere, dann müßte ich die FaceNormal ja mitrotieren... OpenGL intern macht das ja, nur.. wie???

Ich hab versucht einfach die ModelMatrix mit der FaceNormal zu multiplizieren, aber hat nicht so ganz hingehauen....

Mit der Formel hier wende ich die Matrix auf die Normal und die Position an... (Bei der FacePosition funktioniert es)
Code:
  1.     X:=Matrix[mX,mX] * pX + Matrix[mY,mX] * pY + Matrix[mZ,mX] * pZ + Matrix[mW,mX];
  2.     Y:=Matrix[mX,mY] * pX + Matrix[mY,mY] * pY + Matrix[mZ,mY] * pZ + Matrix[mW,mY];
  3.     Z:=Matrix[mX,mZ] * pX + Matrix[mY,mZ] * pY + Matrix[mZ,mZ] * pZ + Matrix[mW,mZ];


Wie mache ich das ganze bei der Normal...??

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 12, 2005 19:42 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Indem du nur mit dem Rotationsteil der Matrix multiplizierst, also dürfte das bei dir so gehen:

X:=Matrix[mX,mX] * pX + Matrix[mY,mX] * pY + Matrix[mZ,mX] * pZ;
Y:=Matrix[mX,mY] * pX + Matrix[mY,mY] * pY + Matrix[mZ,mY] * pZ;
Z:=Matrix[mX,mZ] * pX + Matrix[mY,mZ] * pY + Matrix[mZ,mZ] * pZ;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 12, 2005 19:48 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Nicht ganz. Man muß die Matrix zuerst invertieren und dann transponieren(Zeilen&Spalten vertauschen) und dann mit dem oberen 3x3 Abschnitt multiplizieren.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 12, 2005 23:01 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Ich geb dir recht das OGL das so macht, jedoch ist das invertieren und transponieren nicht notwendig, wenn der Rotationsteil der Matrix orthogonal ist. In diesem Fall gilt nämlich:
Invertiert( M ) = Transponiert( M )
bzw. auch
Transponiert( Invertiert( M ) ) = M
Erst wenn du die Matrix scalierst, oder andere komischen Sachen damit aufführst hat das Auswirkungen. Da jedoch diese Auswirkungen wie beispielsweise RESCALE_NORMAL auch erst zum tragen kommen wenn OGL die Modelview Matrix besitzt dürfte es selbst da wenig helfen es in dieser Art zu machen. Wobei soo gut kenn ich mich in diesem Bereich dann auch wieder nicht aus, also wenn du wirklich komische Sachen vor hast, dann solltest du vielleicht doch LarsMiddendorf's Methode auch mal versuchen :-).


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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