57
Vertex- und Fragment Programs 4. Vorlesung GPU Programmierung Thorsten Grosch

Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Vertex- und Fragment Programs

4. VorlesunggGPU Programmierung

Thorsten Grosch

Page 2: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Standard OpenGL Pipeline verändernStandard OpenGL Pipeline verändern

Bisher: Jeder glVertex(…) Punkt durchläuft dieBisher: Jeder glVertex(…) Punkt durchläuft die Standard OpenGL PipelineJetzt: Funktionalität verschiedener Stufen der Pipeline kann verändert werdenkann verändert werdenVeränderungen sind möglich auf Ebene von

(Eck-)Punkten (Vertex-Program)(Eck-)Punkten (Vertex-Program) Grafikprimitiven (Geometry/Tessellation-Program) Pixeln (Fragment-Program)

Thorsten Grosch - 2 -

Page 3: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Die programmierbare PipelineDie programmierbare PipelineVertex Program

(V t Sh d )(Vertex Shader)Programm pro Eckpunkt

Fragment Program(Pixel Shader)

Thorsten Grosch - 3 -

(Pixel Shader)Programm pro Pixel

Page 4: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Eigenschaften Vertex ProgramEigenschaften Vertex Program

Arbeitet nur auf einem EckpunktArbeitet nur auf einem EckpunktKeine Information über Topologie (andere Eckpunkte) Keine Punkte erzeugen oder löschenKeine Punkte erzeugen oder löschen

