Added support for equalizing the normals along tile boundaries.

This commit is contained in:
Robert Osfield
2005-07-02 08:11:55 +00:00
parent 68cb69ee82
commit 72488d274f
6 changed files with 274 additions and 20 deletions

View File

@@ -37,8 +37,7 @@ void HeightField::allocate(unsigned int numColumns,unsigned int numRows)
Vec3 HeightField::getNormal(unsigned int c,unsigned int r) const
{
// four point normal generation.
float dz_dx;
float dz_dx;
if (c==0)
{
dz_dx = (getHeight(c+1,r)-getHeight(c,r))/getXInterval();
@@ -72,4 +71,37 @@ Vec3 HeightField::getNormal(unsigned int c,unsigned int r) const
return normal;
}
Vec2 HeightField::getHeightDelta(unsigned int c,unsigned int r) const
{
// four point normal generation.
Vec2 heightDelta;
if (c==0)
{
heightDelta.x() = (getHeight(c+1,r)-getHeight(c,r));
}
else if (c==getNumColumns()-1)
{
heightDelta.x() = (getHeight(c,r)-getHeight(c-1,r));
}
else // assume 0<c<_numColumns-1
{
heightDelta.x() = 0.5f*(getHeight(c+1,r)-getHeight(c-1,r));
}
if (r==0)
{
heightDelta.y() = (getHeight(c,r+1)-getHeight(c,r));
}
else if (r==getNumRows()-1)
{
heightDelta.y() = (getHeight(c,r)-getHeight(c,r-1));
}
else // assume 0<r<_numRows-1
{
heightDelta.y() = 0.5f*(getHeight(c,r+1)-getHeight(c,r-1));
}
return heightDelta;
}