Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 08:07

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Projected Shadows Problem
BeitragVerfasst: Di Jul 12, 2005 12:43 
Offline
DGL Member

Registriert: Do Apr 29, 2004 11:53
Beiträge: 29
Hallo, ich hab auf Jan Horns mir das Projected Shadow Beispiel angeschaut und auch schon einigerma-en verstanden, nun haeng ich aber an einem problem

ich hab ein boden, eine box

den boden zeigt es an, aber die box nicht, hab den code schon zig male durchforschtet finde aber den fehler nicht, entweder ich seh den fehler und seh ihn nicht als fehler an und ich lieg heut neben d kappe

waere nett wenn ihn mal jemand durchschauen koennte,ich weis, ist ein bisschen lang



Code:
  1. program Techdemo01;
  2.  
  3.  
  4.  
  5. uses
  6.   dglOpenGL,
  7.   opengl,
  8.   sdl;
  9.  
  10. type // vector3
  11.   TVector3 = record
  12.     x,y,z : GLfloat;
  13.   end;
  14.  
  15. const
  16.    AmbientLight : Array[0..3] of glFloat = (2.2, 2.2, 2.2, 2.2);
  17.  
  18. var
  19.    pSurface : PSDL_Surface;
  20.    pEvent : TSDL_Event;
  21.  
  22.    done : boolean;
  23.  
  24.    LightPosition : Array[0..3] of GLfloat = (-7.0, -2.0, 10.0, 1.0);
  25.  
  26.    boxList : GLuint;
  27.    floorList : GLuint;
  28.    floorNormal,floorPoints : Array[0..1] of TVector3;
  29.  
  30.    ShadowMatrix : Array[0..1,0..15] of GLFloat;
  31.  
  32. procedure createFloor;
  33. begin
  34.   floorNormal[1].X := 0.0; floorNormal[1].Y := 1.0; floorNormal[1].z := 0.0;
  35.   floorPoints[1].X := -10.0; floorPoints[1].Y := -10; floorPoints[1].z := -10.0;
  36.  
  37.   floorList := glGenLists(1);
  38.   glNewList(floorList,GL_COMPILE);
  39.     glBegin(GL_QUADS);
  40.   glNormal3f( 0.0, 1.0, 0.0);
  41.       glTexCoord2f(0.0, 1.0); glVertex3f(-10.0,  -10.0, -10.0);
  42.       glTexCoord2f(0.0, 0.0); glVertex3f(-10.0,  -10.0,  10.0);
  43.       glTexCoord2f(1.0, 0.0); glVertex3f( 10.0,  -10.0,  10.0);
  44.       glTexCoord2f(1.0, 1.0); glVertex3f( 10.0,  -10.0, -10.0);
  45.     glEnd();
  46.   glEndList();
  47.  
  48.   boxList := glGenLists(1);
  49.   glNewList(boxList, GL_COMPILE);
  50.    glBegin(GL_QUADS);
  51.       // Front Face
  52.       glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0,  1.0);
  53.       glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, -1.0,  1.0);
  54.       glTexCoord2f(1.0, 1.0); glVertex3f( 1.0,  1.0,  1.0);
  55.       glTexCoord2f(0.0, 1.0); glVertex3f(-1.0,  1.0,  1.0);
  56.       // Back Face
  57.       glTexCoord2f(1.0, 0.0); glVertex3f(-1.0, -1.0, -1.0);
  58.       glTexCoord2f(1.0, 1.0); glVertex3f(-1.0,  1.0, -1.0);
  59.       glTexCoord2f(0.0, 1.0); glVertex3f( 1.0,  1.0, -1.0);
  60.       glTexCoord2f(0.0, 0.0); glVertex3f( 1.0, -1.0, -1.0);
  61.       // Top Face
  62.       glTexCoord2f(0.0, 1.0); glVertex3f(-1.0,  1.0, -1.0);
  63.       glTexCoord2f(0.0, 0.0); glVertex3f(-1.0,  1.0,  1.0);
  64.       glTexCoord2f(1.0, 0.0); glVertex3f( 1.0,  1.0,  1.0);
  65.       glTexCoord2f(1.0, 1.0); glVertex3f( 1.0,  1.0, -1.0);
  66.       // Bottom Face
  67.       glTexCoord2f(1.0, 1.0); glVertex3f(-1.0, -1.0, -1.0);
  68.       glTexCoord2f(0.0, 1.0); glVertex3f( 1.0, -1.0, -1.0);
  69.       glTexCoord2f(0.0, 0.0); glVertex3f( 1.0, -1.0,  1.0);
  70.       glTexCoord2f(1.0, 0.0); glVertex3f(-1.0, -1.0,  1.0);
  71.       // Right face
  72.       glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, -1.0, -1.0);
  73.       glTexCoord2f(1.0, 1.0); glVertex3f( 1.0,  1.0, -1.0);
  74.       glTexCoord2f(0.0, 1.0); glVertex3f( 1.0,  1.0,  1.0);
  75.       glTexCoord2f(0.0, 0.0); glVertex3f( 1.0, -1.0,  1.0);
  76.       // Left Face
  77.       glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, -1.0);
  78.       glTexCoord2f(1.0, 0.0); glVertex3f(-1.0, -1.0,  1.0);
  79.       glTexCoord2f(1.0, 1.0); glVertex3f(-1.0,  1.0,  1.0);
  80.       glTexCoord2f(0.0, 1.0); glVertex3f(-1.0,  1.0, -1.0);
  81.     glEnd();
  82.   glEndList();
  83.  
  84.  
  85. end;
  86.  
  87. // generate the shadow matrix
  88. procedure generateShadowMatrix(var ShadowMatrix : Array of GLfloat; const normal, point : TVector3; lX,lY,lZ,lW :GLfloat);
  89. var
  90.   d, dot : Real;
  91. begin
  92.    d := -normal.x*point.x - normal.y*point.y - normal.z*point.z ;
  93.    dot := normal.x*lX + normal.y*lY + normal.z*lZ;
  94.  
  95.    ShadowMatrix[0] := -lX*normal.x + dot;
  96.    ShadowMatrix[4] := -lX*normal.y;
  97.    ShadowMatrix[8] := -lX*normal.z;
  98.    ShadowMatrix[12]:= -lX*d;
  99.    ShadowMatrix[1] := -lY*normal.x + dot;
  100.    ShadowMatrix[5] := -lY*normal.y;
  101.    ShadowMatrix[9] := -lY*normal.z;
  102.    ShadowMatrix[13]:= -lY*d;
  103.    ShadowMatrix[2] := -lZ*normal.x + dot;
  104.    ShadowMatrix[6] := -lZ*normal.y;
  105.    ShadowMatrix[10]:= -lZ*normal.z;
  106.    ShadowMatrix[14]:= -lZ*d;
  107.    ShadowMatrix[3] := -lW*normal.x;
  108.    ShadowMatrix[7] := -lW*normal.y;
  109.    ShadowMatrix[11]:= -lW*normal.z;
  110.    ShadowMatrix[15]:= -lW*d + dot;
  111. end;
  112.  
  113. // render meshes with stencil shadows
  114. procedure renderShadows;
  115. var
  116.   surface : integer;
  117. begin
  118.   glClear(GL_COLOR_BUFFER_BIT);
  119.   glEnable(GL_STENCIL_TEST); // activate the stencil buffer
  120.   // go through all arrays(surfaces)
  121.   for surface:=0 to 4 do
  122.   begin
  123.     glStencilFunc(GL_ALWAYS, 1,1); // setup stencil buffer to write
  124.     glStencilOp(GL_KEEP,GL_KEEP,GL_REPLACE);
  125.  
  126.     glDisable(GL_LIGHT0);
  127.       glCallList(floorList);
  128.     glEnable(GL_LIGHT0);
  129.  
  130.     glDisable(GL_DEPTH_TEST);
  131.     glColorMask(GL_FALSE,GL_FALSE,GL_FALSE,GL_FALSE);  // turn off color buffer
  132.     glStencilFunc(GL_LEQUAL,1,1);
  133.     glStencilOp(GL_KEEP,GL_KEEP,GL_INCR);
  134.  
  135.     glPushMatrix();
  136.       generateShadowMatrix(ShadowMatrix[surface],floorNormal[surface],
  137.       floorPoints[surface],LightPosition[0],LightPosition[1],LightPosition[2],
  138.       LightPosition[3]); // generate shadow matrix
  139.  
  140.     glMultMatrixf(@ShadowMatrix[surface]); // add shadowmatrix to modelview
  141.  
  142.  
  143.     glPushMatrix();
  144.       glTranslatef(4,2,2);
  145.       glRotatef(30,1,1,0);
  146.       glCallList(boxList);
  147.     glPopMatrix();
  148.     glPopMatrix();
  149.  
  150.     glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); // turn on color buffer
  151.     glCallList(floorList);
  152.     glEnable(GL_DEPTH_TEST);
  153.  end;
  154.  glDisable(GL_STENCIL_TEST);
  155. end;
  156. begin
  157.  
  158. if(SDL_Init(SDL_INIT_VIDEO) <> -1) then
  159. begin  { opengl window attributes }
  160.   SDL_GL_SetAttribute(SDL_GL_RED_SIZE, <!-- s8) --><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8) -->;
  161.   SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, <!-- s8) --><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8) -->;
  162.   SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, <!-- s8) --><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8) -->;
  163.   SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 32);
  164.   SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
  165.  
  166.   SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 16); // 16 bit stencil buffer
  167.   // create a window with opengl support
  168.   pSurface := SDL_SetVideoMode(800,600,0,SDL_OPENGL or SDL_HWSURFACE);
  169.   if(pSurface = nil) then
  170.     SDL_QUIT;
  171.   SDL_WM_SetCaption('Projected Shadows Techdemo', nil); // our window caption
  172.   // set done to false
  173.   done := false;
  174. end;
  175.  
  176.   InitOpenGL;
  177.   glClearColor(0.0,0.2,0.4,1.0);
  178.   glClearDepth(1.0);
  179.  
  180.   glShadeModel(GL_FLAT); // flat shading
  181.  
  182.   glEnable(GL_DEPTH_TEST); // enable depth buffer
  183.   glDepthFunc(GL_LEQUAL);
  184.  
  185.   glEnable(GL_CULL_FACE);
  186.   glCullFace(GL_BACK); // dont render back surfaces for better performence
  187.  
  188.   glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
  189.  
  190.   { setup the light }
  191.   glLightModelfv(GL_LIGHT_MODEL_AMBIENT, @AmbientLight);
  192.   glEnable(GL_LIGHTING);
  193.   glLightfv(GL_LIGHT0, GL_POSITION, @LightPosition);
  194.   glEnable(GL_LIGHT0);
  195.  
  196.   createFloor;
  197.  
  198.   if(pSurface.h = 0)then
  199.     pSurface.h := 1;
  200.   { projektionsmatrix auf ganze fensterflaeche setzen }
  201.  
  202.   glViewport(0,0,pSurface.w,pSurface.h);
  203.   glMatrixMode(GL_PROJECTION);
  204.  
  205.    glLoadIdentity;
  206.  
  207.   { perspective aendern }
  208.   gluPerspective(45.0,pSurface.w/pSurface.h,0.1,100.0);
  209.   glMatrixMode(GL_MODELVIEW);
  210.  
  211.   glLoadIdentity; {matrix zuruecksetzen }
  212.  
  213.   while(not done) do
  214.   begin
  215.     if(SDL_PollEvent(@pEvent) =1) then
  216.     begin
  217.       case pEvent.type_ of
  218.         SDL_QUITEV:
  219.           done := true;
  220.         end;
  221.     end;
  222.  
  223.     glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  224.     glLoadIdentity();
  225.  
  226.     glTranslatef(0,0,-37.0);
  227.  
  228.     glDisable(GL_LIGHTING);
  229.  
  230.     glPushMatrix();
  231.       glTranslatef(4,2,2);
  232.        glColor3f(0.8, 0.3, 0.3);
  233.       glCallList(boxList);
  234.     glPopMatrix();
  235.  
  236.     glEnable(GL_LIGHTING);
  237.  
  238.     renderShadows();
  239.  
  240.  
  241.     SDL_GL_SwapBuffers();
  242.     end;
  243. end.
  244.  

