T
hi
tja, den klausurenstress kenn ich auch. Deswegen misch ich mich auch erst jetz ein.
Ich hab bei meinem derzeitigen Projekt eine ähnliche Situation wie Heimschmiede und weiß auch noch nich genau, wie ich die Berechnungen auf die Graka krieg. Allerdings is die Problematik bei mir doch ne etwas andere, also erstma ne allgemeine Beschreibung:
Ich schreibe auch (VC6, OpenGl) an ner Modelrenderklasse, die MS3D-Files lädt, derzeit noch ohne animation, is aber für ziemlich bald in Planung.
Ich hab mich aber erstma auf Schattierung konzentriert: Mein Ansatz war die Beleuchtung der Pixelshader durch dynamische Texturierung zu simulieren. So werden also quadratische Texturen, die in der Mitte einen hellen Punkt haben und nach außen dunkler werden, so auf das Model gemappt, dass der helle Punkt immer entweder auf den Seiten direkt zum Licht (diffuse), zum helbvector (specular) oder zum vertex-eye-vector (glow-ähnlicher Effekt) steht (Vorlage war nehe's CellShading Tut).
Das bringt denkt ich bei natürlich einigen Nachteilen gegenüber Pixelshadern trotzdem ne ganze Menge:
- es werden keine Pixelshader für eine gute Beleuchtung gebraucht (läuft daher auch auf älteren Rechnern)
- helligkeitsberechnungen sind nur pro vertex, nich pro pixel nötig - mehr speed, also auch besser für alte PCs
- es lassen sich einige Effekte erzielen, die mit Pixelshadern eigentlich unmöglich sind, wenn die Texturen zB. nicht einfache Hellikeitsverläufe enthalten, sondern zB. ein Schachmuster oder sowas:
|
\ | /
\ | /
---+#+---
/ | \
/ | \
|
Das funzt alles auch bis auf ein paar kleine Fehler schon ziemlich gut.
Falls interesse:
http://cthulhu.homelinux.org/bsp.jpg
http://cthulhu.homelinux.org/bsp.zip
Die Addierung der unterschiedlichen Helligkeiten für zB. Diffuse und Specular hab ich zur zeit noch durch mehrere Passes gelöst, in Planung is aber Mutlitexture (mehr speed!! ). Außerdem läuft die Berechnung der uv-Koordinaten derzeit noch auf der CPU und die werden mit glTexCoord2f und glVertex3f übergeben. Das will ich natürlich ändern. Das halte ich aber bei für ziemlich stressig. Ich stell mir das ca. so vor:
Für jedes Material jedes Bones müssten in einem ersten Pass alle Dreiecke (am besten durch VertexArrays?) mit den ShadingTexturen gezeichnet werden.
Dafür müssten mit multitexture die entsprechenden Helligkeits-Texturen gebindet werden. Die erste wäre dann zB. die für diffuse, die zweite für specular. Dann sollte das Model der Graka übergeben werden, welche dann per Vertexshader die eigentliche Berechnung der uv-Koordinaten durchführt. Dazu müssen Vertexshader allerdings Multitexture verstehen und jede uv-Koordinate jeder Textureschicht ändern können. Können die das?
Letztendlich würde dann dachte ich in nem zweiten Pass das Model mit glBlendFunc(GL_DST_COLOR,GL_SRC_COLOR) mit den eigentlichen Texturen gerendert.
Haltet ihr das so für durchführbar/sinnvoll? Oder gibt es eine andere Möglichkeit diese Berechnungen von der Graka durchführen zu lassen, also ohne Vertexshader?
Thx schonmal jetz
[edit] ähm, ein Moderator möge das bitte ma besser in nen neuen thread schieben, thx[/edit]