2015-02-24 8 views
6

In 3D-Rendering (oder Geometrie für diese Angelegenheit), in der Rasterung Algorithmus, wenn Sie die Ecken eines Dreiecks auf den Bildschirm projizieren und dann zu finden, wenn ein Pixel das 2D-Dreieck überlappt, müssen Sie oft die Tiefe oder die z finden -Koordinate des Dreiecks, das das Pixel überlappt. Im Allgemeinen besteht das Verfahren darin, die baryzentrischen Koordinaten des Pixels in dem 2D- "projizierten" Bild des Dreiecks zu berechnen und dann diese Koordinaten zu verwenden, um die ursprünglichen z-Koordinaten der Dreiecksscheitelpunkte zu interpolieren (bevor die Scheitelpunkte projiziert wurden).Perspektive Projektion: Beweisen, dass 1/z linear ist?

Jetzt ist es in allen Text Bücher geschrieben, dass Sie die Eckpunkte nicht interpoliert werden können Koordinaten der Eckpunkte direkt, sondern dass Sie benötigen diese stattdessen tun:

(? Leider nicht Latex an die Arbeit)

1/z = W0 * 1/v0.z + w1 * 1/v1.z + w2 * 1/v2.z

Wo w0, w1, w2 und die baryzentrischen Koordinaten des "pixel" sind auf das Dreieck.

Nun, was ich nach dem suchen, sind zwei Dinge:

  • was den formalen Beweis wäre, zu zeigen, dass z Interpolation von nicht funktioniert?
  • Was wäre der formale Beweis um zu zeigen, dass 1/z das Richtige tut?

diese Arbeit nicht nach Hause zu zeigen, ist ;-) und ich habe einige Arbeit an meinem eigenen gemacht, habe ich die folgende Erklärung für Frage 2.

Im Grunde ein Dreieck durch eine Ebene gefunden definiert werden kann Gleichung. So können Sie schreiben:

Ax + By + Cz = D.

Dann isolieren Sie z z = zu erhalten (D - Ax - By)/C

Dann teilen Sie diese Formel von z als Sie würden mit einer Perspektive teilen und wenn Sie entwickeln, gruppieren, etc. erhalten Sie:

1/z = C/D + A/D x/z + B/D y/z.

Dann nennen wir C '= C/D B' = B/D und A '= A/D erhalten Sie:

1/z = A'x/z + B'y/z + C '

Es heißt, dass x/z und y/z sind nur die Koordinaten der Punkte auf den Dreiecken einmal auf dem Bildschirm projiziert und dass die Gleichung auf der rechten Seite ist eine "affine" Funktion daher 1/z ist eine lineare Funktion???

Das scheint mir keine Demonstration zu sein? Oder vielleicht ist es die richtige Idee, aber man kann nicht wirklich sagen, wie man das beurteilen kann, wenn man nur die Gleichung betrachtet, dass dies eine affine Funktion ist. Wenn Sie alle Bedingungen multiplizieren Sie gerade erhalten:

A'x + B'y + C'z = 1.

Was im Grunde nur unsere ursprünglichen Gleichungen (brauchen nur ein ‚B‘ und C zu ersetzen 'mit dem richtigen Begriff).

+0

Leider ist [LaTeX auf StackOverflow nicht aktiviert] (http://meta.stackexchange.com/questions/30559/latex-on-stack-overflow). –

+0

Betrachten Sie den Fall der Unterteilung Ihres Dreiecks. Beachten Sie, dass die Mitte des ursprünglichen Dreiecks nicht in die Mitte der projizierten Ecken des ursprünglichen Dreiecks projiziert wird. – Ben

Antwort

0

nicht sicher, was Sie versuchen, hier zu fragen, aber wenn man sich:

1/z = A'x/z + B'y/z + C' 

und schreiben Sie es als:

1/z = A'u + B'v + C' 

wo (u,v) sind Bildschirmkoordinaten des Dreiecks nach perspektivischen Projektion , können Sie sehen, dass die Tiefe (z) eines Punktes auf dem Dreieck nicht linear mit in Beziehung steht, aber 1/depth ist und das ist, was die Lehrbücher Ihnen zu lehren versuchen.