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

Aktuelle Zeit: Do Jul 10, 2025 15:56

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Fragment normale Berechnen
BeitragVerfasst: Fr Jan 05, 2007 06:30 
Offline
DGL Member
Benutzeravatar

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

ich möchte gern bei einem Triangle die normale für jedes Pixel/Fragment berechnen (von Hand, nicht via Shader Interpolation etc)..

Ich hab die 3 Eckpunkte und die Normal für jeden Eckpunkt.. wie kann ich da jetzt die Normal an dem Punkt (X, Y, Z) berechnen? (Der Punkt ist auf der fläche des Triangles)

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 05, 2007 10:13 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Was du suchst ist eine Baryzentrische Interpolation. Da kannst du dann parameter Berechnen mit denen du die 3 Normalen gewichtest.

Vielleicht kannst du mit dem Begriff was hilfreiches finden.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 05, 2007 17:36 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,

meine Idee wäre gewesen :

du wählst einen Eckpunkt des Dreiecks fest und bildest die Vektoren zu den anderen beiden Eckpunkten.
Deinen Punkt (X, Y, Z) stellst du dann als Linearkombination dieser beiden Vektoren dar.
Mit den berechneten Linearfaktoren interpolierst du schliesslich die Normalen...

Mathematisch ausgedrückt :
Die Eckpunkte deines Dreiecks : P1, P2, P3
Die zugehörigen Normalen : N1, N2, N3
Der Punkt auf dem Dreieck : Q
Normale zum Punkt Q : N

Wähle P1 fest
Berechne die Vektoren V1 = P2 - P1 und V2 = P3 - P1
Berechne a und b so dass Q = P1 + a*V1 + b*V2
Berechne die Normale zu dem Punkt Q : N = N1 + a*(N2-N1) + b*(N3-N1)

Viele Grüße
dj3htu1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 06, 2007 17:00 
Offline
DGL Member
Benutzeravatar

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

ich hab jetzt nen Algo gefunden welcher mir praktischerweise direkt die Barycentric Coordinates U und V liefert (brauch es für ne intersection), nur... ich kann damit nix anfangen :(

In der anleitung zu dem Algo steht leider auch nix weiter beschrieben, nur das es mit diesem U und V wert möglich ist die Normale etc zu interpolieren... aber, wie? :roll:

Aya~

PS: Der Algo:
http://www.cs.virginia.edu/~gfx/Courses ... ection.pdf


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 06, 2007 18:04 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
n[0]*u+n[1]*v+n[2]*(1-u-v)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 06, 2007 19:03 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
@LarsMiddendorf

oder umgestellt n[2]+u*(n[0]-n[2])+v*(n[1]-n[2]) ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 06, 2007 22:17 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Seit ihr euch sicher?
Er interpoliert die Normalen zwar irgnedwie, aber richtig sieht das nicht aus... :(

So hab ich's gemacht:
Code:
  1.   Result.Normal.X:=Triangle.Normal[0].X * u + Triangle.Normal[1].X * v + Triangle.Normal[2].X * (1 - u - v);
  2.   Result.Normal.Y:=Triangle.Normal[0].Y * u + Triangle.Normal[1].Y * v + Triangle.Normal[2].Y * (1 - u - v);
  3.   Result.Normal.Z:=Triangle.Normal[0].Z * u + Triangle.Normal[1].Z * v + Triangle.Normal[2].Z * (1 - u - v);


Aya~

Bild


EDIT: Hat sich erledigt, ich hab nur die Triangle.Normal[x]' vertauscht und dann war's richtig


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


Wer ist online?

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