| |
|
|
- Page 1 - |
|
Frank Abbing | Ich weiss, dass OpenGL keinen Schattenwurf bereitstellt. Aber vielleicht kennt ja jemand eine Möglichkeit, Schatten possibile simpel zu simulieren? |
|
|
| |
|
|
|
| |
|
- Page 1 - |
|
| [quote:cbc2bf0039=Frank Abbing][quote:cbc2bf0039]Man müsste um den Schatten eines Objektes zu erzeugen das Objekt aus sicht der Lichquelle ablichten und auf die Textur der zu beschattenden Elemente legen [/quote:cbc2bf0039] Ebenso arbeiten ja Stencilschatten. Nur sind die Codes dazu alle in C++ und GLSL. Vielleicht kann ja jemand mit C++-Kenntnissen mal einen Code umstellen, dass er mit Profan funktioniert. [...] [/quote:cbc2bf0039]Aha, lag ich also mit meiner Annahme garnicht so falsch.
Wie eine OGL-Szene jedoch als bitmap abgelichtet wird um das bitmap auf eine Textur zu legen weiß ich jedoch nicht. |
|
|
| |
|
|
|
Frank Abbing | Naja, dafür ist eben der Stencil gedacht. Der Code liegt ja auch vor, nur ist C++ nicht mein Ding. Hier mal Teile des Codes in Profan: KompilierenMarkierenSeparieren!ogl("glColorMask",~GL_FALSE, ~GL_FALSE, ~GL_FALSE, ~GL_FALSE)
Schreiben in den Depth-Buffer ausschalten code
ogl("glDepthMask",~GL_FALSE)
Stencil-Test einschalten, code
ogl("glEnable",~GL_STENCIL_TEST)
ogl("glStencilFunc",~GL_ALWAYS, 1, $FFFFFFF)
ogl("glStencilOp",~GL_KEEP, ~GL_KEEP, ~GL_INCR)
Face-Culling richtig einstellen code
ogl("glEnable",~GL_CULL_FACE)
ogl("glFrontFace",~GL_CCW)
Schatten-Volumen zeichnen
Stencil-Operation umstellen code
ogl("glStencilOp",~GL_KEEP, ~GL_KEEP, ~GL_DECR)
Face-Culling "umkehren" code
ogl("glFrontFace",~GL_CW)
Schatten Volumen noch einmal zeichnen
Face-Culling wieder "normal" einstellen code
ogl("glFrontFace",~GL_CCW)
Schreiben in den Color-Buffer wieder einschalten code
ogl("glColorMask",~GL_TRUE, ~GL_TRUE, ~GL_TRUE, ~GL_TRUE)
Nur dort zeichnen, wo der Stencil-Buffer ungleich 0 ist code
ogl("glStencilFunc",~GL_NOTEQUAL, 0, $FFFFFFFF)
Ein bildschirmfüllendes, halbtransparentes Quadrat zeichnen code
ogl("glColor4f",0.0, 0.0, 0.0, 0.3)
ogl("glEnable",~GL_BLEND)
ogl("glBlendFunc",~GL_SRC_ALPHA, ~GL_ONE_MINUS_SRC_ALPHA)
ogl("glPushMatrix")
ogl("glLoadIdentity")
ogl("glBegin",~GL_TRIANGLE_STRIP)
ogl("glVertex3f",-0.1f, 0.1f, -0.1f)
ogl("glVertex3f",-0.1f,-0.1f, -0.1f)
ogl("glVertex3f", 0.1f, 0.1f, -0.1f)
ogl("glVertex3f", 0.1f,-0.1f, -0.1f)
ogl("glEnd")
ogl("glPopMatrix")
"Normale" Einstellungen wiederherstellen code
ogl("glDepthMask",~GL_TRUE)
ogl("glDisable",~GL_ST TEST )
|
|
|
| |
|
|
|
Frank Abbing | [quote:6ebf3adeec]Wie eine OGL-Szene jedoch als bitmap abgelichtet wird...[/quote:6ebf3adeec] Ist nicht nötig. Den Code habe ich aber vorliegen: KompilierenMarkierenSeparieren |
|
|
| |
|
|
|
Martin Loga | [quote:345f09acf3]Ich weiss, dass OpenGL keinen Schattenwurf bereitstellt.[/quote:345f09acf3] Das ist nicht ganz richtig, es gibt OGL Extensions die TextureShadowing unterstützen.
[quote:345f09acf3]Mittels Stencil Buffern sollen sich prima Echtzeitschatten bilden lassen[/quote:345f09acf3] Das ist richtig, aber bevor ihr in die falsche richtung arbeitet, solltet ihr überlegen welcher Schatten per euch der geeignetere ist.
[quote:345f09acf3]In E3 2003 carmack said that he used monsters and demons in doom3 so that you fight a demon or two in each room for some time instead of intering a room and hunt 10 characters because theres no hardware that can render a big no. of characters with all their shadows and detail. Also carmak uses a model format MD5 that have a good trick.it contains 1 million normals and only 5000 vertices .this enables him to use the big no of normals to render the characters with very high detail and use the smaller no of vertices to calculate the shadow volume and collision detection and so on. this is why theres no screenshots for terrains in doom3.it is impossible to render the shadow of the terrain using the shadow volume with such a big no of vertices used in terrains in modern game engines (unreal 2 for example renders 200000 triangles per frame reduces to 10000 using geomipmapping ).[/quote:345f09acf3] Zitat aus: [...]
Ich habe selbst erfahrungen mit Stencilschatten gemacht und schon ab 5.000 bis 10.000 Triangles und einem jittering von 6 ist das alles bei weitem nicht mehr echtzeitfähig.
Wenn ihr TextureShadows nutzt ist die Komplexität der Geometrie völlig unerheblich. Un wenn das gut implementiert wird, habe ihr auch nur wenige hässliche Kanten (Stichwort Multisampling).
Es gilt also abzuwägen. Hohe Leistung dann TextureShadows oder bessere Qualität dann StencilShadows. Das ist übrigens auch der Grund warum alle neuen Giochi TextureShadows verwenden. |
|
|
| |
|
|
|
Frank Abbing | [quote:8e89c3951c][quote:8e89c3951c]Ich weiss, dass OpenGL keinen Schattenwurf bereitstellt.[/quote:8e89c3951c] Das ist nicht ganz richtig, es gibt OGL Extensions die TextureShadowing unterstützen.[/quote:8e89c3951c] Ja, ab Version 2.0. Dann zumindest nicht per ältere Grafikkarten disponibile.
[quote:8e89c3951c]Ich habe selbst erfahrungen mit Stencilschatten gemacht...[/quote:8e89c3951c] Prima, in welcher Sprache? Meinst du, du könntest ein simples Beispiel in Profan hinbekommen? Vielleicht ein Quad, das einen Schatten auf den Boden wirft?
[quote:8e89c3951c]...und schon ab 5.000 bis 10.000 Triangles und einem jittering von 6 ist das alles bei weitem nicht mehr echtzeitfähig.[/quote:8e89c3951c] Na gut. Echtzeit necessario man ja nur per Giochi. Für grafische Präsentationen mit nur wenigen Objekten sollte das aber reichen.
[quote:8e89c3951c]Wenn ihr TextureShadows nutzt ist die Komplexität der Geometrie völlig unerheblich. Un wenn das gut implementiert wird, habe ihr auch nur wenige hässliche Kanten (Stichwort Multisampling).
Es gilt also abzuwägen. Hohe Leistung dann TextureShadows oder bessere Qualität dann StencilShadows. Das ist übrigens auch der Grund warum alle neuen Giochi TextureShadows verwenden.[/quote:8e89c3951c] In meinem Fall ginge es mir eher um Qualität. Wäre wirklich prima, wenn du mal ein Beispiel bringen könntest.
M.Loga, ganz frisch registriert. Bist du neu hier oder ists ein Deckname eines Bekannten? |
|
|
| |
|
|
|
Martin Loga | [quote:14d0152280]Meinst du, du könntest ein simples Beispiel in Profan hinbekommen?[/quote:14d0152280] Tut mir leid aber ich habe keinerlei Erfahrung mit Profan nur zum Thema OpenGL an sich kann ich helfen.
[quote:14d0152280]In meinem Fall ginge es mir eher um Qualität. Wäre wirklich prima, wenn du mal ein Beispiel bringen könntest.[/quote:14d0152280] Sehe ich ein, ich war zuerst von einem Spiel ausgegangen (nur Spielen im Kopf )
[quote:14d0152280]M.Loga, ganz frisch registriert. Bist du neu hier oder ists ein Deckname eines Bekannten?[/quote:14d0152280] Bin neu hier. Kein Bekannter. Ich bin nicht an Profan aber im allgemeinen an Computer Grafik interessiert. Bin auf eure Seite gestoßen, weil aus diesem Thread ein Link auf einen Artikel meiner Webseite verwiesen hat (gamedev.de). |
|
|
| |
|
|
| |
|
- Page 2 - |
|
|
Frank Abbing | [quote:6695799005]Tut mir leid aber ich habe keinerlei Erfahrung mit Profan nur zum Thema OpenGL an sich kann ich helfen.[/quote:6695799005] Schade... Mit einem Assemblercode wäre mir aber auch geholfen! Nur C++ kann ich nicht...
[quote:6695799005]Bin neu hier. Kein Bekannter. Ich bin nicht an Profan aber im allgemeinen an Computer Grafik interessiert. Bin auf eure Seite gestoßen, weil aus diesem Thread ein Link auf einen Artikel meiner Webseite verwiesen hat (gamedev.de).[/quote:6695799005] Ah, mein Link... Hast wirklich eine interessante Seite mit tollen Infos! Gefällt mir richtig gut. Der besagte Stencil-Kurs ist auch prima gemacht, nur die Stelle mit dem Aufspannen eines Schattenvolumen ist mir zu kurz geraten. Zumindest, wenn man den Quellcode dazu nicht richtig versteht. |
|
|
| |
|
|
|
Martin Loga | [quote:52e56be9e8]Mit einem Assemblercode wäre mir aber auch geholfen! [/quote:52e56be9e8] hmm dann jag doch das beispiel Programm durch den Deassembler
[quote:52e56be9e8]nur die Stelle mit dem Aufspannen eines Schattenvolumen ist mir zu kurz geraten.[/quote:52e56be9e8] Nun das ist im grunde ganz einfach. Zunächstmal muss du sicherstellen, dass das Schatten werfende Objekt nur aus Dreiecken besteht, da ansonsten der Programmieraufwand ordentlich zunimmt und die Leistung schwindet. Dann baust du dir eine Liste mit Nachbarschaften. Jedes Dreieckt hat bis zu 3 Nachbarn. Das machst du am besten nur einmal, sofern sich deine Geometrie nicht mochmal ändert. Jetzt kommt der interessante Teil. Du baust mit Aiuto der Nachbarschaften eine Liste von Umrisskanten. Das sind all Jene Kanten an die ein Dreieck angrenzt das zur Kamera schaut und eins das von der Camera wegschaut (oder einfach keins angrenzt). Das machst du circa das Skalarprodukt der Flächennormalen der Einzelnen Dreieckt mit dem Lichtvektor (ein Vektor von Dreieck zur Lichtquelle). Ist es größer 0 schaut das Dreieck weg, ist es kleiner 0 schaut es zur Lichtquelle. Hast du all diese Kanten extrapolierst du die dazugehörenden Vertices auf den ?Fluchtlinien? weg von der Lichtquelle. |
|
|
| |
|
|
|
Frank Abbing | Danke! Das hilft mir sicher schon weiter. Da werd ich noch ein bischen mit herumbasteln. Mal sehen, ob ich es hinbekomme. Wenn ja, schicke ich dir den Code zum Einfügen in den Kursus. |
|
|
| |
|
|
|
Jac de Lad | Ich kann ja mal Dany fragen, der beherrscht C++, C#, Delphi, Assembler...und OpenGL+DirectX. Der kann dir bestimmt helfen (entweder er bastelt ne DLL oder erzeugt Fonte in Profan oder was in der Art, vorausgesetzt er kanns!)
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 01.09.2006 ▲ |
|
|
|
|
Frank Abbing | Dany, häh? Gut, dann aber bitte als Assemblercode. Mit C++/# ist mir nicht geholfen. |
|
|
| |
|
|
|
Jac de Lad | Daniel Hoffmann. Hatte sich vor ein paar Wochen hier angemeldet und seine Kompressions-DLL mit Arithmetic Encoding angekündigt. Leider ist er noch nicht wirklich weitergekommen, weil er per die Uni lernen muss und jetzt ein Praktikum macht. Hat sich auf meine Anfrage hin auch noch nicht gemeldet, aber ich halte euch auf dem Laufenden!
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 01.09.2006 ▲ |
|
|
|