Ticket #557: patch.diff
| File patch.diff, 4.4 KB (added by hex539, 21 months ago) |
|---|
-
trunk/source/renderer/TerrainRenderer.cpp
433 433 m->fancyWaterShader = h; 434 434 } 435 435 } 436 CTerrain* terrain = g_Game->GetWorld()->GetTerrain(); 437 // int mapSize = terrain->GetVerticesPerSide(); 436 438 437 //(Crappy) fresnel effect438 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 boundaries443 FresnelScalar = (1 - FresnelScalar) * 0.4f + 0.6f;444 445 CTerrain* terrain = g_Game->GetWorld()->GetTerrain();446 int mapSize = terrain->GetVerticesPerSide();447 439 // CLOSManager* losMgr = g_Game->GetWorld()->GetLOSManager(); 448 440 449 441 glEnable(GL_BLEND); … … 490 482 491 483 // Set the proper LOD bias 492 484 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 concise495 const int DX[] = {1,1,0,0};496 const int DZ[] = {0,1,1,0};497 485 486 const CCamera& camera = g_Renderer.GetViewCamera(); 487 CVector3D camPos = camera.m_Orientation.GetTranslation(); 488 498 489 GLint vertexDepth = 0; // water depth attribute, if using fancy water 499 490 GLint losMultiplier = 0; // LOS multiplier, if using fancy water 500 491 … … 548 539 pglUniform1iARB( normalMap, 0 ); // texture unit 0 549 540 pglUniform1iARB( reflectionMap, 1 ); // texture unit 1 550 541 pglUniform1iARB( refractionMap, 2 ); // texture unit 2 551 552 const CCamera& camera = g_Renderer.GetViewCamera();553 CVector3D camPos = camera.m_Orientation.GetTranslation();554 542 pglUniform3fvARB( cameraPos, 1, &camPos.X ); 555 543 556 544 vertexDepth = ogl_program_get_attrib_location( m->fancyWaterShader, "vertexDepth" ); … … 572 560 ssize_t x = (patch->m_X*PATCH_SIZE + dx); 573 561 ssize_t z = (patch->m_Z*PATCH_SIZE + dz); 574 562 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 575 567 // is any corner of the tile below the water height? if not, no point rendering it 576 568 bool shouldRender = false; 577 569 for(int j=0; j<4; j++) … … 588 580 continue; 589 581 } 590 582 591 for (int j=0; j<4; j++)583 for (int j=0; j<4; j++) 592 584 { 593 585 int ix = x + DX[j]; 594 586 int iz = z + DZ[j]; … … 597 589 float vertZ = iz * CELL_SIZE; 598 590 599 591 float terrainHeight = terrain->GetVertexGroundLevel(ix, iz); 592 float losMod = 1.0f; 600 593 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;606 594 /* 607 595 if (false) // XXX: need to implement this for new sim system 608 596 { … … 623 611 } 624 612 */ 625 613 626 if (fancy)614 if (fancy) 627 615 { 628 616 pglVertexAttrib1fARB( vertexDepth, WaterMgr->m_WaterHeight - terrainHeight ); 629 617 pglVertexAttrib1fARB( losMultiplier, losMod ); 618 pglMultiTexCoord2fARB(GL_TEXTURE0, vertX/repeatPeriod, vertZ/repeatPeriod); 619 glVertex3f(vertX, WaterMgr->m_WaterHeight, vertZ); 630 620 } 631 621 else 632 622 { 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); 635 640 } 636 pglMultiTexCoord2fARB(GL_TEXTURE0, vertX/repeatPeriod, vertZ/repeatPeriod); 637 glVertex3f(vertX, WaterMgr->m_WaterHeight, vertZ); 641 638 642 } 639 643 } //end of x loop 640 644 } //end of z loop
