//---------------------------------------------------------------------------- AVector Terrain::GetNormal (float x, float y) const { float xp = x + mSpacing; float xm = x - mSpacing; float yp = y + mSpacing; float ym = y - mSpacing; TerrainPage* page = GetCurrentPage(xp, y); float xtmp = xp - page->LocalTransform.GetTranslate().X(); float ytmp = y - page->LocalTransform.GetTranslate().Y(); float hpz = page->GetHeight(xtmp,ytmp); page = GetCurrentPage(xm, y); xtmp = xm - page->LocalTransform.GetTranslate().X(); ytmp = y - page->LocalTransform.GetTranslate().Y(); float hmz = page->GetHeight(xtmp,ytmp); page = GetCurrentPage(x, yp); xtmp = x - page->LocalTransform.GetTranslate().X(); ytmp = yp - page->LocalTransform.GetTranslate().Y(); float hzp = page->GetHeight(xtmp,ytmp); page = GetCurrentPage(x, ym); xtmp = x - page->LocalTransform.GetTranslate().X(); ytmp = ym - page->LocalTransform.GetTranslate().Y(); float hzm = page->GetHeight(xtmp,ytmp); AVector normal(hmz - hpz, hzm - hzp, 1.0f); normal.Normalize(); return normal; }
//---------------------------------------------------------------------------- float Terrain::GetHeight (float x, float y) const { TerrainPage* page = GetCurrentPage(x,y); x -= page->LocalTransform.GetTranslate().X(); y -= page->LocalTransform.GetTranslate().Y(); return page->GetHeight(x, y); }
//---------------------------------------------------------------------------- float Terrain::GetHeight (float x, float y) const { TerrainPage* page = GetCurrentPage(x,y); // Subtract off the translation due to wrap-around. x -= page->LocalTransform.GetTranslate().X(); y -= page->LocalTransform.GetTranslate().Y(); return page->GetHeight(x, y); }