_________________
wtf?!


Zuletzt geändert von HaschHase am Di Jul 12, 2005 14:00, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 12, 2005 13:13 
Offline
DGL Member

Registriert: Do Apr 29, 2004 11:53
Beiträge: 29
hab grad gemerkt, wenn ich renderShadow(); raustu, seh ich meine box, aber daf[r den boden nicht mehr

edit:

glClear(GL_STENCIL_BUFFER_BIT);

hatte in renderShadow() GL_COLOR_BUFFER_BIT drin

nur der schatten ist noch imemr nicht da, dafuer die box jetzt

_________________
wtf?!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 12, 2005 18:37 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wenn das das selbe ist wie ShadowMaps und du auf ATI arbeitest, dann könnte es sein, das sogar Hardwareseitig Fehler vorliegen... Ich hab am Fr. in der Uni ShadowMaps probiert, und was ich auf den ATIKarten gesehen hab war schockierend...

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 12, 2005 18:52 
Offline
DGL Member

Registriert: Do Apr 29, 2004 11:53
Beiträge: 29
das problem ist, ich bekomm nur ne normale szene zu sehen und keine schatten
achja und licht fehlt auch

und ausserdem benutz ich geforce 4 ti 4200


sonst kein fehler entdeckt? bitte find einen fehler :lol:


so siehts bis jetzt aus

Bild

_________________
wtf?!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 12, 2005 21:17 
Offline
DGL Member

Registriert: Do Apr 29, 2004 11:53
Beiträge: 29
-l

_________________
wtf?!


Zuletzt geändert von HaschHase am Di Jul 12, 2005 21:45, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 12, 2005 21:21 
Offline
DGL Member

Registriert: Do Apr 29, 2004 11:53
Beiträge: 29
edit, so hab mich informiert und irgendwie scheine ich den stencil buffer zu f[llen, aber keine schatten zu rendern

gehe ich da in die richtige richtung?

_________________
wtf?!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 12, 2005 22:39 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
wenn ich mir das so anschaue würde ich mich auch fragen, wo du da den schatten renderst
soweit ich das sehe wird da doch nur die selbe plane mit der selben farbe noch mal gerendert.
oder überseh ich da was?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 12, 2005 23:01 
Offline
DGL Member

Registriert: Do Apr 29, 2004 11:53
Beiträge: 29
hmm ich weis es echt selber nicht genau
w're halt mal super wenn ich nen kompletten source haette und den studieren koennte

_________________
wtf?!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 12, 2005 23:06 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Noch geiler wärs, wenn du das nächste mal bevor du Screenshoots postest die mal bisl zurechtschneidest. Für die Szene hätte auch ein halbsogroßes Fenster gereicht. Geht einfach darum, dass solche Bilder das Forenlayout sprengen und Modemnutzer dich auf die Rote Liste der Betrohten Tierarten stellen. ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 12, 2005 23:13 
Offline
DGL Member

Registriert: Do Apr 29, 2004 11:53
Beiträge: 29
ok werd ich das n'chste mal beruecksichtigen

_________________
wtf?!


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 14 Queries | GZIP : On ]