Graphics Reference
In-Depth Information
derjenigen Facetten relevant, die die Facette j sehen kann. Zu ihrer Berechnung ist
nur ein einziger Hemi-Cube - oder eine Single-Plane - um die Facette j zu legen,
mit dem man dann alle k Formfaktoren berechnet. Diese nur zur Facette j gehören-
den Formfaktoren speichert man auf Vorrat, falls Facette j im weiteren Verlauf der
Iteration abermals etwas zu verteilen hat. Normalerweise ist dieser Programmteil in
der Iterationsschleife integriert (nicht im folgenden Code) [ 12 ].
Der Vektor {B} bekommt im Laufe der Iteration die umverteilte Radiosity. Die
Umverteilung selbst erfolgt über den Vektor B !f del B g , dessen Komponenten
nach und nach kleiner werden, bis die Umverteilung hinreichend genau erfolgt ist.
Beide Vektoren werden vorbesetzt mit jeweils der halben Emission {E m } , sodass
am Ende der Umverteilung diese auch nur einmal enthalten ist.
Jeder Iterationsschritt verteilt die Strahlung derjenigen Facette mit der größten
Reststrahlung f del B gf A g , das ist die Position „lfnr“ im Vektor. Der zugehörige
Umverteilungs„wert“ ist zugleich Schalter für den Abbruch der Iterationsschleife.
{A} ist die Facettenfläche. Die relativ schnelle Konvergenz des Algorithmus basiert
auf dieser Vorgehensweise, denn „unergiebige“ Strahlungen werden gar nicht erst
angefasst.
' Progressive-Refinement
' ----------------------
Dim Nung As Integer ' Ordnung Matrizen & Vektoren
Dim lfnr As Integer ' Ort der größten Strahlung
Dim Wert, delR As Single ' Strahlungswert und Verteiler
ReDim FF(Nung,Nung) As Single ' Formfaktoren [F]
ReDim B(Nung), delB(Nung), A(Nung) As Single
ReDim Em(Nung), rho(Nung) As Single
'
' initialisieren mit Emission {Em}
Fork=1ToNung
Wert = 0.5 * Em(k)
B(k) = Wert
delB(k) = Wert
Next
'
' Schleife bis Konvergenz
Do
Fork=1ToNung
'
' größten Wert suchen
Wert = 0.0
Forj=1ToNung
If delB(j) * A(j) > Wert Then
lfnr = j
Wert = delB(lfnr) * A(j)
End If
Next j
Wert = delB(lfnr)
'
' verteilen auf alle Facetten
Search WWH ::




Custom Search