Problem mit Shadowmapping
-
Hi Leute,
hab ein problem beim shadowmapping und frage euch woran das liegen könnte.
der screen ist hier:
http://img409.imageshack.us/my.php?image=screenlz5.pngerst dachte ich dass das selbstschattierung ist, aber der cube wirft seinen schatten auch auf den ring, kann mir jemand helfen?
ich poste mal n bissl code
:void init( void ) { GLfloat white[] = { 1.0, 1.0, 1.0, 1.0 }; glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, SHADOW_MAP_WIDTH, SHADOW_MAP_HEIGHT, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL ); glLightfv( GL_LIGHT0, GL_POSITION, lightPos ); glLightfv( GL_LIGHT0, GL_SPECULAR, white ); glLightfv( GL_LIGHT0, GL_DIFFUSE, white ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL ); glTexParameteri( GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE ); glTexGeni( GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR ); glTexGeni( GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR ); glTexGeni( GL_R, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR ); glTexGeni( GL_Q, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR ); glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE ); glCullFace( GL_BACK ); glEnable( GL_DEPTH_TEST ); glEnable( GL_LIGHT0 ); glEnable( GL_LIGHTING ); glEnable( GL_TEXTURE_2D ); glEnable( GL_TEXTURE_GEN_S ); glEnable( GL_TEXTURE_GEN_T ); glEnable( GL_TEXTURE_GEN_R ); glEnable( GL_TEXTURE_GEN_Q ); glEnable( GL_COLOR_MATERIAL ); glEnable( GL_CULL_FACE ); } void generateShadowMap( void ) { GLint viewport[4]; GLfloat lightPos[4]; glGetLightfv( GL_LIGHT0, GL_POSITION, lightPos ); glGetIntegerv( GL_VIEWPORT, viewport ); glViewport( 0, 0, SHADOW_MAP_WIDTH, SHADOW_MAP_HEIGHT ); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glMatrixMode( GL_PROJECTION ); glPushMatrix(); { glLoadIdentity(); gluPerspective( 80.0, 1.0, 10.0, 1000.0 ); glMatrixMode( GL_MODELVIEW ); glPushMatrix(); { glLoadIdentity(); gluLookAt( lightPos[0], lightPos[1], lightPos[2], lookat[0], lookat[1], lookat[2], up[0], up[1], up[2] ); drawObjects( GL_TRUE ); } glPopMatrix(); glMatrixMode( GL_PROJECTION ); } glPopMatrix(); glMatrixMode( GL_MODELVIEW ); glCopyTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 0, 0, SHADOW_MAP_WIDTH, SHADOW_MAP_HEIGHT, 0 ); glViewport( viewport[0], viewport[1], viewport[2], viewport[3] ); if ( showShadow ) { GLfloat depthImage[SHADOW_MAP_WIDTH][SHADOW_MAP_HEIGHT]; glReadPixels( 0, 0, SHADOW_MAP_WIDTH, SHADOW_MAP_HEIGHT, GL_DEPTH_COMPONENT, GL_FLOAT, depthImage ); glRasterPos2f( viewport[2]/2, 0 ); glDrawPixels( SHADOW_MAP_WIDTH, SHADOW_MAP_HEIGHT, GL_LUMINANCE, GL_FLOAT, depthImage ); glutSwapBuffers(); } } void generateTextureMatrix( void ) { GLfloat tmpMatrix[16]; glPushMatrix(); { glLoadIdentity(); glTranslatef( 0.5, 0.5, 0.0 ); glScalef( 0.5, 0.5, 1.0 ); gluPerspective( 60.0, 1.0, 1.0, 1000.0 ); gluLookAt( lightPos[0], lightPos[1], lightPos[2], lookat[0], lookat[1], lookat[2], up[0], up[1], up[2] ); glGetFloatv( GL_MODELVIEW_MATRIX, tmpMatrix ); } glPopMatrix(); transposeMatrix( tmpMatrix ); glTexGenfv( GL_S, GL_OBJECT_PLANE, &tmpMatrix[0] ); glTexGenfv( GL_T, GL_OBJECT_PLANE, &tmpMatrix[4] ); glTexGenfv( GL_R, GL_OBJECT_PLANE, &tmpMatrix[8] ); glTexGenfv( GL_Q, GL_OBJECT_PLANE, &tmpMatrix[12] ); }mfg Oermel
-
vertausch mal zeile 99 und 100
-
hmm... dann kommt kein schatten mehr
-
habs, thx auf den hinweis, hab mit den beiden zeilen rumgespielt

EDIT: nu funktioniert das so: glTranslatef( 0.3, 0.3, 0.0 );
ohne glscale()