https://wiki.delphigl.com/api.php?action=feedcontributions&user=Olee&feedformat=atom
DGL Wiki - Benutzerbeiträge [de]
2024-03-29T15:11:18Z
Benutzerbeiträge
MediaWiki 1.27.4
https://wiki.delphigl.com/index.php?title=Zylinder&diff=24901
Zylinder
2010-07-31T17:20:07Z
<p>Olee: Die Seite wurde neu angelegt: „==Allgemein== Der folgende Code zeichnet einen Zylinder in einen Würfel der Kantenlänge 2. Dadurch lassen sich beim Zeichnen die Positionskoordinaten auch direk…“</p>
<hr />
<div>==Allgemein==<br />
Der folgende Code zeichnet einen Zylinder in einen Würfel der Kantenlänge 2.<br />
Dadurch lassen sich beim Zeichnen die Positionskoordinaten auch direkt für die Normalen des Zylinders nutzen.<br />
Der Körper des Zylinders sowie die Endkappen werden mit der aktuell gebundene Textur gezeichnet. Will man jede der Flächen mit einer anderen Textur versehen, so muss diese zwischen den einzelnen Abschnitten gewechselt werden.<br />
<br />
==Verwendete Typen==<br />
<source lang="pascal"><br />
Type<br />
TVector3f = Record<br />
x, y, z : Single;<br />
End;<br />
</source><br />
<br />
==Parameter==<br />
Der einzige Parameter '''n''' der Prozedur besimmt die Anzahl der Unterteilungen des Zylinders.<br />
Die Größe des Objektes wird durch ein vorangehendes [[glScalef]] festgelegt, welches als Parameter jeweils die Radien des Objektes in den verschiedenen Koordinatenachsen enthält.<br />
<br />
==Procedure==<br />
<source lang="pascal"><br />
Procedure DrawCylinder(n : Byte);<br />
Const<br />
Two_PI = PI * 2;<br />
Half_PI = PI / 2;<br />
Var<br />
i : Integer;<br />
vect : TVector3f;<br />
SinCosData : Array of Extended;<br />
Begin<br />
If n < 4 then exit;<br />
If n = 4 then DrawCube; //Ein Zylinder mit 4 Seiten ist ein Würfel - falls es jemanden interessiert *gg*<br />
<br />
glEnable(GL_NORMALIZE); //Aktiviere GL_NORMALIZE damit die Normalen nach dem glScale auch die richtige Länge haben<br />
<br />
//Berechne die Sinus- und Cosinus-werte einmalig im Vorraus<br />
SetLength(SinCosData, (n+1)*2);<br />
for i := 0 to n do<br />
SinCos(i/n * Two_PI, SinCosData[i*2], SinCosData[i*2+1]);<br />
<br />
glBegin(GL_QUAD_STRIP);<br />
for i := 0 to n do<br />
begin<br />
vect.x := SinCosData[i*2];<br />
vect.z := SinCosData[i*2+1];<br />
vect.y := 1;<br />
<br />
glTexCoord2f(i/n, 0);<br />
glNormal3f(vect.x, 0, vect.z);<br />
glVertex3fv(@vect);<br />
<br />
vect.y := -1;<br />
<br />
glTexCoord2f(i/n, 1);<br />
glNormal3f(vect.x, 0, vect.z);<br />
glVertex3fv(@vect);<br />
end;<br />
glEnd;<br />
<br />
//Zeichnen der oberen Endkappe<br />
glBegin(GL_TRIANGLE_FAN);<br />
vect.y := 1;<br />
glNormal3f(0, 1, 0);<br />
glTexCoord2f(0.5, 0.5);<br />
glVertex3f(0, 1, 0);<br />
for i := 0 to n do<br />
begin<br />
vect.x := SinCosData[i*2];<br />
vect.z := SinCosData[i*2+1];<br />
glTexCoord2f(vect.x*0.5 + 0.5, vect.z*0.5 + 0.5);<br />
glVertex3fv(@vect);<br />
end;<br />
glEnd;<br />
<br />
//Zeichnen der unteren Endkappe<br />
glBegin(GL_TRIANGLE_FAN);<br />
vect.y := -1;<br />
glNormal3f(0, -1, 0);<br />
glTexCoord2f(0.5, 0.5);<br />
glVertex3f(0, -1, 0);<br />
for i := n downto 0 do<br />
begin<br />
vect.x := SinCosData[i*2];<br />
vect.z := SinCosData[i*2+1];<br />
glTexCoord2f(0.5 - vect.x*0.5, vect.z*0.5 + 0.5);<br />
glVertex3fv(@vect);<br />
end;<br />
glEnd;<br />
<br />
glDisable(GL_NORMALIZE);<br />
End;<br />
</source><br />
<br />
<br />
==Beispiel Aufruf==<br />
Einen Zylinder mit der Höhe 3 und dem Radius 4 zeichnet man mit der Prozedur wie folgt:<br />
<source lang="pascal"><br />
glPushMatrix; //Sichere die Matrix<br />
glTranslatef(0, 1.5, 0); //Verschiebe den Mittelpunkt des Zylinders an die Position (0 | 1.5 | 0)<br />
glScalef(4, 3 / 2, 4); //Die Höhe wird halbiert, da bei glScale die radien des Objektes stehen sollen<br />
DrawCylinder(16); //Zeichne den Zylinder mit 16 Unterteilungen<br />
glPopMatrix; //Setzte die Matrix auf den Ausgangszustand zurück<br />
</source><br />
<br />
<br />
[[Kategorie:Technik_oder_Algorithmus]] [[Kategorie:Anleitung]]</div>
Olee
https://wiki.delphigl.com/index.php?title=Techniken_und_Algorithmen&diff=24899
Techniken und Algorithmen
2010-07-31T16:49:20Z
<p>Olee: /* Geometrie Objekte */</p>
<hr />
<div>Die Artikel dieses Wiki-Abschnittes sind im Gegensatz zu den [[Tutorial]]s meist kürzer. Dafür enthalten sie mitunter sehr viel Code der direkt verwendet werden, oder als Grundlage für die eigene Arbeit dienen kann.<br />
<br />
== Was hier hinein gehört ==<br />
Hier kommen, wie der Name vermuten lässt '''Erklärungen''' zu, in der 3D-Echtzeitprogrammierung verwendeten, '''Techniken''' hin. Z.B. verschiedene Schattentechniken, Bump-Mapping, etc.<br />
<br />
[[Hintergrundwissen]] gehört hier nicht rein. Sachen wie ''"was ist ein Tiefenpuffer und wofür ist er gut"'' haben hier nichts zu suchen.<br><br />
Sollte es für eine Technik/Thematik (siehe unten für Beispiel) mehrere "Lösungswege" geben, sollte eine kleine Überschrift eingefügt werden.<br />
<br />
Wenn ihr einen Technik oder Algorithmus Artikel erstellt, so solltet ihr unter den Artikel ein<br />
<nowiki>[[Kategorie:Technik_oder_Algorithmus]]</nowiki><br />
stellen. Damit wird der Artikel der [[:Kategorie:Technik_oder_Algorithmus]] zugeordnet.<br />
Falls dieser Artikel nicht nur erklärt was der Begriff bedeutet, sondern auch noch eine Anleitung ist, wie man die entsprechende Technik realisiert, so könnt ihr den Artikel auch noch der Kategorie [[:Kategorie:Anleitung|Anleitung]] zuweisen.<br />
<br />
== Übersicht ==<br />
=== Sammlungen ===<br />
* [[Materialsammlung]] (Enthält Materialien für [[glMaterial]].)<br />
* [[Shadersammlung]] (Enthält Shader.)<br />
<br />
=== Nützliche Helfer ===<br />
In dieser Rubrik findet sich all das, was ein OpenGL/Graphikprogrammierer immer brauch oder schnell mal zur Hand haben muss:<br />
* [[Framecounter]] (Wie schnell läuft mein Programm?)<br />
* [[Frameratenbegrenzung]] (Beschränken der Bildwiederholrate und sparen von CPU-Leistung und Strom)<br />
* [[Texture Loader]] (Laden und verwalten von Texturen)<br />
* [[Model Loader]] (Laden von Modellen die mit Programmen wie 3D Studio Max, Lightwave, Milkshape usw. erstellt wurden.)<br />
* Eine Möglichkeit zum [[Text ausgeben]]<br />
* [[Kamera]]<br />
** [[Kamera (1)]] (Szene in drei Ebenen verschieben und drehen, jetzt mit Beispielprogramm)<br />
** [[Kamera (2)]] (Kamera Source, letztes Update 1.10.2006)<br />
** [[Kamera (3)]] (Für die Kamera benötigte Utilities)<br />
* [[Extensionausgabe]] (Ausgabe der unterstützten Extensions und sonstiger Eigenschaften)<br />
* [[Techniken_zur_Matrixinversion|Techniken zur Matrixinversion]]<br />
<br />
=== Mathematisches ===<br />
==== Geometrie Objekte ====<br />
In dieser Rubrik findet ihr Code zum erzeugen von komplexen geometrischen Objekten, denn nicht immer ist die Kapselung die z.B. eine [[Quadrik]] bietet das was man sucht. <br />
<br />
* [[Würfel]]<br />
* [[Kugel]]<br />
* [[Zylinder]]<br />
* [[Capsule]]<br />
* [[Scheibe]]<br />
* [[Kreis]]<br />
* [[Kuchenstück]]<br />
* [[Zweifach_Parametrisierte_Geometrie|Geometrie durch zwei Parameter]]<br />
* [[Geometrie_durch_Kurven|Geometrie durch Kurven]]<br />
* [[Rotationskörper]]<br />
<br />
==== Rechenhilfen ====<br />
* [[Matrixmultiplikation]]<br />
<br />
=== Licht und Schatten ===<br />
Das Beleuchtungsmodell von OpenGL besitzt von Haus aus keine Möglichkeit zur Darstellung von Schatten (nicht zuletzt weil es dafür immernoch keine einheitliche Methode gibt), allerdings haben sich über die Jahre hinweg einige Techniken mehr oder weniger durchgesetzt :<br />
* [[Lightmaps]]<br />
* [[Projezierte Shadowmaps]] / [[Projezierte Textur]]en<br />
* [[Volumetrische Stencilschatten]]{{excIcon}}<br />
* [[Silhouette]] {{icpIcon}}<br />
* [[Bloom(pseudo-HDR)]] {{icpIcon}}<br />
<br />
=== Statische Umgebungen ===<br />
Besonders in Aussenszenen ist es oft nötig dem Betrachter den Eindruck zu vermitteln, er befinde sich in einer unendlich großen Umgebung. Da man dies jedoch schlecht über speziell dafür erstellte Geometrie lösen kann (weil das schlichtweg zu viel Aufwand und zu leistungsintensiv wäre), haben sich einige Techniken eingebürgert, mit denen man dem Betrachter eine solche unendliche Landschaft mit wenig Geometrie und einigen Tricks vorgaugeln kann :<br />
* [[Skyboxen]]<br />
* [[Skydome]]<br />
* [[Skysphere]]<br />
<br />
<br />
<br />
=== Dynamische Effekte ===<br />
Das Auge ißt bekanntlich mit. Auch bei 3D Anwendungen, vor allem in der Unterhaltungsindustrie, spielen gigantische Effekte, die dem User ein "Ohhh" und "Ahhh" und vor allem "Wow!" entlocken eine immer größere Rolle. Wie man solche Effekte am besten implementiert finden Sie in den Artikeln dieses Abschnitts.<br><br />
(Befassen Sie sich zuerst mit den Grundlagen von [[Partikelsysteme|Partikelsystemen]].)<br />
* [[Explosionen]] (Allseits gern gesehen. Außer in direkter Nachbarschaft)<br />
* [[Lichtsäulen]] (Bekannt für die magischen Momente in diversen Rollenspielen.)<br />
* [[Partikelsysteme]] {{excIcon}} (Grundlage für viele Effekte)<br />
** [[GLSL Partikel]] (Partikelsystem auf der GPU)<br />
** [[GLSL Partikel 2]] (Partikelsystem auf der GPU mit Shader Model 4.0)<br />
<br />
=== Natürliche Phänomene ===<br />
Ziel vieler Echtzeit 3D-Anwendung (auch wenn genau der gegenteilige Trend manchmal interessant sein dürfte) ist eine zumindest optische Annäherung an die Realität, also Szenen möglichst "naturgetreu" (auch urbane Szenen können "naturgetreu" sein, auch wenn diese wenig natürlich sind) darzustellen. Dazu gehören auch natürliche Phänomene, wie z.B. realistisch spiegelndes Wasser, Wetterbedingungen (Regen, Schnee, Nebel), Feuer, etc. Oft gibt es für ein natürliches Phänomen recht fortgeschrittene Umsetzungsmöglichkeiten, manchmal liegt die Lösung aber auch recht nahe :<br />
* [[Prozeduale Bäume|Bäume]]<br />
* [[Blitz]]<br />
* [[Feuer]]<br />
* [[Himmel]]<br />
* [[Nebel]]<br />
* [[Staub]]<br />
* [[Tiefenunschärfe]]<br />
* [[Wasser]]<br />
* [[Wettereffekt]]e (Regen, Schnee)<br />
* [[Wolken]] (als Ergänzung zu den statischen Umgebungen)<br />
<br />
=== Raumunterteilungstechniken ===<br />
Moderne 3D-Anwendungen müssen immer größere und komplexere 3D-Umgebungen darstellen, wobei oft jedoch große Teile eben dieser nicht sichtbar sind, aber ohne entsprechende Optimierungen trotzdem über den Datenbus geschoben (und von der Grafikkarte geclippt) werden müssen. Deshalb finden diverse Raumunterteilungstechniken (die u.a. aus anderen Bereichen stammen) in modernen 3D-Programmen Anwendung :<br />
* [[BSP-Bäume]] (Binary Space Partitioning = Binäre Raumunterteilung)<br />
* [[Quadtree]]s <br />
* [[Octree]]s (Dreidimensionale Erweiterung eines [[Quadtree]]s)<br />
* [[Portal]]e (Logische Sichtbegrenzung an Durchgängen)<br />
* [[PVS]] (Potentially Visible Sets = Mögliche sichtbare Sets)<br />
<br />
=== Terrain Darstellung ===<br />
In vielen 3D Anwendungen, vom Flugsimulator über Egoshooter bis zum Strategiespiel, muss die Umgebung visualisiert werden. Welche Techniken bei der Speicherung (siehe auch '''Raumunterteilungstechniken'''), Bildaufbau und Texturierung zum Einsatz kommen, findet ihr hier:<br><br />
:'''[[LOD|Level of Detail]] Algorithmen für Landschaften'''<br />
<br />
*[[VDPM]] ('''V'''iew-'''D'''ependent '''P'''rogressive '''M'''eshes)<br />
*[[ROAM]] ('''R'''eal-time '''O'''ptimally '''A'''dapting '''M'''eshes)<br />
*[[Tutorial_Terrain3|Röttger Algorithmus]]<br />
*[[Geometrical Mipmapping]]<br />
*[[VIPMs]] ('''V'''iew '''I'''ndependent '''P'''rogressive '''M'''eshe'''s''')<br />
<br />
:'''Texturierung'''<br />
<br />
*[[Texture Splatting]] (Kombination von Texturen mittels [[Blenden|Blending]] und [[Multitexturing]])<br />
*[[Texture Backing]] (Dynamisches erstellen von Texturen)<br />
<br />
=== Prozeduale Grafiken ===<br />
Prozeduale Grafiken werden häufig verwendet um<br />
*eine vielfältige Umgebung zu gewährleisten<br />
*Speicherplatz auf der Festplatte zu sparen<br />
*den Grafikern die Arbeit zu erleichtern (und teilweise sogar erst zu ermöglichen)<br />
Die Algorithmen und Möglichkeiten die sich dabei bieten sind hier aufgelistet:<br />
* [[Perlin Noise]] {{excIcon}} (Algorithmus für Texturen, Landschaft und vieles mehr)<br />
* [[L-Systems]] (aus wenig mach viel, Landschaftsgenerierung, Baumgenerierung, ...)<br />
* [[Fault Formation]] (primär zur Landschaftsgenerierung)<br />
* [[Prozeduale Landschaft]] (Spezielle Hinweise und Techniken zur Landschaftsgenerierung<br />
* [[Midpoint Displacement]] (primär zur Landschaftsgenerierung)<br />
* [[Hügel_Algorithmen]] (primär zur Landschaftsgenerierung)<br />
* [[Prozeduale Bäume]] (Techniken und Algorithmen speziell zur Baumgenerierung)<br />
* [[Prozeduale Texturen]] (Spezielle Hinweise zu Wasser, Lava und ähnliches)<br />
<br />
=== Pathfinding ===<br />
Pathfinding ist einer der grundlegenden Bereiche der Künstlichen Intelligenz, und aus diesem Grund für Spiele mit Computergegnern meistens unumgänglich.<br />
* [[Tiefensuche]]<br />
* [[Breitensuche]]<br />
* [[A-Stern]]<br />
* [[Dijkstra]]<br />
* [[Floyd Warshall]]<br />
* [[Navigation Meshes]]<br />
* [[Pathfinding-Level of Detail]]<br />
<br />
=== Sonstiges ===<br />
* [[Bilder als Ressourcen]] speichern und laden<br />
* [[Blenderscript|Exportscript für Blender]]<br />
* [[Blenderexporter|Blenderexport ausführliche Anleitung]]<br />
* [[GUI_Leitfaden|Leitfaden Graphisches Nutzerinterface]]<br />
* [[Interpolation]]<br />
* [[Lokalisierung]]<br />
* [[Pixelweise Bildbearbeitung]]<br />
* [[Physik und 3D|Wie verbinde ich Physikberechnung und 3D Rendering?]]<br />
* [[Screenshot]]s von OpenGL Ausgaben<br />
* [[Tesselierung|Polygone tesselieren]]<br />
* [[TGA Bilder laden]]<br />
* [[Verfügbare Auflösungen]] anzeigen<br />
* [[Zielen auf bewegte Gegner]]<br />
<br />
== Externe Links ==<br />
Weitere Links zum Thema "Effekte unter OpenGL" findet ihr in der [[Link]]-Sammlung unter [[Link#Effekte_und_Techniken_mit_OpenGL|Effekte und Techniken mit OpenGL]].</div>
Olee
https://wiki.delphigl.com/index.php?title=shader_PerPixel_Lighting2&diff=22731
shader PerPixel Lighting2
2009-02-23T17:34:07Z
<p>Olee: hat „shader PerPixel Lighting“ nach „Shader PerPixel Lighting“ verschoben: Shader groß greschrieben</p>
<hr />
<div>=Per-Pixel-Lighting Shader=<br />
Zurück zur [[Shadersammlung]]<br />
{|{{Prettytable_B1}} width=100%<br />
!width=60%|Beschreibung<br />
!width=20%|Autor<br />
!width=20%|Version<br />
|-<br />
|Per-Pixel-Lighting Shader<br />
|Olee<br />
|1.0<br />
|}<br />
<br />
==Bilder==<br />
{|<br />
|[[Bild:PPLShader.jpg|framed|400px|400px|Beispiel (Es handelt sich hierbei um EIN EINZIGES großes Quad)]]<br />
|-<br />
|}<br />
<br />
==Beschreibung==<br />
Eine Erweiterung des bestehenden PPL-Shaders aus der [[Shadersammlung]].<br />
Dabei beachtet dieser im Gegensatz zum bestehenden den Abstand zur Lichtquelle,<br />
unendlich weit entfernte Lichtquellen (Positionsvektor.W = 0) und<br />
er behandelt im Anschluss an das Licht noch den Fog.<br />
<br />
==Besondere Vorraussetzungen==<br />
Es muss eine Textur gebunden sein, sonst ist das ergebnis immer Schwarz aufgrund des Folgenden Codes:<br />
<cpp><br />
vec4 texColor = gl_Color * texture2D(Texture0, gl_TexCoord[0].xy); <br />
gl_FragColor = texColor * (gl_FrontLightModelProduct.sceneColor + lightAmbientDiffuse) + lightSpecular;<br />
</cpp><br />
Entweder man entfernt den eintrag '''*texture2D(Texture0, gl_TexCoord[0].xy)''' oder bindet vorher eine <br />
weiße-1D-Textur.<br />
<br />
Über die uniform-Variable '''ActiveLights''' kann die Anzahl der Lichtquellen angegeben werden, die für die berechnung des Lichtes verwendet werden sollen. Dabei wird von von der Lichtquelle 0 aus hochgezählt.<br />
<br />
==Code==<br />
Vertexshader:<br />
<cpp><br />
varying vec3 position;<br />
varying vec3 normal; <br />
<br />
void main(void) <br />
{<br />
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;<br />
gl_FrontColor = gl_Color;<br />
gl_TexCoord[0] = gl_MultiTexCoord0; <br />
normal = normalize(gl_NormalMatrix * gl_Normal);<br />
position = vec3(gl_ModelViewMatrix * gl_Vertex);<br />
}<br />
</cpp><br />
<br />
Fragmentshader:<br />
<cpp><br />
uniform sampler2D Texture0;<br />
uniform int ActiveLights;<br />
<br />
varying vec3 position;<br />
varying vec3 normal; <br />
<br />
void main(void) <br />
{<br />
vec3 lightDir;<br />
float attenFactor;<br />
vec3 eyeDir = normalize(-position); // camera is at (0,0,0) in ModelView space<br />
vec4 lightAmbientDiffuse = vec4(0.0,0.0,0.0,0.0);<br />
vec4 lightSpecular = vec4(0.0,0.0,0.0,0.0); <br />
<br />
// iterate all lights<br />
for (int i=0; i<ActiveLights; ++i)<br />
{<br />
// attenuation and light direction<br />
if (gl_LightSource[i].position.w != 0.0)<br />
{<br />
// positional light source<br />
float dist = distance(gl_LightSource[i].position.xyz, position);<br />
attenFactor = 1.0/( gl_LightSource[i].constantAttenuation + <br />
gl_LightSource[i].linearAttenuation * dist +<br />
gl_LightSource[i].quadraticAttenuation * dist * dist );<br />
lightDir = normalize(gl_LightSource[i].position.xyz - position);<br />
} <br />
else <br />
{ <br />
// directional light source <br />
attenFactor = 1.0; <br />
lightDir = gl_LightSource[i].position.xyz; <br />
} <br />
// ambient + diffuse <br />
lightAmbientDiffuse += gl_FrontLightProduct[i].ambient*attenFactor; <br />
lightAmbientDiffuse += gl_FrontLightProduct[i].diffuse * max(dot(normal, lightDir), 0.0) * attenFactor; <br />
// specular <br />
vec3 r = normalize(reflect(-lightDir, normal));<br />
lightSpecular += gl_FrontLightProduct[i].specular * <br />
pow(max(dot(r, eyeDir), 0.0), gl_FrontMaterial.shininess) *<br />
attenFactor; <br />
} <br />
// compute final color <br />
vec4 texColor = gl_Color * texture2D(Texture0, gl_TexCoord[0].xy); <br />
gl_FragColor = texColor * (gl_FrontLightModelProduct.sceneColor + lightAmbientDiffuse) + lightSpecular;<br />
<br />
float fog = (gl_Fog.end - gl_FogFragCoord) * gl_Fog.scale; // Intensität berechnen <br />
fog = clamp(fog, 0.0, 1.0); // Beschneiden <br />
gl_FragColor = mix(gl_Fog.color, gl_FragColor, fog); // Nebelfarbe einmischen <br />
}<br />
</cpp></div>
Olee
https://wiki.delphigl.com/index.php?title=shader_PerPixel_Lighting&diff=22732
shader PerPixel Lighting
2009-02-23T17:34:07Z
<p>Olee: hat „shader PerPixel Lighting“ nach „Shader PerPixel Lighting“ verschoben: Shader groß greschrieben</p>
<hr />
<div>#REDIRECT [[Shader PerPixel Lighting]]</div>
Olee
https://wiki.delphigl.com/index.php?title=Shadersammlung&diff=22728
Shadersammlung
2009-02-23T00:47:06Z
<p>Olee: /* GLSL-Shader */</p>
<hr />
<div>Die DGL Shadersammlung soll euch helfen Shader für OpenGL zu finden. <br />
<br />
=Organisation=<br />
==Aufbau==<br />
Für den Anfang wird die Shadersammlung nicht gegliedert. Mit wachsender Anzahl der verlinkten Shader wird sich dies ändern.<br />
==Vorlage==<br />
Falls ihr einen Shader bereitstellen wollt sind drei Dinge nötig:<br />
# Kopiert die nachfolgende Vorlage ans Ende der Shaderliste und tragt die passenden Daten ein.<br />
# Erstellt einen neuen Shaderartikel den ihr in der eingefügten Zeile verlinkt. Benutzt dazu die [[Shaderartikelvorlage]]. Shaderartikel müssen mit '''shader_''' benannt sein. ''z.B. shader_Wasser2d'' für einen 2D Wassershader.<br />
# Da Shader zu 90% optische Effekte bewirken, sollte (mindestens) ein aussagekräftiges Beispielbild im Shaderartikel hinterlegt werden. Das Bild muss dann auch hier in der Liste verlinkt werden.<br />
<br />
Fügt folgenden Code ans Ende der Shaderliste an:<br />
!<nowiki>[[shader_HierNameEintragen]]</nowiki><br />
!HierNameEintragen<br />
!Autorname<br />
!Was macht der Shader.<nowiki><br></nowiki><br />
''What does the shader do.''*<br />
!<nowiki>[[Bild:Beispielbild.jpg|150px|150px]]</nowiki><br />
<br />
''* Die englische Beschreibung ist freiwillig. Hilft aber bestimmt den Shader zu verbreiten. Die deutsche Beschreibung ist Pflicht.''<br />
<br />
<br />
Für euren neuen Shaderartikel sollte diese [[Shaderartikelvorlage]] benutzt werden. (Vorlage aufrufen, bearbeiten klicken, Alles kopieren und in euren neuen Shaderartikel einfügen.)<br />
<br />
=Shader=<br />
== ARB-Shader ==<br />
{|{{Prettytable_B1}} width=100%<br />
!width=20%|Link<br />
!width=20%|Shadername<br />
!width=20%|Autor<br />
!width=40%|Kurzbeschreibung<br />
!width=150px|Bild<br />
|-<br />
![[shader_surface_scattering(ARB)|shader_surface_scattering]]<br />
!surface scattering<br />
!dj3hut1 <br />
!Bestimmt die Distanz, die Licht durch ein Material zurücklegt.<br />
<br><br />
''Calculates the distance of light through a material.''<br />
![[Bild:Scattering_s.jpg|144px|150px]]<br />
|}<br />
== GLSL-Shader ==<br />
{|{{Prettytable_B1}} width=100%<br />
!width=20%|Link<br />
!width=20%|Shadername<br />
!width=20%|Autor<br />
!width=40%|Kurzbeschreibung<br />
!width=150px|Bild<br />
|-<br />
![[shader_verysimple]]<br />
!verysimple<br />
(standard texture binding)<br />
!damadmax <br />
!Ein einfacher Shader, welcher eine Textur an Vertices bindet. Dieser Shader baut damit das standard Texturierungsverhalten der fixen Pipeline nach.<br><br />
''A very simple shader. It only binds a texture on some vertices, thus this shader simulates the standard behavior of a part of the fixed pipeline.''<br />
!''Kein Bild vorhanden''<br />
|-<br />
![[shader_sepia]]<br />
!Sepia<br />
!Markus<br />
!Post-Processing-Shader, welcher einen Sepia-Farbfilter auf die Szene anwendet.<br><br />
''Post-Processing-Shader which applies a sepia color filter to the scene.'' <br />
![[Bild:shader_sepia_nachher.jpg|150px|150px]]<br />
|-<br />
![[shader_radial_blur]]<br />
!Radial Blur<br />
!Markus<br />
!Post-Processing-Shader, welcher die Szene ausgehend vom Mittelpunkt verwischt.<br><br />
''Post-Processing-Shader which applies a radial blur to the scene.'' <br />
![[Bild:shader_radial_blur_nachher.jpg|150px|150px]]<br />
|-<br />
![[shader_PerPixelLighting]]<br />
!Per Pixel-Beleuchtung<br />
!Ireyon<br />
!Shader, der Per Pixel beleuchtet<br><br />
''Shader which calculates lighting per pixel''<br />
![[Bild:shader_ppl.png|150px|150px]]<br />
|-<br />
![[shader_PerPixel_Lighting]]<br />
!Per-Pixel-Lighting Shader<br />
!Olee<br />
!Beleuchtet Flächen nach Pixeln anstatt wie OpenGl-Licht je Vertex.<br><br />
Iluminates faces per pixel istead of OpenGl-Lighting per Vertex.*<br />
![[Bild:PPLShader.jpg|150px|150px]]<br />
|-<br />
![[shader_Terrain_GPU4]]<br />
!Heightmap-Terrain<br />
!Coolcat<br />
!Shader für ein Heightmap-Terrain, benutzt [[GL_EXT_gpu_shader4]]<br><br />
''Shader for Heightmap-Terrain, uses [[GL_EXT_gpu_shader4]]''<br />
![[Bild:Terrain.jpg|150px|150px]]<br />
|}<br />
<br />
== Cg-Shader ==<br />
{|{{Prettytable_B1}} width=100%<br />
!width=20%|Link<br />
!width=20%|Shadername<br />
!width=20%|Autor<br />
!width=40%|Kurzbeschreibung<br />
!width=150px|Bild<br />
|-<br />
![[shader_diffuse_bumpmapping(Cg)|diffuse_bumpmapping]]<br />
!diffuse_bumpmapping<br />
!igel457<br />
!Wendet diffuses Bumpmapping auf eine beliebige Oberfläche an.<br><br />
''Applies diffuse bumpmapping to a surface.''<br />
![[Bild:shader_diffuse_bumpmapping_cg.jpg|150px|150px]]<br />
|}</div>
Olee
https://wiki.delphigl.com/index.php?title=Datei:PPLShader.jpg&diff=22727
Datei:PPLShader.jpg
2009-02-23T00:46:32Z
<p>Olee: hat eine neue Version von „Bild:PPLShader.jpg“ hochgeladen: Beispiel des Per-Pixel-Lighting Shaders.</p>
<hr />
<div>Beispiel des Per-Pixel-Lighting Shaders</div>
Olee
https://wiki.delphigl.com/index.php?title=shader_PerPixel_Lighting2&diff=22726
shader PerPixel Lighting2
2009-02-23T00:45:42Z
<p>Olee: /* Bilder */</p>
<hr />
<div>=Per-Pixel-Lighting Shader=<br />
Zurück zur [[Shadersammlung]]<br />
{|{{Prettytable_B1}} width=100%<br />
!width=60%|Beschreibung<br />
!width=20%|Autor<br />
!width=20%|Version<br />
|-<br />
|Per-Pixel-Lighting Shader<br />
|Olee<br />
|1.0<br />
|}<br />
<br />
==Bilder==<br />
{|<br />
|[[Bild:PPLShader.jpg|framed|400px|400px|Beispiel (Es handelt sich hierbei um EIN EINZIGES großes Quad)]]<br />
|-<br />
|}<br />
<br />
==Beschreibung==<br />
Eine Erweiterung des bestehenden PPL-Shaders aus der [[Shadersammlung]].<br />
Dabei beachtet dieser im Gegensatz zum bestehenden den Abstand zur Lichtquelle,<br />
unendlich weit entfernte Lichtquellen (Positionsvektor.W = 0) und<br />
er behandelt im Anschluss an das Licht noch den Fog.<br />
<br />
==Besondere Vorraussetzungen==<br />
Es muss eine Textur gebunden sein, sonst ist das ergebnis immer Schwarz aufgrund des Folgenden Codes:<br />
<cpp><br />
vec4 texColor = gl_Color * texture2D(Texture0, gl_TexCoord[0].xy); <br />
gl_FragColor = texColor * (gl_FrontLightModelProduct.sceneColor + lightAmbientDiffuse) + lightSpecular;<br />
</cpp><br />
Entweder man entfernt den eintrag '''*texture2D(Texture0, gl_TexCoord[0].xy)''' oder bindet vorher eine <br />
weiße-1D-Textur.<br />
<br />
Über die uniform-Variable '''ActiveLights''' kann die Anzahl der Lichtquellen angegeben werden, die für die berechnung des Lichtes verwendet werden sollen. Dabei wird von von der Lichtquelle 0 aus hochgezählt.<br />
<br />
==Code==<br />
Vertexshader:<br />
<cpp><br />
varying vec3 position;<br />
varying vec3 normal; <br />
<br />
void main(void) <br />
{<br />
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;<br />
gl_FrontColor = gl_Color;<br />
gl_TexCoord[0] = gl_MultiTexCoord0; <br />
normal = normalize(gl_NormalMatrix * gl_Normal);<br />
position = vec3(gl_ModelViewMatrix * gl_Vertex);<br />
}<br />
</cpp><br />
<br />
Fragmentshader:<br />
<cpp><br />
uniform sampler2D Texture0;<br />
uniform int ActiveLights;<br />
<br />
varying vec3 position;<br />
varying vec3 normal; <br />
<br />
void main(void) <br />
{<br />
vec3 lightDir;<br />
float attenFactor;<br />
vec3 eyeDir = normalize(-position); // camera is at (0,0,0) in ModelView space<br />
vec4 lightAmbientDiffuse = vec4(0.0,0.0,0.0,0.0);<br />
vec4 lightSpecular = vec4(0.0,0.0,0.0,0.0); <br />
<br />
// iterate all lights<br />
for (int i=0; i<ActiveLights; ++i)<br />
{<br />
// attenuation and light direction<br />
if (gl_LightSource[i].position.w != 0.0)<br />
{<br />
// positional light source<br />
float dist = distance(gl_LightSource[i].position.xyz, position);<br />
attenFactor = 1.0/( gl_LightSource[i].constantAttenuation + <br />
gl_LightSource[i].linearAttenuation * dist +<br />
gl_LightSource[i].quadraticAttenuation * dist * dist );<br />
lightDir = normalize(gl_LightSource[i].position.xyz - position);<br />
} <br />
else <br />
{ <br />
// directional light source <br />
attenFactor = 1.0; <br />
lightDir = gl_LightSource[i].position.xyz; <br />
} <br />
// ambient + diffuse <br />
lightAmbientDiffuse += gl_FrontLightProduct[i].ambient*attenFactor; <br />
lightAmbientDiffuse += gl_FrontLightProduct[i].diffuse * max(dot(normal, lightDir), 0.0) * attenFactor; <br />
// specular <br />
vec3 r = normalize(reflect(-lightDir, normal));<br />
lightSpecular += gl_FrontLightProduct[i].specular * <br />
pow(max(dot(r, eyeDir), 0.0), gl_FrontMaterial.shininess) *<br />
attenFactor; <br />
} <br />
// compute final color <br />
vec4 texColor = gl_Color * texture2D(Texture0, gl_TexCoord[0].xy); <br />
gl_FragColor = texColor * (gl_FrontLightModelProduct.sceneColor + lightAmbientDiffuse) + lightSpecular;<br />
<br />
float fog = (gl_Fog.end - gl_FogFragCoord) * gl_Fog.scale; // Intensität berechnen <br />
fog = clamp(fog, 0.0, 1.0); // Beschneiden <br />
gl_FragColor = mix(gl_Fog.color, gl_FragColor, fog); // Nebelfarbe einmischen <br />
}<br />
</cpp></div>
Olee
https://wiki.delphigl.com/index.php?title=Shadersammlung&diff=22725
Shadersammlung
2009-02-23T00:43:44Z
<p>Olee: /* GLSL-Shader */</p>
<hr />
<div>Die DGL Shadersammlung soll euch helfen Shader für OpenGL zu finden. <br />
<br />
=Organisation=<br />
==Aufbau==<br />
Für den Anfang wird die Shadersammlung nicht gegliedert. Mit wachsender Anzahl der verlinkten Shader wird sich dies ändern.<br />
==Vorlage==<br />
Falls ihr einen Shader bereitstellen wollt sind drei Dinge nötig:<br />
# Kopiert die nachfolgende Vorlage ans Ende der Shaderliste und tragt die passenden Daten ein.<br />
# Erstellt einen neuen Shaderartikel den ihr in der eingefügten Zeile verlinkt. Benutzt dazu die [[Shaderartikelvorlage]]. Shaderartikel müssen mit '''shader_''' benannt sein. ''z.B. shader_Wasser2d'' für einen 2D Wassershader.<br />
# Da Shader zu 90% optische Effekte bewirken, sollte (mindestens) ein aussagekräftiges Beispielbild im Shaderartikel hinterlegt werden. Das Bild muss dann auch hier in der Liste verlinkt werden.<br />
<br />
Fügt folgenden Code ans Ende der Shaderliste an:<br />
!<nowiki>[[shader_HierNameEintragen]]</nowiki><br />
!HierNameEintragen<br />
!Autorname<br />
!Was macht der Shader.<nowiki><br></nowiki><br />
''What does the shader do.''*<br />
!<nowiki>[[Bild:Beispielbild.jpg|150px|150px]]</nowiki><br />
<br />
''* Die englische Beschreibung ist freiwillig. Hilft aber bestimmt den Shader zu verbreiten. Die deutsche Beschreibung ist Pflicht.''<br />
<br />
<br />
Für euren neuen Shaderartikel sollte diese [[Shaderartikelvorlage]] benutzt werden. (Vorlage aufrufen, bearbeiten klicken, Alles kopieren und in euren neuen Shaderartikel einfügen.)<br />
<br />
=Shader=<br />
== ARB-Shader ==<br />
{|{{Prettytable_B1}} width=100%<br />
!width=20%|Link<br />
!width=20%|Shadername<br />
!width=20%|Autor<br />
!width=40%|Kurzbeschreibung<br />
!width=150px|Bild<br />
|-<br />
![[shader_surface_scattering(ARB)|shader_surface_scattering]]<br />
!surface scattering<br />
!dj3hut1 <br />
!Bestimmt die Distanz, die Licht durch ein Material zurücklegt.<br />
<br><br />
''Calculates the distance of light through a material.''<br />
![[Bild:Scattering_s.jpg|144px|150px]]<br />
|}<br />
== GLSL-Shader ==<br />
{|{{Prettytable_B1}} width=100%<br />
!width=20%|Link<br />
!width=20%|Shadername<br />
!width=20%|Autor<br />
!width=40%|Kurzbeschreibung<br />
!width=150px|Bild<br />
|-<br />
![[shader_verysimple]]<br />
!verysimple<br />
(standard texture binding)<br />
!damadmax <br />
!Ein einfacher Shader, welcher eine Textur an Vertices bindet. Dieser Shader baut damit das standard Texturierungsverhalten der fixen Pipeline nach.<br><br />
''A very simple shader. It only binds a texture on some vertices, thus this shader simulates the standard behavior of a part of the fixed pipeline.''<br />
!''Kein Bild vorhanden''<br />
|-<br />
![[shader_sepia]]<br />
!Sepia<br />
!Markus<br />
!Post-Processing-Shader, welcher einen Sepia-Farbfilter auf die Szene anwendet.<br><br />
''Post-Processing-Shader which applies a sepia color filter to the scene.'' <br />
![[Bild:shader_sepia_nachher.jpg|150px|150px]]<br />
|-<br />
![[shader_radial_blur]]<br />
!Radial Blur<br />
!Markus<br />
!Post-Processing-Shader, welcher die Szene ausgehend vom Mittelpunkt verwischt.<br><br />
''Post-Processing-Shader which applies a radial blur to the scene.'' <br />
![[Bild:shader_radial_blur_nachher.jpg|150px|150px]]<br />
|-<br />
![[shader_PerPixelLighting]]<br />
!Per Pixel-Beleuchtung<br />
!Ireyon<br />
!Shader, der Per Pixel beleuchtet<br><br />
''Shader which calculates lighting per pixel''<br />
![[Bild:shader_ppl.png|150px|150px]]<br />
|-<br />
![[shader_Terrain_GPU4]]<br />
!Heightmap-Terrain<br />
!Coolcat<br />
!Shader für ein Heightmap-Terrain, benutzt [[GL_EXT_gpu_shader4]]<br><br />
''Shader for Heightmap-Terrain, uses [[GL_EXT_gpu_shader4]]''<br />
![[Bild:Terrain.jpg|150px|150px]]<br />
|-<br />
![[shader_PerPixel_Lighting]]<br />
!Per-Pixel-Lighting Shader<br />
!Olee<br />
!Beleuchtet Flächen nach Pixeln anstatt wie OpenGl-Licht je Vertex.<br><br />
Iluminates faces per pixel istead of OpenGl-Lighting per Vertex.*<br />
![[Bild:PPLShader.jpg|150px|150px]]<br />
|}<br />
<br />
== Cg-Shader ==<br />
{|{{Prettytable_B1}} width=100%<br />
!width=20%|Link<br />
!width=20%|Shadername<br />
!width=20%|Autor<br />
!width=40%|Kurzbeschreibung<br />
!width=150px|Bild<br />
|-<br />
![[shader_diffuse_bumpmapping(Cg)|diffuse_bumpmapping]]<br />
!diffuse_bumpmapping<br />
!igel457<br />
!Wendet diffuses Bumpmapping auf eine beliebige Oberfläche an.<br><br />
''Applies diffuse bumpmapping to a surface.''<br />
![[Bild:shader_diffuse_bumpmapping_cg.jpg|150px|150px]]<br />
|}</div>
Olee
https://wiki.delphigl.com/index.php?title=Shadersammlung&diff=22724
Shadersammlung
2009-02-23T00:42:53Z
<p>Olee: /* GLSL-Shader */</p>
<hr />
<div>Die DGL Shadersammlung soll euch helfen Shader für OpenGL zu finden. <br />
<br />
=Organisation=<br />
==Aufbau==<br />
Für den Anfang wird die Shadersammlung nicht gegliedert. Mit wachsender Anzahl der verlinkten Shader wird sich dies ändern.<br />
==Vorlage==<br />
Falls ihr einen Shader bereitstellen wollt sind drei Dinge nötig:<br />
# Kopiert die nachfolgende Vorlage ans Ende der Shaderliste und tragt die passenden Daten ein.<br />
# Erstellt einen neuen Shaderartikel den ihr in der eingefügten Zeile verlinkt. Benutzt dazu die [[Shaderartikelvorlage]]. Shaderartikel müssen mit '''shader_''' benannt sein. ''z.B. shader_Wasser2d'' für einen 2D Wassershader.<br />
# Da Shader zu 90% optische Effekte bewirken, sollte (mindestens) ein aussagekräftiges Beispielbild im Shaderartikel hinterlegt werden. Das Bild muss dann auch hier in der Liste verlinkt werden.<br />
<br />
Fügt folgenden Code ans Ende der Shaderliste an:<br />
!<nowiki>[[shader_HierNameEintragen]]</nowiki><br />
!HierNameEintragen<br />
!Autorname<br />
!Was macht der Shader.<nowiki><br></nowiki><br />
''What does the shader do.''*<br />
!<nowiki>[[Bild:Beispielbild.jpg|150px|150px]]</nowiki><br />
<br />
''* Die englische Beschreibung ist freiwillig. Hilft aber bestimmt den Shader zu verbreiten. Die deutsche Beschreibung ist Pflicht.''<br />
<br />
<br />
Für euren neuen Shaderartikel sollte diese [[Shaderartikelvorlage]] benutzt werden. (Vorlage aufrufen, bearbeiten klicken, Alles kopieren und in euren neuen Shaderartikel einfügen.)<br />
<br />
=Shader=<br />
== ARB-Shader ==<br />
{|{{Prettytable_B1}} width=100%<br />
!width=20%|Link<br />
!width=20%|Shadername<br />
!width=20%|Autor<br />
!width=40%|Kurzbeschreibung<br />
!width=150px|Bild<br />
|-<br />
![[shader_surface_scattering(ARB)|shader_surface_scattering]]<br />
!surface scattering<br />
!dj3hut1 <br />
!Bestimmt die Distanz, die Licht durch ein Material zurücklegt.<br />
<br><br />
''Calculates the distance of light through a material.''<br />
![[Bild:Scattering_s.jpg|144px|150px]]<br />
|}<br />
== GLSL-Shader ==<br />
{|{{Prettytable_B1}} width=100%<br />
!width=20%|Link<br />
!width=20%|Shadername<br />
!width=20%|Autor<br />
!width=40%|Kurzbeschreibung<br />
!width=150px|Bild<br />
|-<br />
![[shader_verysimple]]<br />
!verysimple<br />
(standard texture binding)<br />
!damadmax <br />
!Ein einfacher Shader, welcher eine Textur an Vertices bindet. Dieser Shader baut damit das standard Texturierungsverhalten der fixen Pipeline nach.<br><br />
''A very simple shader. It only binds a texture on some vertices, thus this shader simulates the standard behavior of a part of the fixed pipeline.''<br />
!''Kein Bild vorhanden''<br />
|-<br />
![[shader_sepia]]<br />
!Sepia<br />
!Markus<br />
!Post-Processing-Shader, welcher einen Sepia-Farbfilter auf die Szene anwendet.<br><br />
''Post-Processing-Shader which applies a sepia color filter to the scene.'' <br />
![[Bild:shader_sepia_nachher.jpg|150px|150px]]<br />
|-<br />
![[shader_radial_blur]]<br />
!Radial Blur<br />
!Markus<br />
!Post-Processing-Shader, welcher die Szene ausgehend vom Mittelpunkt verwischt.<br><br />
''Post-Processing-Shader which applies a radial blur to the scene.'' <br />
![[Bild:shader_radial_blur_nachher.jpg|150px|150px]]<br />
|-<br />
![[shader_PerPixelLighting]]<br />
!Per Pixel-Beleuchtung<br />
!Ireyon<br />
!Shader, der Per Pixel beleuchtet<br><br />
''Shader which calculates lighting per pixel''<br />
![[Bild:shader_ppl.png|150px|150px]]<br />
|-<br />
![[shader_Terrain_GPU4]]<br />
!Heightmap-Terrain<br />
!Coolcat<br />
!Shader für ein Heightmap-Terrain, benutzt [[GL_EXT_gpu_shader4]]<br><br />
''Shader for Heightmap-Terrain, uses [[GL_EXT_gpu_shader4]]''<br />
![[Bild:Terrain.jpg|150px|150px]]<br />
|-<br />
![[shader_PerPixel_Lighting]]<br />
!Per-Pixel-Lighting Shader<br />
!Olee<br />
!Beleuchtet Flächen nach Pixeln anstatt wie OpenGl-Licht je Vertex.<br><br />
Iluminates faces per pixel istead of OpenGl-Lighting per Vertex.*<br />
![[Bild:pplShader.jpg|150px|150px]]<br />
|}<br />
<br />
== Cg-Shader ==<br />
{|{{Prettytable_B1}} width=100%<br />
!width=20%|Link<br />
!width=20%|Shadername<br />
!width=20%|Autor<br />
!width=40%|Kurzbeschreibung<br />
!width=150px|Bild<br />
|-<br />
![[shader_diffuse_bumpmapping(Cg)|diffuse_bumpmapping]]<br />
!diffuse_bumpmapping<br />
!igel457<br />
!Wendet diffuses Bumpmapping auf eine beliebige Oberfläche an.<br><br />
''Applies diffuse bumpmapping to a surface.''<br />
![[Bild:shader_diffuse_bumpmapping_cg.jpg|150px|150px]]<br />
|}</div>
Olee
https://wiki.delphigl.com/index.php?title=Shadersammlung&diff=22723
Shadersammlung
2009-02-23T00:41:14Z
<p>Olee: /* GLSL-Shader */</p>
<hr />
<div>Die DGL Shadersammlung soll euch helfen Shader für OpenGL zu finden. <br />
<br />
=Organisation=<br />
==Aufbau==<br />
Für den Anfang wird die Shadersammlung nicht gegliedert. Mit wachsender Anzahl der verlinkten Shader wird sich dies ändern.<br />
==Vorlage==<br />
Falls ihr einen Shader bereitstellen wollt sind drei Dinge nötig:<br />
# Kopiert die nachfolgende Vorlage ans Ende der Shaderliste und tragt die passenden Daten ein.<br />
# Erstellt einen neuen Shaderartikel den ihr in der eingefügten Zeile verlinkt. Benutzt dazu die [[Shaderartikelvorlage]]. Shaderartikel müssen mit '''shader_''' benannt sein. ''z.B. shader_Wasser2d'' für einen 2D Wassershader.<br />
# Da Shader zu 90% optische Effekte bewirken, sollte (mindestens) ein aussagekräftiges Beispielbild im Shaderartikel hinterlegt werden. Das Bild muss dann auch hier in der Liste verlinkt werden.<br />
<br />
Fügt folgenden Code ans Ende der Shaderliste an:<br />
!<nowiki>[[shader_HierNameEintragen]]</nowiki><br />
!HierNameEintragen<br />
!Autorname<br />
!Was macht der Shader.<nowiki><br></nowiki><br />
''What does the shader do.''*<br />
!<nowiki>[[Bild:Beispielbild.jpg|150px|150px]]</nowiki><br />
<br />
''* Die englische Beschreibung ist freiwillig. Hilft aber bestimmt den Shader zu verbreiten. Die deutsche Beschreibung ist Pflicht.''<br />
<br />
<br />
Für euren neuen Shaderartikel sollte diese [[Shaderartikelvorlage]] benutzt werden. (Vorlage aufrufen, bearbeiten klicken, Alles kopieren und in euren neuen Shaderartikel einfügen.)<br />
<br />
=Shader=<br />
== ARB-Shader ==<br />
{|{{Prettytable_B1}} width=100%<br />
!width=20%|Link<br />
!width=20%|Shadername<br />
!width=20%|Autor<br />
!width=40%|Kurzbeschreibung<br />
!width=150px|Bild<br />
|-<br />
![[shader_surface_scattering(ARB)|shader_surface_scattering]]<br />
!surface scattering<br />
!dj3hut1 <br />
!Bestimmt die Distanz, die Licht durch ein Material zurücklegt.<br />
<br><br />
''Calculates the distance of light through a material.''<br />
![[Bild:Scattering_s.jpg|144px|150px]]<br />
|}<br />
== GLSL-Shader ==<br />
{|{{Prettytable_B1}} width=100%<br />
!width=20%|Link<br />
!width=20%|Shadername<br />
!width=20%|Autor<br />
!width=40%|Kurzbeschreibung<br />
!width=150px|Bild<br />
|-<br />
![[shader_verysimple]]<br />
!verysimple<br />
(standard texture binding)<br />
!damadmax <br />
!Ein einfacher Shader, welcher eine Textur an Vertices bindet. Dieser Shader baut damit das standard Texturierungsverhalten der fixen Pipeline nach.<br><br />
''A very simple shader. It only binds a texture on some vertices, thus this shader simulates the standard behavior of a part of the fixed pipeline.''<br />
!''Kein Bild vorhanden''<br />
|-<br />
![[shader_sepia]]<br />
!Sepia<br />
!Markus<br />
!Post-Processing-Shader, welcher einen Sepia-Farbfilter auf die Szene anwendet.<br><br />
''Post-Processing-Shader which applies a sepia color filter to the scene.'' <br />
![[Bild:shader_sepia_nachher.jpg|150px|150px]]<br />
|-<br />
![[shader_radial_blur]]<br />
!Radial Blur<br />
!Markus<br />
!Post-Processing-Shader, welcher die Szene ausgehend vom Mittelpunkt verwischt.<br><br />
''Post-Processing-Shader which applies a radial blur to the scene.'' <br />
![[Bild:shader_radial_blur_nachher.jpg|150px|150px]]<br />
|-<br />
![[shader_PerPixelLighting]]<br />
!Per Pixel-Beleuchtung<br />
!Ireyon<br />
!Shader, der Per Pixel beleuchtet<br><br />
''Shader which calculates lighting per pixel''<br />
![[Bild:shader_ppl.png|150px|150px]]<br />
|-<br />
![[shader_Terrain_GPU4]]<br />
!Heightmap-Terrain<br />
!Coolcat<br />
!Shader für ein Heightmap-Terrain, benutzt [[GL_EXT_gpu_shader4]]<br><br />
''Shader for Heightmap-Terrain, uses [[GL_EXT_gpu_shader4]]''<br />
![[Bild:Terrain.jpg|150px|150px]]<br />
|-<br />
![[shader_HierNameEintragen]]<br />
!Per-Pixel-Lighting Shader<br />
!Olee<br />
!Beleuchtet Flächen nach Pixeln anstatt wie OpenGl-Licht je Vertex.<br><br />
Iluminates faces per pixel istead of OpenGl-Lighting per Vertex.*<br />
![[Bild:Beispielbild.jpg|150px|150px]]<br />
|}<br />
<br />
== Cg-Shader ==<br />
{|{{Prettytable_B1}} width=100%<br />
!width=20%|Link<br />
!width=20%|Shadername<br />
!width=20%|Autor<br />
!width=40%|Kurzbeschreibung<br />
!width=150px|Bild<br />
|-<br />
![[shader_diffuse_bumpmapping(Cg)|diffuse_bumpmapping]]<br />
!diffuse_bumpmapping<br />
!igel457<br />
!Wendet diffuses Bumpmapping auf eine beliebige Oberfläche an.<br><br />
''Applies diffuse bumpmapping to a surface.''<br />
![[Bild:shader_diffuse_bumpmapping_cg.jpg|150px|150px]]<br />
|}</div>
Olee
https://wiki.delphigl.com/index.php?title=shader_PerPixel_Lighting2&diff=22722
shader PerPixel Lighting2
2009-02-23T00:37:51Z
<p>Olee: /* Besondere Vorraussetzungen */</p>
<hr />
<div>=Per-Pixel-Lighting Shader=<br />
Zurück zur [[Shadersammlung]]<br />
{|{{Prettytable_B1}} width=100%<br />
!width=60%|Beschreibung<br />
!width=20%|Autor<br />
!width=20%|Version<br />
|-<br />
|Per-Pixel-Lighting Shader<br />
|Olee<br />
|1.0<br />
|}<br />
<br />
==Bilder==<br />
{|<br />
|[[Bild:PPLShader.jpg|framed|Beispiel (Es handelt sich hierbei um EIN EINZIGES großes Quad)]]<br />
|-<br />
|}<br />
<br />
==Beschreibung==<br />
Eine Erweiterung des bestehenden PPL-Shaders aus der [[Shadersammlung]].<br />
Dabei beachtet dieser im Gegensatz zum bestehenden den Abstand zur Lichtquelle,<br />
unendlich weit entfernte Lichtquellen (Positionsvektor.W = 0) und<br />
er behandelt im Anschluss an das Licht noch den Fog.<br />
<br />
==Besondere Vorraussetzungen==<br />
Es muss eine Textur gebunden sein, sonst ist das ergebnis immer Schwarz aufgrund des Folgenden Codes:<br />
<cpp><br />
vec4 texColor = gl_Color * texture2D(Texture0, gl_TexCoord[0].xy); <br />
gl_FragColor = texColor * (gl_FrontLightModelProduct.sceneColor + lightAmbientDiffuse) + lightSpecular;<br />
</cpp><br />
Entweder man entfernt den eintrag '''*texture2D(Texture0, gl_TexCoord[0].xy)''' oder bindet vorher eine <br />
weiße-1D-Textur.<br />
<br />
Über die uniform-Variable '''ActiveLights''' kann die Anzahl der Lichtquellen angegeben werden, die für die berechnung des Lichtes verwendet werden sollen. Dabei wird von von der Lichtquelle 0 aus hochgezählt.<br />
<br />
==Code==<br />
Vertexshader:<br />
<cpp><br />
varying vec3 position;<br />
varying vec3 normal; <br />
<br />
void main(void) <br />
{<br />
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;<br />
gl_FrontColor = gl_Color;<br />
gl_TexCoord[0] = gl_MultiTexCoord0; <br />
normal = normalize(gl_NormalMatrix * gl_Normal);<br />
position = vec3(gl_ModelViewMatrix * gl_Vertex);<br />
}<br />
</cpp><br />
<br />
Fragmentshader:<br />
<cpp><br />
uniform sampler2D Texture0;<br />
uniform int ActiveLights;<br />
<br />
varying vec3 position;<br />
varying vec3 normal; <br />
<br />
void main(void) <br />
{<br />
vec3 lightDir;<br />
float attenFactor;<br />
vec3 eyeDir = normalize(-position); // camera is at (0,0,0) in ModelView space<br />
vec4 lightAmbientDiffuse = vec4(0.0,0.0,0.0,0.0);<br />
vec4 lightSpecular = vec4(0.0,0.0,0.0,0.0); <br />
<br />
// iterate all lights<br />
for (int i=0; i<ActiveLights; ++i)<br />
{<br />
// attenuation and light direction<br />
if (gl_LightSource[i].position.w != 0.0)<br />
{<br />
// positional light source<br />
float dist = distance(gl_LightSource[i].position.xyz, position);<br />
attenFactor = 1.0/( gl_LightSource[i].constantAttenuation + <br />
gl_LightSource[i].linearAttenuation * dist +<br />
gl_LightSource[i].quadraticAttenuation * dist * dist );<br />
lightDir = normalize(gl_LightSource[i].position.xyz - position);<br />
} <br />
else <br />
{ <br />
// directional light source <br />
attenFactor = 1.0; <br />
lightDir = gl_LightSource[i].position.xyz; <br />
} <br />
// ambient + diffuse <br />
lightAmbientDiffuse += gl_FrontLightProduct[i].ambient*attenFactor; <br />
lightAmbientDiffuse += gl_FrontLightProduct[i].diffuse * max(dot(normal, lightDir), 0.0) * attenFactor; <br />
// specular <br />
vec3 r = normalize(reflect(-lightDir, normal));<br />
lightSpecular += gl_FrontLightProduct[i].specular * <br />
pow(max(dot(r, eyeDir), 0.0), gl_FrontMaterial.shininess) *<br />
attenFactor; <br />
} <br />
// compute final color <br />
vec4 texColor = gl_Color * texture2D(Texture0, gl_TexCoord[0].xy); <br />
gl_FragColor = texColor * (gl_FrontLightModelProduct.sceneColor + lightAmbientDiffuse) + lightSpecular;<br />
<br />
float fog = (gl_Fog.end - gl_FogFragCoord) * gl_Fog.scale; // Intensität berechnen <br />
fog = clamp(fog, 0.0, 1.0); // Beschneiden <br />
gl_FragColor = mix(gl_Fog.color, gl_FragColor, fog); // Nebelfarbe einmischen <br />
}<br />
</cpp></div>
Olee
https://wiki.delphigl.com/index.php?title=shader_PerPixel_Lighting2&diff=22721
shader PerPixel Lighting2
2009-02-23T00:37:16Z
<p>Olee: /* Bilder */</p>
<hr />
<div>=Per-Pixel-Lighting Shader=<br />
Zurück zur [[Shadersammlung]]<br />
{|{{Prettytable_B1}} width=100%<br />
!width=60%|Beschreibung<br />
!width=20%|Autor<br />
!width=20%|Version<br />
|-<br />
|Per-Pixel-Lighting Shader<br />
|Olee<br />
|1.0<br />
|}<br />
<br />
==Bilder==<br />
{|<br />
|[[Bild:PPLShader.jpg|framed|Beispiel (Es handelt sich hierbei um EIN EINZIGES großes Quad)]]<br />
|-<br />
|}<br />
<br />
==Beschreibung==<br />
Eine Erweiterung des bestehenden PPL-Shaders aus der [[Shadersammlung]].<br />
Dabei beachtet dieser im Gegensatz zum bestehenden den Abstand zur Lichtquelle,<br />
unendlich weit entfernte Lichtquellen (Positionsvektor.W = 0) und<br />
er behandelt im Anschluss an das Licht noch den Fog.<br />
<br />
==Besondere Vorraussetzungen==<br />
Es muss eine Textur gebunden sein, sonst ist das ergebnis immer Schwarz aufgrund des Folgenden Codes:<br />
<cpp><br />
vec4 texColor = gl_Color * texture2D(Texture0, gl_TexCoord[0].xy); <br />
gl_FragColor = texColor * (gl_FrontLightModelProduct.sceneColor + lightAmbientDiffuse) + lightSpecular;<br />
</cpp><br />
Entweder man entfernt den eintrag '''*texture2D(Texture0, gl_TexCoord[0].xy)''' oder bindet vorher eine <br />
weiße-1D-Textur.<br />
<br />
Über die uniform-Variable '''ActiveLights''' kann die Anzahl der Lichtquellen angegeben werden, die für die berechnung des Lichtes verwendet werden sollen. Dabei wird von von der Lichtquelle 0 aus hochgezählt.<br />
<br />
==Code==<br />
Vertexshader:<br />
<cpp><br />
varying vec3 position;<br />
varying vec3 normal; <br />
<br />
void main(void) <br />
{<br />
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;<br />
gl_FrontColor = gl_Color;<br />
gl_TexCoord[0] = gl_MultiTexCoord0; <br />
normal = normalize(gl_NormalMatrix * gl_Normal);<br />
position = vec3(gl_ModelViewMatrix * gl_Vertex);<br />
}<br />
</cpp><br />
<br />
Fragmentshader:<br />
<cpp><br />
uniform sampler2D Texture0;<br />
uniform int ActiveLights;<br />
<br />
varying vec3 position;<br />
varying vec3 normal; <br />
<br />
void main(void) <br />
{<br />
vec3 lightDir;<br />
float attenFactor;<br />
vec3 eyeDir = normalize(-position); // camera is at (0,0,0) in ModelView space<br />
vec4 lightAmbientDiffuse = vec4(0.0,0.0,0.0,0.0);<br />
vec4 lightSpecular = vec4(0.0,0.0,0.0,0.0); <br />
<br />
// iterate all lights<br />
for (int i=0; i<ActiveLights; ++i)<br />
{<br />
// attenuation and light direction<br />
if (gl_LightSource[i].position.w != 0.0)<br />
{<br />
// positional light source<br />
float dist = distance(gl_LightSource[i].position.xyz, position);<br />
attenFactor = 1.0/( gl_LightSource[i].constantAttenuation + <br />
gl_LightSource[i].linearAttenuation * dist +<br />
gl_LightSource[i].quadraticAttenuation * dist * dist );<br />
lightDir = normalize(gl_LightSource[i].position.xyz - position);<br />
} <br />
else <br />
{ <br />
// directional light source <br />
attenFactor = 1.0; <br />
lightDir = gl_LightSource[i].position.xyz; <br />
} <br />
// ambient + diffuse <br />
lightAmbientDiffuse += gl_FrontLightProduct[i].ambient*attenFactor; <br />
lightAmbientDiffuse += gl_FrontLightProduct[i].diffuse * max(dot(normal, lightDir), 0.0) * attenFactor; <br />
// specular <br />
vec3 r = normalize(reflect(-lightDir, normal));<br />
lightSpecular += gl_FrontLightProduct[i].specular * <br />
pow(max(dot(r, eyeDir), 0.0), gl_FrontMaterial.shininess) *<br />
attenFactor; <br />
} <br />
// compute final color <br />
vec4 texColor = gl_Color * texture2D(Texture0, gl_TexCoord[0].xy); <br />
gl_FragColor = texColor * (gl_FrontLightModelProduct.sceneColor + lightAmbientDiffuse) + lightSpecular;<br />
<br />
float fog = (gl_Fog.end - gl_FogFragCoord) * gl_Fog.scale; // Intensität berechnen <br />
fog = clamp(fog, 0.0, 1.0); // Beschneiden <br />
gl_FragColor = mix(gl_Fog.color, gl_FragColor, fog); // Nebelfarbe einmischen <br />
}<br />
</cpp></div>
Olee
https://wiki.delphigl.com/index.php?title=shader_PerPixel_Lighting2&diff=22720
shader PerPixel Lighting2
2009-02-23T00:36:59Z
<p>Olee: /* Bilder */</p>
<hr />
<div>=Per-Pixel-Lighting Shader=<br />
Zurück zur [[Shadersammlung]]<br />
{|{{Prettytable_B1}} width=100%<br />
!width=60%|Beschreibung<br />
!width=20%|Autor<br />
!width=20%|Version<br />
|-<br />
|Per-Pixel-Lighting Shader<br />
|Olee<br />
|1.0<br />
|}<br />
<br />
==Bilder==<br />
{|<br />
|[[Bild:PPLShader.jpg|framed|Beispiel (Es handelt sich hierbei um EIN EINZIGES großes Quad]]<br />
|-<br />
|}<br />
<br />
==Beschreibung==<br />
Eine Erweiterung des bestehenden PPL-Shaders aus der [[Shadersammlung]].<br />
Dabei beachtet dieser im Gegensatz zum bestehenden den Abstand zur Lichtquelle,<br />
unendlich weit entfernte Lichtquellen (Positionsvektor.W = 0) und<br />
er behandelt im Anschluss an das Licht noch den Fog.<br />
<br />
==Besondere Vorraussetzungen==<br />
Es muss eine Textur gebunden sein, sonst ist das ergebnis immer Schwarz aufgrund des Folgenden Codes:<br />
<cpp><br />
vec4 texColor = gl_Color * texture2D(Texture0, gl_TexCoord[0].xy); <br />
gl_FragColor = texColor * (gl_FrontLightModelProduct.sceneColor + lightAmbientDiffuse) + lightSpecular;<br />
</cpp><br />
Entweder man entfernt den eintrag '''*texture2D(Texture0, gl_TexCoord[0].xy)''' oder bindet vorher eine <br />
weiße-1D-Textur.<br />
<br />
Über die uniform-Variable '''ActiveLights''' kann die Anzahl der Lichtquellen angegeben werden, die für die berechnung des Lichtes verwendet werden sollen. Dabei wird von von der Lichtquelle 0 aus hochgezählt.<br />
<br />
==Code==<br />
Vertexshader:<br />
<cpp><br />
varying vec3 position;<br />
varying vec3 normal; <br />
<br />
void main(void) <br />
{<br />
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;<br />
gl_FrontColor = gl_Color;<br />
gl_TexCoord[0] = gl_MultiTexCoord0; <br />
normal = normalize(gl_NormalMatrix * gl_Normal);<br />
position = vec3(gl_ModelViewMatrix * gl_Vertex);<br />
}<br />
</cpp><br />
<br />
Fragmentshader:<br />
<cpp><br />
uniform sampler2D Texture0;<br />
uniform int ActiveLights;<br />
<br />
varying vec3 position;<br />
varying vec3 normal; <br />
<br />
void main(void) <br />
{<br />
vec3 lightDir;<br />
float attenFactor;<br />
vec3 eyeDir = normalize(-position); // camera is at (0,0,0) in ModelView space<br />
vec4 lightAmbientDiffuse = vec4(0.0,0.0,0.0,0.0);<br />
vec4 lightSpecular = vec4(0.0,0.0,0.0,0.0); <br />
<br />
// iterate all lights<br />
for (int i=0; i<ActiveLights; ++i)<br />
{<br />
// attenuation and light direction<br />
if (gl_LightSource[i].position.w != 0.0)<br />
{<br />
// positional light source<br />
float dist = distance(gl_LightSource[i].position.xyz, position);<br />
attenFactor = 1.0/( gl_LightSource[i].constantAttenuation + <br />
gl_LightSource[i].linearAttenuation * dist +<br />
gl_LightSource[i].quadraticAttenuation * dist * dist );<br />
lightDir = normalize(gl_LightSource[i].position.xyz - position);<br />
} <br />
else <br />
{ <br />
// directional light source <br />
attenFactor = 1.0; <br />
lightDir = gl_LightSource[i].position.xyz; <br />
} <br />
// ambient + diffuse <br />
lightAmbientDiffuse += gl_FrontLightProduct[i].ambient*attenFactor; <br />
lightAmbientDiffuse += gl_FrontLightProduct[i].diffuse * max(dot(normal, lightDir), 0.0) * attenFactor; <br />
// specular <br />
vec3 r = normalize(reflect(-lightDir, normal));<br />
lightSpecular += gl_FrontLightProduct[i].specular * <br />
pow(max(dot(r, eyeDir), 0.0), gl_FrontMaterial.shininess) *<br />
attenFactor; <br />
} <br />
// compute final color <br />
vec4 texColor = gl_Color * texture2D(Texture0, gl_TexCoord[0].xy); <br />
gl_FragColor = texColor * (gl_FrontLightModelProduct.sceneColor + lightAmbientDiffuse) + lightSpecular;<br />
<br />
float fog = (gl_Fog.end - gl_FogFragCoord) * gl_Fog.scale; // Intensität berechnen <br />
fog = clamp(fog, 0.0, 1.0); // Beschneiden <br />
gl_FragColor = mix(gl_Fog.color, gl_FragColor, fog); // Nebelfarbe einmischen <br />
}<br />
</cpp></div>
Olee
https://wiki.delphigl.com/index.php?title=shader_PerPixel_Lighting2&diff=22719
shader PerPixel Lighting2
2009-02-23T00:35:58Z
<p>Olee: /* Per-Pixel-Lighting Shader */</p>
<hr />
<div>=Per-Pixel-Lighting Shader=<br />
Zurück zur [[Shadersammlung]]<br />
{|{{Prettytable_B1}} width=100%<br />
!width=60%|Beschreibung<br />
!width=20%|Autor<br />
!width=20%|Version<br />
|-<br />
|Per-Pixel-Lighting Shader<br />
|Olee<br />
|1.0<br />
|}<br />
<br />
==Bilder==<br />
{|<br />
|[[Bild:PPLShader.jpg|framed|Beispiel]]<br />
|-<br />
|}<br />
<br />
==Beschreibung==<br />
Eine Erweiterung des bestehenden PPL-Shaders aus der [[Shadersammlung]].<br />
Dabei beachtet dieser im Gegensatz zum bestehenden den Abstand zur Lichtquelle,<br />
unendlich weit entfernte Lichtquellen (Positionsvektor.W = 0) und<br />
er behandelt im Anschluss an das Licht noch den Fog.<br />
<br />
==Besondere Vorraussetzungen==<br />
Es muss eine Textur gebunden sein, sonst ist das ergebnis immer Schwarz aufgrund des Folgenden Codes:<br />
<cpp><br />
vec4 texColor = gl_Color * texture2D(Texture0, gl_TexCoord[0].xy); <br />
gl_FragColor = texColor * (gl_FrontLightModelProduct.sceneColor + lightAmbientDiffuse) + lightSpecular;<br />
</cpp><br />
Entweder man entfernt den eintrag '''*texture2D(Texture0, gl_TexCoord[0].xy)''' oder bindet vorher eine <br />
weiße-1D-Textur.<br />
<br />
Über die uniform-Variable '''ActiveLights''' kann die Anzahl der Lichtquellen angegeben werden, die für die berechnung des Lichtes verwendet werden sollen. Dabei wird von von der Lichtquelle 0 aus hochgezählt.<br />
<br />
==Code==<br />
Vertexshader:<br />
<cpp><br />
varying vec3 position;<br />
varying vec3 normal; <br />
<br />
void main(void) <br />
{<br />
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;<br />
gl_FrontColor = gl_Color;<br />
gl_TexCoord[0] = gl_MultiTexCoord0; <br />
normal = normalize(gl_NormalMatrix * gl_Normal);<br />
position = vec3(gl_ModelViewMatrix * gl_Vertex);<br />
}<br />
</cpp><br />
<br />
Fragmentshader:<br />
<cpp><br />
uniform sampler2D Texture0;<br />
uniform int ActiveLights;<br />
<br />
varying vec3 position;<br />
varying vec3 normal; <br />
<br />
void main(void) <br />
{<br />
vec3 lightDir;<br />
float attenFactor;<br />
vec3 eyeDir = normalize(-position); // camera is at (0,0,0) in ModelView space<br />
vec4 lightAmbientDiffuse = vec4(0.0,0.0,0.0,0.0);<br />
vec4 lightSpecular = vec4(0.0,0.0,0.0,0.0); <br />
<br />
// iterate all lights<br />
for (int i=0; i<ActiveLights; ++i)<br />
{<br />
// attenuation and light direction<br />
if (gl_LightSource[i].position.w != 0.0)<br />
{<br />
// positional light source<br />
float dist = distance(gl_LightSource[i].position.xyz, position);<br />
attenFactor = 1.0/( gl_LightSource[i].constantAttenuation + <br />
gl_LightSource[i].linearAttenuation * dist +<br />
gl_LightSource[i].quadraticAttenuation * dist * dist );<br />
lightDir = normalize(gl_LightSource[i].position.xyz - position);<br />
} <br />
else <br />
{ <br />
// directional light source <br />
attenFactor = 1.0; <br />
lightDir = gl_LightSource[i].position.xyz; <br />
} <br />
// ambient + diffuse <br />
lightAmbientDiffuse += gl_FrontLightProduct[i].ambient*attenFactor; <br />
lightAmbientDiffuse += gl_FrontLightProduct[i].diffuse * max(dot(normal, lightDir), 0.0) * attenFactor; <br />
// specular <br />
vec3 r = normalize(reflect(-lightDir, normal));<br />
lightSpecular += gl_FrontLightProduct[i].specular * <br />
pow(max(dot(r, eyeDir), 0.0), gl_FrontMaterial.shininess) *<br />
attenFactor; <br />
} <br />
// compute final color <br />
vec4 texColor = gl_Color * texture2D(Texture0, gl_TexCoord[0].xy); <br />
gl_FragColor = texColor * (gl_FrontLightModelProduct.sceneColor + lightAmbientDiffuse) + lightSpecular;<br />
<br />
float fog = (gl_Fog.end - gl_FogFragCoord) * gl_Fog.scale; // Intensität berechnen <br />
fog = clamp(fog, 0.0, 1.0); // Beschneiden <br />
gl_FragColor = mix(gl_Fog.color, gl_FragColor, fog); // Nebelfarbe einmischen <br />
}<br />
</cpp></div>
Olee
https://wiki.delphigl.com/index.php?title=Datei:PPLShader.jpg&diff=22718
Datei:PPLShader.jpg
2009-02-23T00:34:57Z
<p>Olee: hat eine neue Version von „Bild:PPLShader.jpg“ hochgeladen: Beispiel des Per-Pixel-Lighting Shaders.</p>
<hr />
<div>Beispiel des Per-Pixel-Lighting Shaders</div>
Olee
https://wiki.delphigl.com/index.php?title=Datei:PPLShader.jpg&diff=22717
Datei:PPLShader.jpg
2009-02-23T00:33:35Z
<p>Olee: Beispiel des Per-Pixel-Lighting Shaders</p>
<hr />
<div>Beispiel des Per-Pixel-Lighting Shaders</div>
Olee
https://wiki.delphigl.com/index.php?title=shader_PerPixel_Lighting2&diff=22716
shader PerPixel Lighting2
2009-02-23T00:21:18Z
<p>Olee: /* Besondere Vorraussetzungen */</p>
<hr />
<div>=Per-Pixel-Lighting Shader=<br />
Zurück zur [[Shadersammlung]]<br />
{|{{Prettytable_B1}} width=100%<br />
!width=60%|Beschreibung<br />
!width=20%|Autor<br />
!width=20%|Version<br />
|-<br />
|Per-Pixel-Lighting Shader<br />
|Olee<br />
|1.0<br />
|}<br />
<br />
==Bilder==<br />
{|<br />
|[[Bild:Beispielbild.jpg|framed|Bildbeschreibung]]<br />
|-<br />
|[[Bild:Beispielbild.jpg|framed|Bildbeschreibung]]<br />
|}<br />
<br />
==Beschreibung==<br />
Eine Erweiterung des bestehenden PPL-Shaders aus der [[Shadersammlung]].<br />
Dabei beachtet dieser im Gegensatz zum bestehenden den Abstand zur Lichtquelle,<br />
unendlich weit entfernte Lichtquellen (Positionsvektor.W = 0) und<br />
er behandelt im Anschluss an das Licht noch den Fog.<br />
<br />
==Besondere Vorraussetzungen==<br />
Es muss eine Textur gebunden sein, sonst ist das ergebnis immer Schwarz aufgrund des Folgenden Codes:<br />
<cpp><br />
vec4 texColor = gl_Color * texture2D(Texture0, gl_TexCoord[0].xy); <br />
gl_FragColor = texColor * (gl_FrontLightModelProduct.sceneColor + lightAmbientDiffuse) + lightSpecular;<br />
</cpp><br />
Entweder man entfernt den eintrag '''*texture2D(Texture0, gl_TexCoord[0].xy)''' oder bindet vorher eine <br />
weiße-1D-Textur.<br />
<br />
Über die uniform-Variable '''ActiveLights''' kann die Anzahl der Lichtquellen angegeben werden, die für die berechnung des Lichtes verwendet werden sollen. Dabei wird von von der Lichtquelle 0 aus hochgezählt.<br />
<br />
==Code==<br />
Vertexshader:<br />
<cpp><br />
varying vec3 position;<br />
varying vec3 normal; <br />
<br />
void main(void) <br />
{<br />
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;<br />
gl_FrontColor = gl_Color;<br />
gl_TexCoord[0] = gl_MultiTexCoord0; <br />
normal = normalize(gl_NormalMatrix * gl_Normal);<br />
position = vec3(gl_ModelViewMatrix * gl_Vertex);<br />
}<br />
</cpp><br />
<br />
Fragmentshader:<br />
<cpp><br />
uniform sampler2D Texture0;<br />
uniform int ActiveLights;<br />
<br />
varying vec3 position;<br />
varying vec3 normal; <br />
<br />
void main(void) <br />
{<br />
vec3 lightDir;<br />
float attenFactor;<br />
vec3 eyeDir = normalize(-position); // camera is at (0,0,0) in ModelView space<br />
vec4 lightAmbientDiffuse = vec4(0.0,0.0,0.0,0.0);<br />
vec4 lightSpecular = vec4(0.0,0.0,0.0,0.0); <br />
<br />
// iterate all lights<br />
for (int i=0; i<ActiveLights; ++i)<br />
{<br />
// attenuation and light direction<br />
if (gl_LightSource[i].position.w != 0.0)<br />
{<br />
// positional light source<br />
float dist = distance(gl_LightSource[i].position.xyz, position);<br />
attenFactor = 1.0/( gl_LightSource[i].constantAttenuation + <br />
gl_LightSource[i].linearAttenuation * dist +<br />
gl_LightSource[i].quadraticAttenuation * dist * dist );<br />
lightDir = normalize(gl_LightSource[i].position.xyz - position);<br />
} <br />
else <br />
{ <br />
// directional light source <br />
attenFactor = 1.0; <br />
lightDir = gl_LightSource[i].position.xyz; <br />
} <br />
// ambient + diffuse <br />
lightAmbientDiffuse += gl_FrontLightProduct[i].ambient*attenFactor; <br />
lightAmbientDiffuse += gl_FrontLightProduct[i].diffuse * max(dot(normal, lightDir), 0.0) * attenFactor; <br />
// specular <br />
vec3 r = normalize(reflect(-lightDir, normal));<br />
lightSpecular += gl_FrontLightProduct[i].specular * <br />
pow(max(dot(r, eyeDir), 0.0), gl_FrontMaterial.shininess) *<br />
attenFactor; <br />
} <br />
// compute final color <br />
vec4 texColor = gl_Color * texture2D(Texture0, gl_TexCoord[0].xy); <br />
gl_FragColor = texColor * (gl_FrontLightModelProduct.sceneColor + lightAmbientDiffuse) + lightSpecular;<br />
<br />
float fog = (gl_Fog.end - gl_FogFragCoord) * gl_Fog.scale; // Intensität berechnen <br />
fog = clamp(fog, 0.0, 1.0); // Beschneiden <br />
gl_FragColor = mix(gl_Fog.color, gl_FragColor, fog); // Nebelfarbe einmischen <br />
}<br />
</cpp></div>
Olee
https://wiki.delphigl.com/index.php?title=shader_PerPixel_Lighting2&diff=22715
shader PerPixel Lighting2
2009-02-23T00:19:31Z
<p>Olee: /* Shadername */</p>
<hr />
<div>=Per-Pixel-Lighting Shader=<br />
Zurück zur [[Shadersammlung]]<br />
{|{{Prettytable_B1}} width=100%<br />
!width=60%|Beschreibung<br />
!width=20%|Autor<br />
!width=20%|Version<br />
|-<br />
|Per-Pixel-Lighting Shader<br />
|Olee<br />
|1.0<br />
|}<br />
<br />
==Bilder==<br />
{|<br />
|[[Bild:Beispielbild.jpg|framed|Bildbeschreibung]]<br />
|-<br />
|[[Bild:Beispielbild.jpg|framed|Bildbeschreibung]]<br />
|}<br />
<br />
==Beschreibung==<br />
Eine Erweiterung des bestehenden PPL-Shaders aus der [[Shadersammlung]].<br />
Dabei beachtet dieser im Gegensatz zum bestehenden den Abstand zur Lichtquelle,<br />
unendlich weit entfernte Lichtquellen (Positionsvektor.W = 0) und<br />
er behandelt im Anschluss an das Licht noch den Fog.<br />
<br />
==Besondere Vorraussetzungen==<br />
Es muss eine Textur gebunden sein, sonst ist das ergebnis immer Schwarz aufgrund des Folgenden Codes:<br />
<cpp><br />
vec4 texColor = gl_Color * texture2D(Texture0, gl_TexCoord[0].xy); <br />
gl_FragColor = texColor * (gl_FrontLightModelProduct.sceneColor + lightAmbientDiffuse) + lightSpecular;<br />
</cpp><br />
Entweder man entfernt den eintrag '''*texture2D(Texture0, gl_TexCoord[0].xy)''' oder bindet vorher eine <br />
weiße-1D-Textur.<br />
<br />
Über die uniform-Variable '''ActiveLights''' kann die Anzahl der Lichtquellen angegeben werden, die für die berechnung des Lichtes verwendet werden sollen.<br />
<br />
==Code==<br />
Vertexshader:<br />
<cpp><br />
varying vec3 position;<br />
varying vec3 normal; <br />
<br />
void main(void) <br />
{<br />
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;<br />
gl_FrontColor = gl_Color;<br />
gl_TexCoord[0] = gl_MultiTexCoord0; <br />
normal = normalize(gl_NormalMatrix * gl_Normal);<br />
position = vec3(gl_ModelViewMatrix * gl_Vertex);<br />
}<br />
</cpp><br />
<br />
Fragmentshader:<br />
<cpp><br />
uniform sampler2D Texture0;<br />
uniform int ActiveLights;<br />
<br />
varying vec3 position;<br />
varying vec3 normal; <br />
<br />
void main(void) <br />
{<br />
vec3 lightDir;<br />
float attenFactor;<br />
vec3 eyeDir = normalize(-position); // camera is at (0,0,0) in ModelView space<br />
vec4 lightAmbientDiffuse = vec4(0.0,0.0,0.0,0.0);<br />
vec4 lightSpecular = vec4(0.0,0.0,0.0,0.0); <br />
<br />
// iterate all lights<br />
for (int i=0; i<ActiveLights; ++i)<br />
{<br />
// attenuation and light direction<br />
if (gl_LightSource[i].position.w != 0.0)<br />
{<br />
// positional light source<br />
float dist = distance(gl_LightSource[i].position.xyz, position);<br />
attenFactor = 1.0/( gl_LightSource[i].constantAttenuation + <br />
gl_LightSource[i].linearAttenuation * dist +<br />
gl_LightSource[i].quadraticAttenuation * dist * dist );<br />
lightDir = normalize(gl_LightSource[i].position.xyz - position);<br />
} <br />
else <br />
{ <br />
// directional light source <br />
attenFactor = 1.0; <br />
lightDir = gl_LightSource[i].position.xyz; <br />
} <br />
// ambient + diffuse <br />
lightAmbientDiffuse += gl_FrontLightProduct[i].ambient*attenFactor; <br />
lightAmbientDiffuse += gl_FrontLightProduct[i].diffuse * max(dot(normal, lightDir), 0.0) * attenFactor; <br />
// specular <br />
vec3 r = normalize(reflect(-lightDir, normal));<br />
lightSpecular += gl_FrontLightProduct[i].specular * <br />
pow(max(dot(r, eyeDir), 0.0), gl_FrontMaterial.shininess) *<br />
attenFactor; <br />
} <br />
// compute final color <br />
vec4 texColor = gl_Color * texture2D(Texture0, gl_TexCoord[0].xy); <br />
gl_FragColor = texColor * (gl_FrontLightModelProduct.sceneColor + lightAmbientDiffuse) + lightSpecular;<br />
<br />
float fog = (gl_Fog.end - gl_FogFragCoord) * gl_Fog.scale; // Intensität berechnen <br />
fog = clamp(fog, 0.0, 1.0); // Beschneiden <br />
gl_FragColor = mix(gl_Fog.color, gl_FragColor, fog); // Nebelfarbe einmischen <br />
}<br />
</cpp></div>
Olee
https://wiki.delphigl.com/index.php?title=shader_PerPixel_Lighting2&diff=22714
shader PerPixel Lighting2
2009-02-23T00:17:36Z
<p>Olee: Die Seite wurde neu angelegt: =Shadername= Zurück zur Shadersammlung {|{{Prettytable_B1}} width=100% !width=60%|Beschreibung !width=20%|Autor !width=20%|Version |- |Per-Pixel-Lighting Shader |O...</p>
<hr />
<div>=Shadername=<br />
Zurück zur [[Shadersammlung]]<br />
{|{{Prettytable_B1}} width=100%<br />
!width=60%|Beschreibung<br />
!width=20%|Autor<br />
!width=20%|Version<br />
|-<br />
|Per-Pixel-Lighting Shader<br />
|Olee<br />
|1.0<br />
|}<br />
<br />
==Bilder==<br />
{|<br />
|[[Bild:Beispielbild.jpg|framed|Bildbeschreibung]]<br />
|-<br />
|[[Bild:Beispielbild.jpg|framed|Bildbeschreibung]]<br />
|}<br />
<br />
==Beschreibung==<br />
Eine Erweiterung des bestehenden PPL-Shaders aus der [[Shadersammlung]].<br />
Dabei beachtet dieser im Gegensatz zum bestehenden den Abstand zur Lichtquelle,<br />
unendlich weit entfernte Lichtquellen (Positionsvektor.W = 0) und<br />
er behandelt im Anschluss an das Licht noch den Fog.<br />
<br />
==Besondere Vorraussetzungen==<br />
Es muss eine Textur gebunden sein, sonst ist das ergebnis immer Schwarz aufgrund des Folgenden Codes:<br />
<cpp><br />
vec4 texColor = gl_Color * texture2D(Texture0, gl_TexCoord[0].xy); <br />
gl_FragColor = texColor * (gl_FrontLightModelProduct.sceneColor + lightAmbientDiffuse) + lightSpecular;<br />
</cpp><br />
Entweder man entfernt den eintrag '''*texture2D(Texture0, gl_TexCoord[0].xy)''' oder bindet vorher eine <br />
weiße-1D-Textur.<br />
<br />
Über die uniform-Variable '''ActiveLights''' kann die Anzahl der Lichtquellen angegeben werden, die für die berechnung des Lichtes verwendet werden sollen.<br />
<br />
==Code==<br />
Vertexshader:<br />
<cpp><br />
varying vec3 position;<br />
varying vec3 normal; <br />
<br />
void main(void) <br />
{<br />
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;<br />
gl_FrontColor = gl_Color;<br />
gl_TexCoord[0] = gl_MultiTexCoord0; <br />
normal = normalize(gl_NormalMatrix * gl_Normal);<br />
position = vec3(gl_ModelViewMatrix * gl_Vertex);<br />
}<br />
</cpp><br />
<br />
Fragmentshader:<br />
<cpp><br />
uniform sampler2D Texture0;<br />
uniform int ActiveLights;<br />
<br />
varying vec3 position;<br />
varying vec3 normal; <br />
<br />
void main(void) <br />
{<br />
vec3 lightDir;<br />
float attenFactor;<br />
vec3 eyeDir = normalize(-position); // camera is at (0,0,0) in ModelView space<br />
vec4 lightAmbientDiffuse = vec4(0.0,0.0,0.0,0.0);<br />
vec4 lightSpecular = vec4(0.0,0.0,0.0,0.0); <br />
<br />
// iterate all lights<br />
for (int i=0; i<ActiveLights; ++i)<br />
{<br />
// attenuation and light direction<br />
if (gl_LightSource[i].position.w != 0.0)<br />
{<br />
// positional light source<br />
float dist = distance(gl_LightSource[i].position.xyz, position);<br />
attenFactor = 1.0/( gl_LightSource[i].constantAttenuation + <br />
gl_LightSource[i].linearAttenuation * dist +<br />
gl_LightSource[i].quadraticAttenuation * dist * dist );<br />
lightDir = normalize(gl_LightSource[i].position.xyz - position);<br />
} <br />
else <br />
{ <br />
// directional light source <br />
attenFactor = 1.0; <br />
lightDir = gl_LightSource[i].position.xyz; <br />
} <br />
// ambient + diffuse <br />
lightAmbientDiffuse += gl_FrontLightProduct[i].ambient*attenFactor; <br />
lightAmbientDiffuse += gl_FrontLightProduct[i].diffuse * max(dot(normal, lightDir), 0.0) * attenFactor; <br />
// specular <br />
vec3 r = normalize(reflect(-lightDir, normal));<br />
lightSpecular += gl_FrontLightProduct[i].specular * <br />
pow(max(dot(r, eyeDir), 0.0), gl_FrontMaterial.shininess) *<br />
attenFactor; <br />
} <br />
// compute final color <br />
vec4 texColor = gl_Color * texture2D(Texture0, gl_TexCoord[0].xy); <br />
gl_FragColor = texColor * (gl_FrontLightModelProduct.sceneColor + lightAmbientDiffuse) + lightSpecular;<br />
<br />
float fog = (gl_Fog.end - gl_FogFragCoord) * gl_Fog.scale; // Intensität berechnen <br />
fog = clamp(fog, 0.0, 1.0); // Beschneiden <br />
gl_FragColor = mix(gl_Fog.color, gl_FragColor, fog); // Nebelfarbe einmischen <br />
}<br />
</cpp></div>
Olee