• Advertisement
Sign in to follow this  

Interpolation of four points (grid corners)

This topic is 1796 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi all,

 

Consider, if you will, this image:

http://i.imgur.com/xsZ6duv.png

 

Assuming that the four corners there have n value, I'm looking for a way to determine the best values for the red dots (or, actually, and point within the square).  I'm trying to determine light values at a finer grain than just finding the nearest corner and using it.

 

Is there a way to do this?  I tried simple linear interpolation combining both directions, but the results aren't satisfactory, so I think the way I thought up is fatally flawed.

 

Thanks for any help!

 

--JR

 

Share this post


Link to post
Share on other sites
Advertisement

I usually do something like interpolate between the TL and TR values according to the X position to get a Top value, then interpolate between the BL and BR values according to the X position to get a Bottom value, then interpolate between my calculated Top value and my calculated Bottom value according to the Y position to get a final result.

 

Not sure if there's better options out there.

Share this post


Link to post
Share on other sites

Do you happen to have a scrap of code I can look at?  Cuz I'm doing something similar to that, I think-- I'm getting a left right value, and then modulating it against an up-down value.  Like I said, the results are... much worse than I would have expected, so I'm clearly doing something wrong.

Share this post


Link to post
Share on other sites

Do you happen to have a scrap of code I can look at?  Cuz I'm doing something similar to that, I think-- I'm getting a left right value, and then modulating it against an up-down value.  Like I said, the results are... much worse than I would have expected, so I'm clearly doing something wrong.

 

Here's some code from my perlin noise code. It uses a cosine interpolation for extra smoothness in ground height, but a straight lerp should work OK too.

 

	// Separate the base and the fraction parts.
	int iBaseX = (int)floorf(vInput.GetX());
	float fFractionX = vInput.GetX() - (float)iBaseX;
	int iBaseY = (int)floorf(vInput.GetY());
	float fFractionY = vInput.GetY() - (float)iBaseY;

    // Cosine interpolation
    float fTL = GetDiscreteNoise2D(iBaseX, iBaseY, pPrimeSet);
    float fTR = GetDiscreteNoise2D(iBaseX + 1, iBaseY, pPrimeSet);
    float fBL = GetDiscreteNoise2D(iBaseX, iBaseY + 1, pPrimeSet);
    float fBR = GetDiscreteNoise2D(iBaseX + 1, iBaseY + 1, pPrimeSet);
    float fT = CosInterp(fTL, fTR, fFractionX);
    float fB = CosInterp(fBL, fBR, fFractionX);
    float fRet = CosInterp(fT, fB, fFractionY);
    return fRet;

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement