Ticket #557: patch.diff

File patch.diff, 4.4 KB (added by hex539, 21 months ago)

diff for these changes

  • trunk/source/renderer/TerrainRenderer.cpp

     
    433433            m->fancyWaterShader = h; 
    434434        } 
    435435    } 
     436    CTerrain* terrain = g_Game->GetWorld()->GetTerrain(); 
     437//  int mapSize = terrain->GetVerticesPerSide(); 
    436438 
    437     //(Crappy) fresnel effect 
    438     const CCamera* Camera=g_Game->GetView()->GetCamera(); 
    439     CVector3D CamFace=Camera->m_Orientation.GetIn(); 
    440     CamFace.Normalize(); 
    441     float FresnelScalar = CamFace.Dot( CVector3D(0.0f, -1.0f, 0.0f) ); 
    442     //Invert and set boundaries 
    443     FresnelScalar = (1 - FresnelScalar) * 0.4f + 0.6f; 
    444  
    445     CTerrain* terrain = g_Game->GetWorld()->GetTerrain(); 
    446     int mapSize = terrain->GetVerticesPerSide(); 
    447439//  CLOSManager* losMgr = g_Game->GetWorld()->GetLOSManager(); 
    448440     
    449441    glEnable(GL_BLEND); 
     
    490482 
    491483    // Set the proper LOD bias 
    492484    glTexEnvf(GL_TEXTURE_FILTER_CONTROL, GL_TEXTURE_LOD_BIAS, g_Renderer.m_Options.m_LodBias); 
    493      
    494     // Some offsets used to go around counterclockwise while keeping code concise 
    495     const int DX[] = {1,1,0,0}; 
    496     const int DZ[] = {0,1,1,0}; 
    497485 
     486    const CCamera& camera = g_Renderer.GetViewCamera(); 
     487    CVector3D camPos = camera.m_Orientation.GetTranslation(); 
     488 
    498489    GLint vertexDepth = 0;  // water depth attribute, if using fancy water 
    499490    GLint losMultiplier = 0;    // LOS multiplier, if using fancy water 
    500491 
     
    548539        pglUniform1iARB( normalMap, 0 );        // texture unit 0 
    549540        pglUniform1iARB( reflectionMap, 1 );    // texture unit 1 
    550541        pglUniform1iARB( refractionMap, 2 );    // texture unit 2 
    551  
    552         const CCamera& camera = g_Renderer.GetViewCamera(); 
    553         CVector3D camPos = camera.m_Orientation.GetTranslation(); 
    554542        pglUniform3fvARB( cameraPos, 1, &camPos.X ); 
    555543 
    556544        vertexDepth = ogl_program_get_attrib_location( m->fancyWaterShader, "vertexDepth" ); 
     
    572560                ssize_t x = (patch->m_X*PATCH_SIZE + dx); 
    573561                ssize_t z = (patch->m_Z*PATCH_SIZE + dz); 
    574562 
     563                // Some offsets used to go around counterclockwise while keeping code concise 
     564                const int DX[] = {1,1,0,0}; 
     565                const int DZ[] = {0,1,1,0}; 
     566 
    575567                // is any corner of the tile below the water height? if not, no point rendering it 
    576568                bool shouldRender = false; 
    577569                for(int j=0; j<4; j++) 
     
    588580                    continue; 
    589581                } 
    590582 
    591                 for(int j=0; j<4; j++) 
     583                for (int j=0; j<4; j++) 
    592584                { 
    593585                    int ix = x + DX[j]; 
    594586                    int iz = z + DZ[j]; 
     
    597589                    float vertZ = iz * CELL_SIZE; 
    598590 
    599591                    float terrainHeight = terrain->GetVertexGroundLevel(ix, iz); 
     592                    float losMod = 1.0f; 
    600593 
    601                     float alpha = clamp( 
    602                         (WaterMgr->m_WaterHeight - terrainHeight) / WaterMgr->m_WaterFullDepth + WaterMgr->m_WaterAlphaOffset, 
    603                         -100.0f, WaterMgr->m_WaterMaxAlpha); 
    604  
    605                     float losMod = 1.0f; 
    606594                    /* 
    607595                    if (false) // XXX: need to implement this for new sim system 
    608596                    { 
     
    623611                    } 
    624612                    */ 
    625613 
    626                     if(fancy) 
     614                    if (fancy) 
    627615                    { 
    628616                        pglVertexAttrib1fARB( vertexDepth, WaterMgr->m_WaterHeight - terrainHeight ); 
    629617                        pglVertexAttrib1fARB( losMultiplier, losMod ); 
     618                        pglMultiTexCoord2fARB(GL_TEXTURE0, vertX/repeatPeriod, vertZ/repeatPeriod); 
     619                        glVertex3f(vertX, WaterMgr->m_WaterHeight, vertZ); 
    630620                    } 
    631621                    else 
    632622                    { 
    633                         glColor4f(WaterMgr->m_WaterColor.r*losMod, WaterMgr->m_WaterColor.g*losMod,  
    634                             WaterMgr->m_WaterColor.b*losMod, alpha * FresnelScalar); 
     623                        float alpha = clamp( (WaterMgr->m_WaterHeight - terrainHeight) / WaterMgr->m_WaterFullDepth + WaterMgr->m_WaterAlphaOffset, 
     624                                              WaterMgr->m_WaterAlphaOffset, WaterMgr->m_WaterMaxAlpha); 
     625 
     626                        //(Crappy) fresnel effect 
     627                        CVector3D CamFaceVertex=CVector3D(vertX,WaterMgr->m_WaterHeight,vertZ)-camPos; 
     628                        CamFaceVertex.Normalize(); 
     629                        float FresnelScalar = CamFaceVertex.Dot( CVector3D(0.0f, -1.0f, 0.0f) ); 
     630                        //Invert and set boundaries 
     631                        FresnelScalar = 1.f - (FresnelScalar * 0.6); 
     632 
     633 
     634                        glColor4f(WaterMgr->m_WaterColor.r*losMod, 
     635                                  WaterMgr->m_WaterColor.g*losMod,  
     636                                  WaterMgr->m_WaterColor.b*losMod, 
     637                                  alpha * FresnelScalar); 
     638                        pglMultiTexCoord2fARB(GL_TEXTURE0, vertX/repeatPeriod, vertZ/repeatPeriod); 
     639                        glVertex3f(vertX, WaterMgr->m_WaterHeight, vertZ); 
    635640                    } 
    636                     pglMultiTexCoord2fARB(GL_TEXTURE0, vertX/repeatPeriod, vertZ/repeatPeriod); 
    637                     glVertex3f(vertX, WaterMgr->m_WaterHeight, vertZ); 
     641 
    638642                } 
    639643            }   //end of x loop 
    640644        }   //end of z loop