Zitat von
supermuckl:
so ungefär stell ich mir das ganze auch vor.. aber ein echtes flat shading wäre das ja nicht, weil ich ja für eine linie 2 punkte habe, die ich einmal berechne und dann dazwischen alle werte als gradient darstelle
Naja, Flat-Shading kann man hier auf zweierlei Weise interpretieren:
1) Rein diffuse Beleuchtung
2) Nur diffus
und nur Vertex-basiert
Du hast 2) im Kopf
Beides firmiert
imho als "Flat-Shading". Als nächst höhere Form der Beleuchtung sieht man das sog. "Gourad-Shading" bei dem jeder Pixel separat beleuchtet wird, und zudem werden die Normalen an den Stellen so interpoliert dass der Eindruch einer "smoothen" Oberfläche entsteht.
Das Phong-Shading ist hiervon unabhängig eine Methode um Glanzpunkte (simulation einer direkt reflektierten Lichtquelle) zu erzeugen. Ich habe für meinen Raytracer 2 Varianten versucht. Zum einen die, die auch den reflektierten Vektor mit berücksichtigt, und zum anderen eine vereinfachte Form, welche ich am Ende beibehalten habe, da es sonst zu einer sehr unschönen Verschiebung des Glanzpunktes relativ zum hellsten Punkt der diffusen Beleuchtung kam. Diese Phong-Werte werden im Allgemeinen additiv zur diffusen Beleuchtung gepackt.
Zitat:
wenn ich dann die flächen per scanline rendering ausfüllen würde, müsste ich dann einfach nur die farbwerte der rand-linien (also die kanten des würfels) nehmen, und da dann gradienten "scannen" ?
Dann machst du es so wie alte Grafikkarten. Vertexbasiert. Hat allerdings einige unschöne Effekte - nämlich dass du dein Wireframe durch die Beleuchtungsmethode immer "durchscheinen" siehst, auch bei eigentlich ebenen Flächen. Ich würde es nicht via Gradientenbildung machen, sondern ganz einfach jeden Vektor der Oberfläche wirklich durch die Beleuchtung schicken. Dann können Highlights auch mitten auf einer Fläche entstehen, was vertexbasiert nicht geht.
Zitat:
beim flat shading wird nur der einfallswinkel gegen die flächen-normale via Skalarprodukt berechnet, und somit die helligkeit ermittelt. der austrittswinkel wird nicht gebraucht, da die fläche das licht streut ( diffuses licht )
Japp. Noch dazu findet keine Normaleninterpolation statt.
Zitat:
beim phong shading wird das genauso gemacht, blos kommt noch das diffuse licht der umgebung dazu (einfach eine konstante helligkeit dazugerechnet) + den glanz, der durch einfallswinkel UND austrittswinkel berechnet wird, der dann in richtung kamera liegt, wenn der pixel am hellsten glänzen würde.
Das ambiente Licht ist keine Eigenschaft von Phong. Das kannst du einfach dazu nehmen oder weglassen, ganz egal was für Beleuchtungsmodelle du noch nutzt. Und wie gesagt: Ich habe das mit dem Austrittswinkel sein gelassen. Es sieht in meiner einfacheren Fassung gut und recht richtig aus, wogegen die andere Variante z.T. nicht mehr ganz überzeugte. (Was aber durchaus auch an u.U. nicht ganz richtiger Implementierung gelegen haben konnte - das weiss ich nicht
)
Zitat:
ich hoffe ich kann dann die flächen, wenn ich jetzt mal keinen glanz will, mit scanlinerendering und meinen "schattierten wireframes" die würfelei beleuchten ?
Würde ich wie gesagt nicht machen. Aber halt! Was hast du eigentlich vor? Willst du realtime 3D mit zig FPS? Dann wäre mein Vorschlag jeden Punkt separat zu beleuchten u.U. nicht so schnell. Die Gradientenbildung ist nun aber auch nicht ganz ohne. Somit müsste man mal testen was schneller ist, bzw. was man der guten Beleuchtung an Speed opfert. Besser aussehen tut es NICHT mit Gradienten
.
Zitat:
normal zu meinem pseudocode, wie ich jetzt den shader bauen WÜRDE:
-> NormalVektoren der Kanten berechnen
-> Start und Endpunkt Vektoren der Kanten zur Lichtquelle berechnen
-> Flatshading für diese Punkte berechnen
-> Gradient zwischen diesen Punkten als Linie Zeichnen
-> Scanline Rendering, wenn alle Linien um eine Fläche gerendert sind ausführen, um die Flächen zu füllen (mit Start und Endwerten von den Linien-Gradient Colorwerten)
-> fertig
An sich kann man's so machen joa =)
Zitat:
Ich kann auch mal das Projekt wie es jetzt aussieht, anfügen falls noch Fragen sind
Auch ohne Fragen hätte ich Interesse dran
.
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel