![Page 1: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/1.jpg)
Shadow Mapping mit GLSLProgrammierübung im Rahmen der Vorlesung „Computergrafik 2"
VonFranz Peschel
![Page 2: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/2.jpg)
Shadow Mapping mit GLSLProgrammierübung im Rahmen der Vorlesung „Computergrafik 2"
VonFranz Peschel
![Page 3: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/3.jpg)
Shadow Mapping mit GLSLProgrammierübung im Rahmen der Vorlesung „Computergrafik 2"
VonFranz Peschel
![Page 4: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/4.jpg)
Shadow Mapping mit GLSLProgrammierübung im Rahmen der Vorlesung „Computergrafik 2"
VonFranz Peschel
![Page 5: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/5.jpg)
Shadow Mapping mit GLSLProgrammierübung im Rahmen der Vorlesung „Computergrafik 2"
VonFranz Peschel
![Page 6: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/6.jpg)
Shadow Mapping mit GLSLProgrammierübung im Rahmen der Vorlesung „Computergrafik 2"
VonFranz Peschel
![Page 7: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/7.jpg)
Shadow Mapping mit GLSLProgrammierübung im Rahmen der Vorlesung „Computergrafik 2"
VonFranz Peschel
![Page 8: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/8.jpg)
Shadow Mapping mit GLSLProgrammierübung im Rahmen der Vorlesung „Computergrafik 2"
Idee:1. Kamera in Lichtquelle setzen
2. Z-Buffer von Lichtquelle aus in Textur kopieren
3. Projektives Texturemapping mit Tiefentextur
4. Pro Pixel echten Abstand mit Abstand aus Textur vergleichen
VonFranz Peschel
![Page 9: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/9.jpg)
Inhalt
1. Inititialisieren (init..())
2. Zeichnen (display())
2.1 Shader
3. Zusammenfassung
![Page 10: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/10.jpg)
Shadow Mapping – initGL()
void initGL(){
// init statesglEnable(GL_DEPTH_TEST);...
glViewport(0,0,width,height);...
gluPerspective(...);...
// initialize shadow textureinitShadowMap();
}
![Page 11: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/11.jpg)
Shadow Mapping – initShadowMap()
void initShadowMap(){
// generate texture object glGenTextures(1, &shadowMapID);glBindTexture(GL_TEXTURE_2D, shadowMapID);
// no interpolation or repetitionglTexParameteri(...); //GL_NEAREST...glTexParameteri(...); //GL_CLAMP_TO_EDGE...
// set comparison modes (needed for shader)glTexParameteri(...); //GL_DEPTH_TEXTURE_MODEglTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
}
![Page 12: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/12.jpg)
Display()void Display(){
...// Set current camera view(gluLookAt(...)) g_Camera->CamLookAt();
// Display light sourcesDisplayLightSources();
// Render Sceneg_scene()->RenderScene();
// Stop rendering into our FBOg_scene->m_renderTexture->EndRenderToFBO()
// Postprocess screen texture g_scene->PostProcessTexture();...
}
![Page 13: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/13.jpg)
Shadow Mapping – initGLSL()
void initGLSL(){
// create vertex and fragment shader objects
...
// SOLUTION
// init uniform locations( specific for shadow mapping shader)
shadowTextureLocation = glGetUniformLocationARB( shaderProgram, "shadowTexture" );
modelMatrixLocation = glGetUniformLocationARB( shaderProgram, "modelMatrix" );
glUseProgramObjectARB( 0 );
// SOLUTION}
![Page 14: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/14.jpg)
Inhalt
1. Inititialisieren (init..())
2. Zeichnen (display())
2.1 Shader
3. Zusammenfassung
![Page 15: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/15.jpg)
Shadow Mapping – display()void display(){
// clear// set light parameters// render from light positioncreateShadowMap();// now render from camera viewgluLookAt(...);// activate projective texturing computationssetupTextureMatrix();
// activate shaderglUseProgram( shaderProgram );// draw all objectsdrawScene();// deactivate shaderglUseProgram( 0 );
// deactivate projective texturingresetTextureMatrix();// draw point indicating light position// increment rotation angle// swap display buffersglutSwapBuffers();
}
![Page 16: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/16.jpg)
Shadow Mapping – createShadowMap()...
}
![Page 17: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/17.jpg)
Shadow Mapping – createShadowMap()void createShadowMap(){
// set viewportglViewport(0, 0, shadowResolution, shadowResolution);
// set projectionglMatrixMode(GL_PROJECTION);// SOLUTION
glPushMatrix();glLoadIdentity();// parameters from light (as spotlight)gluPerspective(lightAngle, 1.0f, lightNear, lightFar);
// SOLUTION// set modelviewglMatrixMode( GL_MODELVIEW );// SOLUTION
glPushMatrix();glLoadIdentity();// look from light's positiongluLookAt(lightPosition[0], lightPosition[1],
lightPosition[2], lightDirection[0] - lightPosition[0], lightDirection[1] - lightPosition[1], lightDirection[2] - lightPosition[2],0, 1, 0 );
// SOLUTION ...
![Page 18: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/18.jpg)
Shadow Mapping – createShadowMap()...// enable polygon offsetsglEnable(GL_POLYGON_OFFSET_FILL);glPolygonOffset(offsetFactor, offsetUnits);
// draw contentdrawScene();
// copy from z-buffer into textureglBindTexture(GL_TEXTURE_2D, shadowMapID); glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 0, 0, shadowResolution, shadowResolution, 0);
// deactivate offsettingglDisable(GL_POLYGON_OFFSET_FILL);
// reset viewportglViewport(0, 0, width, height);
// reset projection/modelview matricesglMatrixMode( GL_PROJECTION ); glPopMatrix();glMatrixMode( GL_MODELVIEW );glPopMatrix();
// clearglClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT );
}
![Page 19: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/19.jpg)
Shadow Mapping – createShadowMap()...
}
![Page 20: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/20.jpg)
Shadow Mapping – createShadowMap()...
}
![Page 21: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/21.jpg)
Shadow Mapping – createShadowMap()...
}
![Page 22: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/22.jpg)
Shadow Mapping – createShadowMap()...
}
![Page 23: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/23.jpg)
Shadow Mapping – setupTextureMatrix()void setupTextureMatrix(){
// set up texture matrix (used by shader)glMatrixMode(GL_TEXTURE);// SOLUTION
glLoadIdentity();
// scale-bias componentsglTranslatef(0.5f, 0.5f, 0.5f); glScalef(0.5f, 0.5f, 0.5f);
// projectiongluPerspective(lightAngle, 1.0f, lightNear,lightFar);
// modelviewgluLookAt(lightPosition[0], lightPosition[1],
lightPosition[2], lightDirection[0] - lightPosition[0], lightDirection[1] - lightPosition[1], lightDirection[2] - lightPosition[2],0, 1, 0 );
// SOLUTION// change matrix stackglMatrixMode(GL_MODELVIEW);
}
![Page 24: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/24.jpg)
Display()void Display(){
...// Set current camera view(gluLookAt(...)) g_Camera->CamLookAt();
// Display light sourcesDisplayLightSources();
// Render Sceneg_scene()->RenderScene();
// Stop rendering into our FBOg_scene->m_renderTexture->EndRenderToFBO()
// Postprocess screen texture g_scene->PostProcessTexture();...
}
![Page 25: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/25.jpg)
Inhalt
1. Inititialisieren (init..())
2. Zeichnen (display())
2.1 Shader
3. Zusammenfassung
![Page 26: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/26.jpg)
Display()void Display(){
...// Set current camera view(gluLookAt(...)) g_Camera->CamLookAt();
// Display light sourcesDisplayLightSources();
// Render Sceneg_scene()->RenderScene();
// Stop rendering into our FBOg_scene->m_renderTexture->EndRenderToFBO()
// Postprocess screen texture g_scene->PostProcessTexture();...
}
![Page 27: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/27.jpg)
Shadow Mapping – Vertex Shaderuniform mat4 modelMatrix; // matrix for modeling transform (without view)varying vec4 shadowCoord; // variable for shadow lookup coordinatesvarying vec4 position;varying vec3 normal;
void main(){
// compute coordinates from current texture matrix (scale-bias + lightMVP) // and model („Light space openGL-pipeline“) shadowCoord = gl_TextureMatrix[0] * modelMatrix * gl_Vertex;
// Phong shading: store vertex attributes in world coordinatesposition = gl_ModelViewMatrix * gl_Vertex;normal = gl_NormalMatrix * gl_Normal;
// vec3 N = normalize( gl_NormalMatrix * gl_Normal );// vec3 L = normalize( gl_LightSource[0].position - gl_ModelViewMatrix *gl_Vertex ).xyz;
// transform vertex// gl_FrontColor = gl_FrontMaterial.diffuse * max( 0.0, dot( N, L ) );gl_Position = ftransform();
}
![Page 28: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/28.jpg)
Display()void Display(){
...// Set current camera view(gluLookAt(...)) g_Camera->CamLookAt();
// Display light sourcesDisplayLightSources();
// Render Sceneg_scene()->RenderScene();
// Stop rendering into our FBOg_scene->m_renderTexture->EndRenderToFBO()
// Postprocess screen texture g_scene->PostProcessTexture();...
}
![Page 29: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/29.jpg)
Shadow Mapping – Fragment Shaderuniform sampler2DShadow shadowTexture; // shadow mapvarying vec4 shadowCoord; // interpolated shadow texture coordinatesvarying vec4 position;varying vec3 normal;
void main(){
float depth = 0.0;// avoid back-projection (shadowCoord.w negative)if ( shadowCoord.w > 0.0 )
// compare grey-value in shadow map with projected depth-value of shadorCoord// if (shadowmap depth value >= shadowCoord depth value) depth = 1.0 (no shadow)// else depth is something unequal 1.0 (shadow)(see GL_TEXTURE_COMPARE_FUNC)depth = shadow2DProj( shadowTexture, shadowCoord ).r;
// set shade factorfloat shadeFactor = depth != 1.0 ? 0.5 : 1.0;
// compute phong shadingvec3 N = normalize( normal );vec3 L = normalize( gl_LightSource[0].position.xyz - position.xyz );float attenuation = max( 0.0, dot( N, L ) );// compute colorvec4 color = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse * attenuation;
// weight final colorgl_FragColor = color * shadeFactor; // gl_Color * shadeFactor;
}
![Page 30: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/30.jpg)
Shadow Mapping – Fragment Shader
// Aufgabe 2.2: avoid back-projection (shadowCoord.w negative)if ( shadowCoord.w > 0.0 )
// compare ZA and ZBdepth = shadow2DProj( shadowTexture, shadowCoord ).r;
![Page 31: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/31.jpg)
Shadow Mapping – Fragment Shadervoid drawScene(){
...// first objectglPushMatrix();// local transforms (in addition to current view transform)glTranslatef(0.0, 1.0, 0.0);glRotatef( alpha, 0.0, 1.0, 0.0 );// SOLUTION
// get local model transformsglPushMatrix();// reset stackglLoadIdentity();// same transformsglTranslatef( 0.0, 1.0, 0.0 );glRotatef( alpha, 0.0, 1.0, 0.0 );// readglGetFloatv( GL_MODELVIEW_MATRIX, modelMatrix );// transfer to shader (as uniform variable)glUniformMatrix4fv( modelMatrixLocation, 1, GL_FALSE, modelMatrix );// resetglPopMatrix();
// SOLUTION// draw objectglutSolidTorus( 0.2, 0.7, 24, 32 );// doneglPopMatrix(); ...
![Page 32: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/32.jpg)
Shadow Mapping – resetTextureMatrix()void resetTextureMatrix(){
// clear texture matrixglMatrixMode(GL_TEXTURE);glLoadIdentity();
// change matrix stackglMatrixMode(GL_MODELVIEW);
}
![Page 33: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/33.jpg)
Inhalt
1. Inititialisieren (init..())
2. Zeichnen (display())
2.1 Shader
3. Zusammenfassung
![Page 34: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/34.jpg)
Zusammenfassung Shadow Mapping Ablauf visualisiert:
1. Sicht Kamera: Szene ohne Schatten
2. Sicht Lichtquelle: Szene
3. Sicht Lichtquelle:Shadow Map (Depth Map)
4. Sicht Kamera:projezierte Shadow Map,Z-Wert (ZA) in Shadow Map an der Stelle (s/q),(t/q)
5. Sicht Kamera: Z-Wert im Light Space des Fragments (ZB)
6. Sicht Kamera:Szene mit Schatten nach dem Tiefentest zwischen 4. Und 5.
1. 2.
3. 4.
5. 6.
Bild: http://www.devmaster.net/articles/shadow_techniques
![Page 35: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/35.jpg)
Zusammenfassung 1. 2.
3. 4.
5. 6.
2. and 3.
4. and 5.
Bild: http://www.devmaster.net/articles/shadow_techniques
![Page 36: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/36.jpg)
Ergebnis
Ohne Shadow Mapping Mit Shadow MappingPer-Vertex Lighting Per-Pixel Lighting (Phong Shading)
![Page 37: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/37.jpg)
Fragen...
![Page 38: Shadow Mapping mit GLSL - Uni Koblenz-Landaucg/ss09/cg3/uebungen/...Programmierübung im Rahmen der Vorlesung „Computergrafik 2" Idee: 1. Kamera in Lichtquelle setzen 2. Z-Buffer](https://reader036.vdokument.com/reader036/viewer/2022071211/602280c5e10c9d1b9e445a80/html5/thumbnails/38.jpg)
Ende