Wahlfreier Zugriff auf TexturspeicherWahlfreier Zugriff auf TexturspeicherAuslesen des abgespeicherten Wertes an einer beliebigen Position innerhalb einer Textur (Textur =beliebigen Position innerhalb einer Textur (Textur = 2D Array mit Daten)

Thorsten Grosch - 4 -

Page 5: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Normale“ Aufgaben Vertex Program„Normale Aufgaben Vertex Program

EckpunkttransformationEckpunkttransformationWeltkoordinaten in Kamerakoordinaten (Modelview)Transformation in kanonisches Volumen (Projection)( j )

NormalentransformationTransponierte Inverse

Beleuchtung in Kamerakoordinaten

Automatische Generierung von Texturkoordinaten ...

Thorsten Grosch - 5 -

Page 6: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Was gehört nicht ins Vertex ProgramWas gehört nicht ins Vertex Program

Clipping am kanonischen Volumen (-w +w)Clipping am kanonischen Volumen (-w…+w)Perspektivische Division (x/w, y/w, z/w) (Color Clamping an [0 1])(Color Clamping an [0,1])

Thorsten Grosch - 6 -

Page 7: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Vertex Program schematischVertex Program schematischTexturspeicherp

Position (Welt) Position (kan Vol + )

Vertex

Position (Welt)

Farbe

Normale

Position (kan.Vol. –w..+w)

Farbe

ProgramTexturkoordinaten

Benutzerdefinierte Att ib t

Texturkoordinaten

Benutzerdefinierte AttributeAttribute Attribute

OpenGL State(Lichtquellen, Materialien, Matrizen)

Benutzerdefinierte (uniform)Daten

Thorsten Grosch - 7 -

Page 8: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Eigenschaften Fragment ProgramEigenschaften Fragment Program FragmentProgramProgram

Vertex Processor

Rasterizer Fragment Processor

Arbeitet am Ende der PipelineWird für jedes zu zeichnende Fragment (Pixel)

Processor

d ü jedes u e c e de ag e t ( e )aufgerufenArbeitet nur auf aktuellem Fragment (Pixel)

K i L d S h ib f d Pi l i F b ffKein Lesen oder Schreiben auf andere Pixel im FramebufferEingabe: Interpolierte Werte aus EckpunktenWahlfreier Zugriff auf Texturspeicher

Thorsten Grosch - 8 -

Wahlfreier Zugriff auf Texturspeicher

Page 9: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Fragment ProgramFragment Program„Normale“ Aufgaben Fragment Program„Normale Aufgaben Fragment Program

Farbe des Pixels festlegenTexturzugriffEff kt ( B N b l)Effekte (z.B. Nebel)

Was ein Fragment-Program nicht leistetWas ein Fragment-Program nicht leistetDepth-TestStencil-Test Wird typischerweise nach dem Fragment-

P d h füh tAlpha-Blending

Program durchgeführt

Ausnahme ist z.B. early-z (wird von GPU automatisch gesteuert)(wird von GPU automatisch gesteuert)

Thorsten Grosch - 9 -

Page 10: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Fragment Program schematischFragment Program schematischTexturspeicherp

Fragment

Interpolierte Farbe

InterpolierteTexturkoordinaten

PixelfarbegProgram

Texturkoordinaten

Interpoliertebenutzerdefinierte

(Tiefenwert)

benutzerdefinierteAttribute

OpenGL State(Lichtquellen, Materialien, Matrizen)

Benutzerdefinierte (uniform)Daten

Thorsten Grosch - 10 -

Page 11: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

GPU programmieren DamalsGPU programmieren - DamalsProgrammierung in MaschinenspracheProgrammierung in MaschinenspracheProgramme werden sehr schnell unübersichtlich ...

vs 1 0vs.1.0 def c94, 0.18f, 0.18f, 0.18f, 0.18f ; Scalar for cube map adjustmentm4x4 oPos, v0, c16 ; OutPos = ObjSpacePos * Composite WVP-Matrix mov oT0.xy, v7 ;Passthrough texcoord 0 for bump map addressing add r8, c28, -v0 ;View direction m3x3 r9, r8, c20 ;Transform view vector from object space to env spacedp3 r11.x, r9, r9 ;Magnitude^2

11 11 1/rsq r11.y, r11.x ;1/mag mul oT4.xyz, r9, r11.y ;Normalize ...

Thorsten Grosch - 11 -

Page 12: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

GPU programmieren HeuteGPU programmieren - HeuteProgrammierung in einer HochspracheProgrammierung in einer HochspracheCompiler zur Übersetzung in MaschinenspracheErste Shading-Languages

RenderMan (Pixar 1988)Stanford Real-Time Shading Language (2001)

AktuellAktuellCg (NVIDIA, OpenGL und DirectX)HLSL (Microsoft, DirectX)O GL Sh di L (GLSL)OpenGL Shading Language (GLSL)

Weitere (GPGPU)Cuda (NVIDIA), OpenCLCuda (NVIDIA), OpenCL

Thorsten Grosch - 12 -

Page 13: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

OpenGL Shading Language (GLSL)OpenGL Shading Language (GLSL)Teil des OpenGL 2.0 StandardsTeil des OpenGL 2.0 StandardsSyntax orientiert sich an C / C++

FunktionenEi f h D (fl i b l)Einfache Datentypen (float, int, bool)StrukturenArraysyBedingungen SchleifenAber: Keine ZeigerAber: Keine Zeiger

Beliebige Länge der Shader-Programme

Thorsten Grosch - 13 -

Page 14: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Sprachmerkmale von GLSLSprachmerkmale von GLSLVektoren und MatrizenVektoren und Matrizen

vec4 (Vektor bestehend aus 4 float-Werten), …mat4 (4x4 float-Matrix), …

Operationen auf Vektoren und Matrizen (SIMD)o = m * n (Matrixmultiplikation)u v + w (Vektoraddition)

mat4 n, m, o; u = v + w (Vektoraddition)u = cross(v,w) (Kreuzprodukt)f = dot(u,v) (Skalarprodukt)

vec4 u, v, w; float f;

u = mod(v, w) (komp.weises Modulo % für float Vektoren)…

Vi l i h i h F k iViele weitere mathematische Funktionensin(x), cos(x), tan(x), …http://www.opengl.org/sdk/libs/OpenSceneGraph/glsl quickref.pdf

Thorsten Grosch - 14 -

p p g g p p g _q p

Page 15: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Swizzle / MaskingSwizzle / MaskingSwizzle (Komponenten eines Vektors vertauschen)Swizzle (Komponenten eines Vektors vertauschen)

Rechte Seite der Zuweisungu = v.zxyw

zxvu = xy

vu =yz

vu =ww

vu =

Masking (Nur in bestimmte Komponenten schreiben)Linke Seite der Zuweisunggv.xy = v + n

Skalare Werte mehrfach zuweisen

xxxnvv += yyy

nvv +=wz

vv , unverändert

Skalare Werte mehrfach zuweisenu.xy = dot(v.xyz,w.xyz)

zzyyxxyxwvwvwvuu ++==

uu unverändertwz

uu , unverändert

Thorsten Grosch - 15 -

Page 16: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

TypkonvertierungTypkonvertierung

TypkonvertierungTypkonvertierungAnders als in C

• int i;• float f = float(i); // Fehler bei f = i

Konvertierung muß meist von Hand gemacht werdenBeispiel

4 4(1 0 2 0 3 0 1 0)• vec4 v = vec4(1.0, 2.0, 3.0, 1.0);• vec3 v2 = v.xyz; // Fehler bei v2 = v

Thorsten Grosch - 16 -

Page 17: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Ein und Ausgabe beiEin- und Ausgabe bei Shader Programmen

Zugriff auf Eigenschaften des aktuellen Eckpunktes bzw. Fragments über vordefinierte VariablenAusgabe der Shader-Programme über vordefinierte Ausgabe-VariablenAusgabe bei Vertex-Programmen

Werte werden linear interpoliert• Farbe Texturkoordinaten• Farbe, Texturkoordinaten, …

Zugriff in Fragment Shader auf interpolierte WerteZusätzlich eigene Ausgabe-Variablen

i i bl “ ät h d• „varying variables“ – später mehr dazu …

Thorsten Grosch - 17 -

Page 18: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Ein und AusgabeparameterEin- und Ausgabeparameter

SAusgabe

• Position (gl_Position)

Vertex ShaderEingabe

• Position (gl_Vertex)• Farbe (gl_FrontColor)• Texturkoordinaten (gl_TexCoord[])

(g _ )• Farbe (gl_Color)• Normale (gl_Normal)• Texturkoordinaten (gl_MultiTexCoordn)

AusgabeFragment Shader

Eingabe Ausgabe• Pixelfarbe (gl_FragColor)• Tiefenwert (gl_FragDepth)

g• Farbe (gl_Color)• Texturkoordinaten (gl_TexCoord[])

Komplette Liste http://www.opengl.org/sdk/libs/OpenSceneGraph/glsl_quickref.pdf

Thorsten Grosch - 18 -

Page 19: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

GLSL ProgrammierungGLSL ProgrammierungShader Objekt erzeugenShader Objekt erzeugen

vertexShader = glCreateShader(GL_VERTEX_SHADER);

Source-Code bereitstellenQuelltext aus Textdatei einlesen und übergebenglShaderSource(vertexShader, 1, &sourcePtr, NULL);

sourcePtr vom Typ char*(„string“)

Shader compilierenglCompileShader(vertexShader);

y ( g )

glCompileShader(vertexShader);

Thorsten Grosch - 19 -

Page 20: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

GLSL ProgrammierungGLSL ProgrammierungShader Program Objekt erzeugenShader Program Objekt erzeugen

program = glCreateProgram();

Shader Program mit Shadern bestücken

Shader Program

VertexShaderg

glAttachShader(program,vertexShader);

Program linken

Shader

GeometryShader

glLinkProgram(program);

Program benutzen FragmentShader

glUseProgram(program);

Zurück zur OpenGL Fixed-Function Pipeline( )glUseProgram(0);

Fehlerabfrage: siehe Beispielprogramme

Thorsten Grosch - 20 -

Fehlerabfrage: siehe Beispielprogramme

Page 21: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Uniform VariablenUniform VariablenBenutzerdefinierte Daten in Shader ladenBenutzerdefinierte Daten in Shader laden

Innerhalb von Shadern nur Lesezugriff Wert konstant für GrafikprimitivParameter mit seltener Änderung z B TimerParameter mit seltener Änderung, z.B. Timer

Applikation (OpenGL Programm)

// Program muss aktiv sein Shader// Program muss aktiv seinglUseProgram(shader);

// Speicherstelle innerhalb // Sh d P bf

Shaderuniform float Time;

void main()// Shader-Program abfragenGLuint loc;loc=glGetUniformLocation(shader, "Time");

(){

…}

// Wert setzenglUniform1f(loc, 2.314);

Wenn der String nicht gefunden wird, dann wird loc 1 zurückgegeben

Thorsten Grosch - 21 -

dann wird loc = -1 zurückgegeben

Page 22: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Zugriff auf OpenGL StateZugriff auf OpenGL-StateZugriff über vordefinierte Uniform-VariablenZugriff über vordefinierte Uniform VariablenWerden automatisch gesetztBeispiele

gl_ModelViewMatrixgl_ModelViewProjectionMatrixgl ProjectionMatrixgl_ProjectionMatrixgl_ModelViewMatrixInverseTransposegl_LightSource[0..n]gl FrontMaterialgl_FrontMaterial…http://www.opengl.org/sdk/libs/OpenSceneGraph/glsl_quickref.pdf

Thorsten Grosch - 22 -

Page 23: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Minimales GLSL ProgrammMinimales GLSL-ProgrammVertex-ShaderVertex Shadervoid main(){{

gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;gl_FrontColor = gl_Color;

}

Fragment-Shader

}

Fragment Shadervoid main(){{

gl_FragColor = gl_Color;}

Thorsten Grosch - 23 -

Page 24: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Einfache Beleuchtung mit GLSLEinfache Beleuchtung mit GLSLBeleuchtung passiert im „Standard“ OpenGL VertexBeleuchtung passiert im „Standard OpenGL Vertex ProgramBei eigenem Vertex Program muss Beleuchtung selbst programmiert werdenprogrammiert werdenNormale Beleuchtung mit OpenGL

Transformation in KamerakoordinatenTransformation der Normalen mit transponierter InverseBeleuchtung pro Eckpunkt in Kamerakoordinaten

Vereinfachte VarianteVereinfachte Variante1 LichtBeleuchtung in WeltkoordinatenNur diffuse Beleuchtung

Thorsten Grosch - 24 -

Page 25: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Gouraud Shading im Vertex ProgramGouraud Shading im Vertex Program

Szenario: LichtquelleNSzenario:

void main()

EckpunktN

lightVec

o d a (){vec3 normal = normalize(gl_Normal); // Falls nicht normiert

vec3 lightVec = gl LightSource[0] position xyz // Vektor zurvec3 lightVec = gl_LightSource[0].position.xyz – // Vektor zurgl_Vertex.xyz; // Lichtquelle

lightVec = normalize(lightVec); // Normalisierenfloat cosinus = dot(normal lightVec); // Empfängercosinusfloat cosinus = dot(normal, lightVec); // Empfängercosinusgl_FrontColor = gl_FrontMaterial.diffuse * // Farbe berechnen

gl_LightSource[0].diffuse *icosinus;

gl_Position = ftransform(); // Transformation in kanonisches Volumen}

Thorsten Grosch - 25 -

}ftransform(): Fixed-Function-Pipeline-TransformEntspricht gl_ModelViewProjectionMatrix * gl_Vertex, aber evtl. andere Rundungsgenauigkeit

Page 26: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Phong ShadingPhong ShadingBeleuchtung pro Pixel im Fragment ProgramBeleuchtung pro Pixel im Fragment ProgramNormalen müssen interpoliert werdenProblem mit OpenGL

Normalen werden nach der ModelView-Transformation weggeworfenPosition des Eckpunktes wird nach dem Clipping p pp gweggeworfen

Normalen und Position müssen an Fragment Program weitergegeben werdenweitergegeben werden

Nur wie?

Thorsten Grosch - 26 -

Page 27: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Werteübergabe von Vertex ProgramWerteübergabe von Vertex Program an Fragment Program

GLSLNormalen und Position in „varying variables“ ablegenvarying variablesvarying variables

• Benutzerdefinierte Variablen• Können beliebige Werte enthalten (Geschwindigkeit, …)• Lineare Interpolation zwischen den Eckpunkten

CgCg„varying variables“ existieren dort nichtNormale und Position in Texturkoordinaten ablegenT t k di t d l d i i bl “Texturkoordinaten werden analog zu den „varying variables“ zwischen den Eckpunkten interpoliert

Thorsten Grosch - 27 -

Page 28: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Phong Shading Vertex ProgramPhong Shading Vertex Program

varying vec4 position;varying vec3 normal;

void main()void main(){

position = gl_Vertex;normal = gl_Normal;gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;

}

Thorsten Grosch - 28 -

Page 29: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Phong Shading Fragment ProgramPhong Shading Fragment Program

varying vec4 position;varying vec4 position;varying vec3 normal;

void main()void main(){

vec3 normal = normalize(normal);3 li htV l Li htS [0] iti itivec3 lightVec = gl_LightSource[0].position.xyz - position.xyz;

lightVec = normalize(lightVec);

float cosinus dot(normal lightVec);float cosinus = dot(normal, lightVec);

gl_FragColor = gl_FrontMaterial.diffuse * gl LightSource[0].diffuse * cosinus;gl_LightSource[0].diffuse cosinus;

}

Thorsten Grosch - 29 -Seit Version 1.4 wird das „varying“ weggelassen,Stattdessen wird mit „in“ bzw. „out“ die Richtung angegeben

Page 30: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Vergleich Gouraud Phong ShadingVergleich Gouraud – Phong Shading

Thorsten Grosch - 30 -

Page 31: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

TexturenTexturenIm Rahmen der GPU-Programmierung nicht nur zurIm Rahmen der GPU Programmierung nicht nur zur Speicherung von Farbinformationen gedacht

Normalen (Bump-Mapping)Tiefeninformationen (Depth Peeling)Tiefeninformationen (Depth-Peeling)Strahlen (Ray-Tracing)…

Eigener Datentyp in GLSLsampler1D, sampler2D, sampler3D (1,2 und 3D-Texturen)samplerCube (Cube Maps)sampler1DShadow, sampler2DShadow (Depth Maps)

T t i d if V i bl Sh dTextur wird per uniform-Variable an Shader übergeben

Thorsten Grosch - 31 -

Page 32: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Zugriff auf TexturenZugriff auf TexturenTexturzugriff in (Fragment) Shader an PositionTexturzugriff in (Fragment) Shader an Position gl_TexCoord[0].st

uniform sampler2D simpleTexture;uniform sampler2D simpleTexture;

void main(){{

vec3 value = texture2D(simpleTexture, gl_TexCoord[0].st).xyz;…

}}

Thorsten Grosch - 32 -

Page 33: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Zugriff auf TexturenZugriff auf TexturenAlternativ: Texturzugriff über Integer Pixel Koordinaten g g(funktioniert nur bei neueren Grafikkarten)gl_FragCoord.xy ist die Pixelposition des aktuellen FragmentsTypischer Zugriff bei Deep FramebufferTypischer Zugriff bei Deep Framebuffer

uniform sampler2D simpleTexture;

void main(){

ivec2 pixelCoords = ivec2(gl FragCoord.xy);p (g _ g y);vec3 value = texelFetch2D(simpleTexture, pixelCoords,0);…

}}

Thorsten Grosch - 33 -

Page 34: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Texturen an Shader übergebenTexturen an Shader übergebenTextur generieren und ggf. mit Daten füllen (Applikation)Textur generieren und ggf. mit Daten füllen (Applikation)

glGenTextures(1, &texture);glBindTexture(GL_TEXTURE_2D, texture);glTexParameterf(GL TEXTURE 2D GL TEXTURE WRAP S GL CLAMP);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);…glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,

GL LINEAR);GL_LINEAR);…

Textur binden und an Shader übergeben (Applikation)g ( pp )glBindTexture(GL_TEXTURE_2D, texture);GLint location = glGetUniformLocation(shaderProgram, "simpleTexture");glUniform1i(location, 0);glUniform1i(location, 0);

Sieht „komisch“ aus …Übergibt aktuell gebundene Textur

Thorsten Grosch - 34 -

Übergibt aktuell gebundene Textur

Page 35: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Mehrere Texturen übergebenMehrere Texturen übergebenglGenTextures (1, &positionTextureId);glBindTexture (GL_TEXTURE_2D, positionTextureId);lT P t i (GL TEXTURE 2D GL TEXTURE MIN FILTER GL NEAREST)glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

glGenTextures (1 &normalTextureId);glGenTextures (1, &normalTextureId);glBindTexture (GL_TEXTURE_2D, normalTextureId);glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

glActiveTexture(GL_TEXTURE0);glBindTexture (GL_TEXTURE_2D, positionTextureId); glActiveTexture(GL TEXTURE1);glActiveTexture(GL_TEXTURE1);glBindTexture (GL_TEXTURE_2D, normalTextureId);…

Aktuelle Textureinheit festlegeng

Thorsten Grosch - 35 -

Page 36: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Mehrere Texturen übergebenMehrere Texturen übergeben

GLint p_location = glGetUniformLocation(shaderProgram, „positionTexture");glUniform1i(p_location, 0);

GLint n_location = glGetUniformLocation(shaderProgram, „normalTexture");glUniform1i(n_location, 1);

Die Nummer i entspricht hier der Textur, die mitglActiveTexture(GL_TEXTURE<i>) gesetzt wurdegesetzt wurde

Thorsten Grosch - 36 -

Page 37: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Multi Pass RenderingMulti-Pass RenderingViele Algorithmen benötigen Zugriff auf die NachbarnViele Algorithmen benötigen Zugriff auf die Nachbarn eines Pixels

Filter in der BildverarbeitungPost Processing Effekte (z B Glow Effekt siehe Übung)Post-Processing Effekte (z.B. Glow-Effekt, siehe Übung)

Zugriff auf benachbarte Pixel des Framebuffersginnerhalb eines Fragment-Programs nicht möglich

Lösung: Multi Pass RenderingLösung: Multi-Pass RenderingErgebnis eines Rendering-Schrittes als Eingabe des folgenden Schrittes verwendenD d ül i Bild h h h D hlä fDas endgültige Bild entsteht erst nach mehreren Durchläufen

Thorsten Grosch - 37 -

Page 38: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Multi Pass RenderingMulti-Pass RenderingSzene „normal“ rendernSzene „normal rendernFramebuffer auslesen und in Textur kopierenTextur an Shader-Program übergebenViewport auf Größe der Textur setzenBildschirmfüllendes Rechteck zeichnen

glBegin(GL_QUADS);glTexCoord2f(0,0);glVertex2f(-1,-1);glTexCoord2f(1,0);

(1,1) (1,1)(0,1)(-1,1)

Fü j d T l d T t i d i F t

glVertex2f( 1,-1);…

glEnd()(-1,-1) (0,0) (1,0) (1,-1)

Für jedes Texel der Textur wird genau ein Fragment generiertZugriff auf Nachbarpixel nun über Texturzugriff

Thorsten Grosch - 38 -

Page 39: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Bsp Multi-PassBsp. Multi-PassAuf Original addieren

(Bild aus GPU Gems)(Bild aus GPU Gems)

Glühende Teile in Textur rendern

Horizontaler Filterauf Textur anwenden

Vertikaler Filterauf Textur anwenden

Ein Filter benötigt Informationen über NachbarpixelBild muß als Textur vorliegen, da kein Zugriff auf Nachbarpixel im Framebuffer möglich

Glow Effect, siehe Übung

Thorsten Grosch - 39 -

Page 40: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Frame Buffer ObjectsFrame Buffer Objects

Direktes Rendern in TexturDirektes Rendern in TexturBild wird nicht angezeigtKein Kopiervorgang nötig für Framebuffer TexturKein Kopiervorgang nötig für Framebuffer Textur

Die Alternative glCopyTexImage2D(…) kopiert den Framebufferinhalt in eine Textur

BedingungenMind. 1 Color Textur muß gesetzt seinGröße für alle Texturen muß definiert und gleich sein

Thorsten Grosch - 40 -

Page 41: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

FrameBufferObjectsFrameBufferObjects// FBO generierengglGenFramebuffersEXT (1, &myFB);// als aktuellen FBO setzenglBindFramebufferEXT (GL FRAMEBUFFER EXT, myFB);g ( _ _ , y );// Textur zuweisenglFramebufferTexture2DEXT (GL_FRAMEBUFFER_EXT,

GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, colorTextureId, 0);_ _ _ _ _ )glFramebufferTexture2DEXT (GL_FRAMEBUFFER_EXT,

GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, depthTextureId, 0);….

glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, myFB); // FBO aktivieren…// alles hier wird in die Textur gezeichnet (und ist nicht direkt sichtbar!)…glBindFramebufferEXT (GL FRAMEBUFFER EXT, 0); // FBO deaktiviereng ( _ _ , );

Thorsten Grosch - 41 -Bemerkung: Eine Einschränkung der GPU ist, dass eine Textur nie gleichzeitig als Eingabe und als Ausgabe verwendet werden darf

Page 42: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Beispiele für GPU Programmierung:Normal MappingProgrammierung:Normal Mapping

Unebenheiten auf Oberflächen durch Veränderungen der Normalen simulierenOberflächendetails müssen nicht durch zusätzlicheOberflächendetails müssen nicht durch zusätzliche Geometrie dargestellt werdenNormalen zur Beleuchtung pro Pixel aus Textur (N l M ) l(Normal Map) auslesen

Thorsten Grosch - 42 -

Page 43: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Normal Mapping KoordinatensystemNormal Mapping - Koordinatensystem

Alle an der Beleuchtung beteiligten VektorenAlle an der Beleuchtung beteiligten VektorenNormale aus TexturVektor zur Lichtquelle Vektor zum Augpunkt

)(nr

)(lr

)(erVektor zum Augpunktmüssen im gleichen Koordinatensystem vorliegenIn welchem Koordinatensystem soll liegen?

)(e

nry gWelt- oder Objektkoordinaten• Bei Objektbewegungen müssen alle Normalen der

Normal Map mit verschoben werdenNormal Map mit verschoben werden• Normalen müssten zur Beleuchtung pro Pixel in

Kamerakoordinaten umgerechnet werden• Normal Map wäre nicht wiederverwendbar• Normal Map wäre nicht wiederverwendbar• schlechte Wahl

Niklas Henrich - 43 -

Page 44: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Tangent SpaceTangent Space

Tangente (x-Richtung)Binormale (y-Richtung)Normale (z-Richtung)

Lokales Koordinatensystem pro PolygonLokales Koordinatensystem pro PolygonGleiches Koordinatensystem, in dem definiert istNormal Map kann wiederverwendet werden

nr

Grober AblaufVertex Shader transformiert und in Tangent SpaceVertex Shader übergibt transfomierte Vektoren an Fragment

lr

er

Vertex Shader übergibt transfomierte Vektoren an Fragment Shader (lineare Interpolation)Pixel Shader liest Normale aus Textur aus und führt Lichtberechnung mit interpolierten und durchl

rer

nr

Thorsten Grosch - 44 -

Lichtberechnung mit interpolierten und durchl e

Page 45: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Tangent SpaceTangent SpaceTangent SpaceTangent Space

Flächennormale ist z-Richtung von Tangent SpaceTangente und Binormale senkrecht zu Normale setzenO i i T k di ( )Orientierung an Texturkoordinaten (s,t)

• Tangente in Richtung von Texturkoordinate s auf Polygon setzen• Binormale = Normale x Tangenteg

Genaue Beschreibung von Tangente und Binormale in CgTutorial

Nur s verändert sichNur s verändert sichin Tangentenrichtung,t bleibt konstant

tr

nrbr

(s2,t1)Mit Tangent Space,Normalen von Boden zeigen

Ohne Tangent Space,Normalen von Boden zeigen

Thorsten Grosch - 45 -

n(s1,t1)

nach obeng

nach vorne

Page 46: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Cube MappingCube MappingEine Form des Environment MappingsUmgeb ng ird d rch 6 Te t ren beschriebenUmgebung wird durch 6 Texturen beschrieben

Kamera mit 90° Öffnungswinkel sieht nach vorne, hinten, oben, unten, links und rechts

Texturen aus Media-Ordner der

Thorsten Grosch - 46 -

DirectX SDK March 2008© Microsoft Corp.

Page 47: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Environment MappingEnvironment MappingSimulation von Objekten, die deren UmgebungSimulation von Objekten, die deren Umgebung reflektierenGespiegelten oder gebrochenen Strahl als „look-up“ in die Cube Map benutzenin die Cube Map benutzen

nr Vertex Shader…r = reflect(i, n);…i

r rr

…C l t t C b ( M )

Fragment Shader

envColor = textureCube(envMap,r);…

Cube Map

Thorsten Grosch - 47 -

Page 48: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Environment Mapping ErgebnisseEnvironment Mapping - Ergebnisse

r = reflect(i n)r reflect(i, n)ersetzt durchr = refract(i, n, 1.55)

Thorsten Grosch - 48 -

Page 49: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Multiple Render Targets (MRTs)Multiple Render Targets (MRTs)Render Targetg

Speicher, in den die Ausgabe des Fragment Shaders geschrieben wird (ähnlich dem Frame Buffer)

Verschiedene Render Targets können gleichzeitig als Ausgabe g g g gdes Fragment Shaders gebunden werden

Geometrie muß nur einmal durch die PipelineErmöglichen die Ausgabe verschiedener Informationen in einem Schritt

Render Target 1

Deep

FragmentProgram

Render Target 1

Render Target 2Normale

p Fram

Program

Render Target 3

ebuffe…Deep Framebuffer: Zeichne nur noch die B ff d d (k l ) F t

Thorsten Grosch - 49 -

r…

…Buffer und wende (komplexen) Fragment Shader an. Es werden keine Polygone mehr gezeichnet, der Fragment Shader wird nur 1 x pro Pixel ausgeführt

Page 50: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Multiple Render TargetsMultiple Render Targets// MRT FBO for position/normal/colorglGenFramebuffersEXT (1, &mrtFB);glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, mrtFB);glFramebufferTexture2DEXT (GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,

GL TEXTURE 2D viewerPositionTextureId 0);GL_TEXTURE_2D, viewerPositionTextureId, 0);glFramebufferTexture2DEXT (GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT,

GL_TEXTURE_2D, viewerNormalTextureId, 0);glFramebufferTexture2DEXT (GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT2_EXT,

GL_TEXTURE_2D, viewerColorTextureId, 0);glFramebufferTexture2DEXT (GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,

GL_TEXTURE_2D, depthTextureId, 0);

GLenum buffers[3] = {GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_COLOR_ATTACHMENT2_EXT};

glDrawBuffers(3, buffers);glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, 0);

Reihenfolge der Buffer

Thorsten Grosch - 50 -

Page 51: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

Multiple Render TargetsMultiple Render Targets// MRT Vertex Shader // MRT Fragment Shadervarying vec4 position;varying vec3 normal;varying vec4 color;

varying vec4 position; varying vec3 normal;varying vec4 color;

void main(){

position = gl_Vertex; normal = gl_Normal;

void main(){

gl_FragData[0] = position;gcolor = gl_Color;

gl_Position = ftransform();}

gl_FragData[1] = vec4(normal, 0.0);gl_FragData[2] = color;

}}

Thorsten Grosch - 51 -

Page 52: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

LinksLinksOpenGL Shading Language (2nd Edition) – Rost et al., p g g g ( ) ,Addison-Wesley, 2006

Quick ReferenceQuick Referencehttp://www.opengl.org/sdk/libs/OpenSceneGraph/glsl_quickref.pdf

Tutorials z BTutorials, z.B.http://www.lighthouse3d.com/opengl/glsl/

Was man sonst noch mit der GPU anstellen kann (GeneralWas man sonst noch mit der GPU anstellen kann (General Purpose GPU)

http://www.gpgpu.orgLineare Algebra Voxelisierung Physik Simulation PartikelLineare Algebra, Voxelisierung, Physik Simulation, Partikel, …

Shader Programme , z.B.

Thorsten Grosch - 52 -

RenderMonkey, glman installiert in Rechnerraum

Page 53: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

ZusammenfassungZusammenfassung

Vertex– und Fragment ProgramsVertex– und Fragment ProgramsProgramm pro Vertex bzw. PixelEigene Programme am Anfang und Ende der Pipelineg g g p

Multi-Pass RenderingFBO, Multiple Render Targets, p g

Nächste WocheGeometry- und Tessellation ShaderProgramm pro Grafikprimitiv

Thorsten Grosch - 53 -

Page 54: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

GLSL Funktionalität nutzbar machenGLSL Funktionalität nutzbar machen

GLSL ab OpenGL 2.0 verfügbarGLSL ab OpenGL 2.0 verfügbarGLSL auch als OpenGL Extension verfügbar

Damit es auch auf älteren Karten (hoffentlich) läuftf G (O GExtension mit Hilfe von GLEW (OpenGL Extension

Wrangler) nutzbar machenEinfach, bequem und plattformunabhängigEinfach, bequem und plattformunabhängighttp://glew.sourceforge.net/

Ablauf1. GLEW includen (vor GLUT!)2. GLUT initialisieren und Fenster anlegen3 GLEW initialisieren3. GLEW initialisieren4. OpenGL 2.0 Support abfragen5. Siehe ShaderFramework in der Übung!

Thorsten Grosch - 54 -

g

Page 55: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

GLEW installieren Visual Studio 2005GLEW installieren - Visual Studio 2005

1 GLEW von http://glew sourceforge net/ laden1. GLEW von http://glew.sourceforge.net/ laden2. „Binaries“ Version für Windows wählen3 GLEW entpacken3. GLEW entpacken4. Datei GLEW\bin\glew32.dll nach C:\Windows\System32

kopierenkopieren5. Datei GLEW\lib\glew32.lib nach

C:\Programme\Microsoft Visual Studio g8\VC\PlatformSDK\Lib

6. Dateien GLEW\include\GL\{glew.h|wglew.h} nach {g | g }C:\Programme\Microsoft Visual Studio 8\VC\PlatformSDK\Include\GL

Thorsten Grosch - 55 -

Page 56: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

GLEW installieren Visual Studio 2008GLEW installieren - Visual Studio 2008

1 GLEW von http://glew sourceforge net/ laden1. GLEW von http://glew.sourceforge.net/ laden2. „Binaries“ Version für Windows wählen3 GLEW entpacken3. GLEW entpacken4. Datei GLEW\bin\glew32.dll nach C:\Windows\System32

kopierenkopieren5. Datei GLEW\lib\glew32.lib nach C:\Program

Files\Microsoft SDKs\Windows\v6.0A\Lib kopierenp6. Dateien GLEW\include\GL\{glew.h|wglew.h} nach

C:\Program Files\Microsoft gSDKs\Windows\v6.0A\Include\GL kopieren

Thorsten Grosch - 56 -

Page 57: Vertex- und Fragment Programs - OvGU::Computervisualistik...Sprachmerkmale von GLSLSprachmerkmale von GLSL VektorenundMatrizenVektoren und Matrizen vec4 (Vektor bestehend aus 4 float-Werten),

GLEW Libs - Visual Studio 2005 & 2008GLEW Libs Visual Studio 2005 & 20081. Projekt Eigenschaften2. Konfiguration auf „Alle Konfigurationen“ stellen3. Konfigurationseigenschaften Linker Eingabe Zusätzliche

Abhängigkeiten: glew32.lib eintragen

Debugger für GLSL:Debugger für GLSL:

glslDevil, Uni Stuttgart

Thorsten Grosch - 57 -