水波实现算法
图形学做课设~有个水体波纹·有个函数看不懂··来请教各位大大
希望有帮忙的·不胜感激
void CWaterRoutine::HeightBlob(int x, int y, int radius, int height, int page)
{
int rquad;
int cx, cy, cyq;
int left, top, right, bottom;
int *newptr;
int *oldptr;
// Set up the pointers
if(page == 0)
{
newptr = &m_iHeightField1[0];
oldptr = &m_iHeightField2[0];
}
else
{
newptr = &m_iHeightField2[0];
oldptr = &m_iHeightField1[0];
}
rquad = radius * radius;
// Make a randomly-placed blob...
if(x<0) x = 1+radius+ rand()%(m_iWidth-2*radius-1);
if(y<0) y = 1+radius+ rand()%(m_iHeight-2*radius-1);
left=-radius; right = radius;
top=-radius; bottom = radius;
// Perform edge clipping...
if(x - radius < 1) left -= (x-radius-1);
if(y - radius < 1) top -= (y-radius-1);
if(x + radius > m_iWidth-1) right -= (x+radius-m_iWidth+1);
if(y + radius > m_iHeight-1) bottom-= (y+radius-m_iHeight+1);
for(cy = top; cy < bottom; cy++)
{
cyq = cy*cy;
for(cx = left; cx < right; cx++)
{
if(cx*cx + cyq < rquad)
newptr[m_iWidth*(cy+y) + (cx+x)] += height;
}
}
}