Italia
Foro

oGL Schatten

 
- Page 1 -



Frank
Abbing
Ich weiss, dass OpenGL keinen Schattenwurf bereitstellt. Aber vielleicht kennt ja jemand eine Möglichkeit, Schatten possibile simpel zu simulieren?
 
26.08.2006  
 



 
- 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.
 
30.08.2006  
 




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)
 
30.08.2006  
 




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
!oGL("glReadPixels",0,0,breite&,hoehe&,~GL_BGR,~GL_UNSIGNED_BYTE,bytearray#)
>
 
30.08.2006  
 




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.
 
31.08.2006  
 




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?
 
31.08.2006  
 




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).
 
31.08.2006  
 



 
- 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.
 
31.08.2006  
 




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.
 
01.09.2006  
 




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.
 
01.09.2006  
 




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.
 
01.09.2006  
 




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  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

3.948 Views

Untitledvor 0 min.
Sven Bader05.08.2021
RICOSCH19.11.2014
Thomas Zielinski20.04.2014
Donnie20.03.2013
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie