Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 3839 in orxonox.OLD for orxonox/branches/shadows/src/shadow.cc


Ignore:
Timestamp:
Apr 15, 2005, 6:59:34 PM (19 years ago)
Author:
dave
Message:

Hab wieder mal nichts kapiert, aber beim Schatten hat sich trotzdem viel getan:)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orxonox/branches/shadows/src/shadow.cc

    r3760 r3839  
    5656}
    5757
    58 void Shadow::init()
     58void Shadow::init(GLuint ground_id_imported)
    5959{
    6060   
     
    6363    float plane_r[] ={0.0f,0.0f,1.0f,0.0f};
    6464    float plane_q[] ={0.0f,0.0f,0.0f,1.0f};
     65   
     66   
     67    this->mat=new Material("Ground");
     68    this->mat->setDiffuseMap("../data/pictures/ground.tga");
     69    this->mat->setIllum(3);
    6570   
    6671    glClearDepth(1);
     
    9196   
    9297    this->image=(unsigned char*)malloc(SIZE*SIZE*4);
    93    
    94 
    95 }
    96 void Shadow::createGroundList(){
    97      this->ground_id=glGenLists(1);
    98      glNewList(this->ground_id,GL_COMPILE);
    99    
    100      setGround();
    101    
    102      glEndList();
    103 
    104 }
     98    this->ground_id=ground_id_imported;
     99
     100}
     101
    105102
    106103void Shadow::createShadow()
     
    111108    glBindTexture(GL_TEXTURE_2D,this->shadow_id);
    112109   
    113     glClearColor(1,1,1,1);
    114     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    115     glMatrixMode(GL_PROJECTION);
    116     glLoadIdentity();
    117     glOrtho(-4.2,4.2,-4.2,4.2,-100,100);
    118     glMatrixMode(GL_MODELVIEW);
    119     glLoadIdentity();
    120    
     110   
    121111    gluLookAt(this->lightPos[0],this->lightPos[1],this->lightPos[2],this->playerPos[0],this->playerPos[1],this->playerPos[2],0,0,1);
    122112   
     
    132122    glEnable(GL_LIGHTING);
    133123   
    134     glColor3f(1,1,1);
    135    
    136     glCopyTexSubImage2D(GL_TEXTURE_2D,0,0,0,0,0,SIZE,SIZE);
    137     //glReadPixels(0,0,SIZE,SIZE,GL_RGB,GL_UNSIGNED_BYTE,this->image);
    138     //blur(this->image,SIZE);
    139     //glTexSubImage2D(GL_TEXTURE_2D,0,0,0,SIZE,SIZE,GL_RGB,GL_UNSIGNED_BYTE,this->image);
     124   
     125   
     126    //glCopyTexSubImage2D(GL_TEXTURE_2D,0,0,0,0,0,SIZE,SIZE);
     127    glReadPixels(0,0,SIZE,SIZE,GL_RGB,GL_UNSIGNED_BYTE,this->image);
     128    blur(this->image,SIZE);
     129    glTexSubImage2D(GL_TEXTURE_2D,0,0,0,SIZE,SIZE,GL_RGB,GL_UNSIGNED_BYTE,this->image);
    140130   
    141131    glDisable(GL_SCISSOR_TEST);
    142     glViewport(0,0,400,300); //Achtung: hier Aufloesung von Orxonox einstellen!
     132    glViewport(0,0,1024,768); //Achtung: hier Aufloesung von Orxonox einstellen!
    143133     
    144134   
     
    146136}
    147137
     138void Shadow::draw()
     139{
     140    float m[16],im[16];
     141   
     142    createShadow();
     143    //glClearColor(0,0,0,1);
     144    //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     145    //glMatrixMode(GL_PROJECTION);
     146    //glLoadIdentity();
     147    //gluPerspective(45,4.0/3.0,.5,100);
     148    //glMatrixMode(GL_MODELVIEW);
     149    //glLoadIdentity();
     150       
     151    this->mat->select();
     152    glCallList(this->ground_id);
     153   
     154    //glDisable(GL_TEXTURE_2D);
     155       
     156    glEnable(GL_TEXTURE_GEN_S);
     157    glEnable(GL_TEXTURE_GEN_T);
     158    glEnable(GL_TEXTURE_GEN_R);
     159    glEnable(GL_TEXTURE_GEN_Q);
     160    glGetFloatv(GL_MODELVIEW_MATRIX,m);
     161    m_inverse(m,im);
     162    glMatrixMode(GL_TEXTURE);
     163    glLoadIdentity();
     164    //glTranslatef(.5,.5,0);
     165    //glScalef(.5,.5,1.0);
     166    //glOrtho(-1,1,-1,1,-1,1);
     167   
     168    gluLookAt(this->lightPos[0],this->lightPos[1],this->lightPos[2],this->playerPos[0],this->playerPos[1],this->playerPos[2],0,0,1);
     169   
     170    glMultMatrixf(im);
     171    glEnable(GL_TEXTURE_2D),
     172    glBindTexture(GL_TEXTURE_2D,this->shadow_id);
     173    glEnable(GL_BLEND);
     174    glBlendFunc(GL_DST_COLOR,GL_SRC_COLOR);
     175    //glCallList(this->ground_id);
     176    glDisable(GL_BLEND);
     177    glDisable(GL_TEXTURE_2D);
     178   
     179    glLoadIdentity();
     180    glMatrixMode(GL_MODELVIEW);
     181    glDisable(GL_TEXTURE_GEN_S);
     182    glDisable(GL_TEXTURE_GEN_T);
     183    glDisable(GL_TEXTURE_GEN_R);
     184    glDisable(GL_TEXTURE_GEN_Q);
     185   
     186   
     187   
     188   
     189   
     190}
    148191
    149192/**
     
    168211}
    169212
    170 /**
    171     brief takes the ground data from the world.cc class and passes it to shadow.cc
    172 
    173 */
    174 
    175 void Shadow::setGround()
    176 {
    177    
    178    
    179     glBegin(GL_QUADS);
    180     for(int i=0;i<100;i+=1)
    181         for(int j=0;j<80;j+=1)
    182             {
    183             glNormal3f(normal_vectors[i][j].x,normal_vectors[i][j].y,normal_vectors[i][j].z);
    184             glTexCoord2f(0.0f,0.0f);
    185             glVertex3f(vertexes[0][i][j].x,vertexes[0][i][j].y,vertexes[0][i][j].z);
    186             glNormal3f(normal_vectors[i+1][j].x,normal_vectors[i+1][j].y,normal_vectors[i+1][j].z);
    187             glTexCoord2f(1.0f,0.0f);
    188             glVertex3f(vertexes[1][i][j].x,vertexes[1][i][j].y,vertexes[1][i][j].z);
    189             glNormal3f(normal_vectors[i+1][j+1].x,normal_vectors[i+1][j+1].y,normal_vectors[i+1][j+1].z);
    190             glTexCoord2f(1.0f,1.0f);
    191             glVertex3f(vertexes[2][i][j].x,vertexes[2][i][j].y,vertexes[2][i][j].z);
    192             glNormal3f(normal_vectors[i][j+1].x,normal_vectors[i][j+1].y,normal_vectors[i][j+1].z);
    193             glTexCoord2f(0.0f,1.0f);
    194             glVertex3f(vertexes[3][i][j].x,vertexes[3][i][j].y,vertexes[3][i][j].z);
    195             }
    196     glEnd();
    197        
    198 
    199 
    200 
    201 }
    202 
    203 void Shadow::setNormal(Vector a,int i,int j)
    204 {
    205     normal_vectors[i][j]=a;
    206 
    207 }
    208 
    209 void Shadow::setVertexNum(Vector a,int i,int j,int num)
    210 {
    211     vertexes[num][i][j]=a;
    212 
    213 }
     213
     214
     215
     216
    214217/**
    215218
     
    256259*/
    257260
    258 void Shadow::draw()
    259 {
    260     float m[16],im[16];
    261    
    262     createShadow();
    263     //glClearColor(0,0,0,0);
    264     //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    265     //glMatrixMode(GL_PROJECTION);
    266     //glLoadIdentity();
    267     //gluPerspective(45,4.0/3.0,.5,100);
    268     //glMatrixMode(GL_MODELVIEW);
    269     //glLoadIdentity();
    270    
    271    
    272    
    273     glEnable(GL_TEXTURE_GEN_S);
    274     glEnable(GL_TEXTURE_GEN_T);
    275     glEnable(GL_TEXTURE_GEN_R);
    276     glEnable(GL_TEXTURE_GEN_Q);
    277     glGetFloatv(GL_MODELVIEW_MATRIX,m);
    278     m_inverse(m,im);
    279     glMatrixMode(GL_TEXTURE);
    280     glLoadIdentity();
    281     glTranslatef(-.5,.5,0);
    282     glScalef(0.3,0.3,1.0);
    283     glOrtho(-1,1,-1,1,-1,1);
    284    
    285     gluLookAt(this->lightPos[0],this->lightPos[1],this->lightPos[2],this->playerPos[0],this->playerPos[1],this->playerPos[2],0,0,1);
    286    
    287     glMultMatrixf(im);
    288     glEnable(GL_TEXTURE_2D),
    289     glBindTexture(GL_TEXTURE_2D,this->shadow_id);
    290     glEnable(GL_BLEND);
    291     glBlendFunc(GL_DST_COLOR,GL_SRC_COLOR);
    292     glCallList(this->ground_id);
    293     glDisable(GL_BLEND);
    294     glDisable(GL_TEXTURE_2D);
    295    
    296     glLoadIdentity();
    297     glMatrixMode(GL_MODELVIEW);
    298     glDisable(GL_TEXTURE_GEN_S);
    299     glDisable(GL_TEXTURE_GEN_T);
    300     glDisable(GL_TEXTURE_GEN_R);
    301     glDisable(GL_TEXTURE_GEN_Q);
    302    
    303    
    304    
    305 }
    306261
    307262
Note: See TracChangeset for help on using the changeset viewer.