我找到了。谢谢大家。
游戏使用 N3Terrain :)
float CN3Terrain::GetHeight(float x, float z)
{ int ix, iz; ix = ((int)x) / TILE_SIZE; iz = ((int)z) / TILE_SIZE;
if(ix<0 || ix>(m_ti_MapSize-2)) return -FLT_MAX;
if(iz<0 || iz>(m_ti_MapSize-2)) return -FLT_MAX;
float dX, dZ;
dX = (x - (ix*TILE_SIZE)) / TILE_SIZE;
dZ = (z - (iz*TILE_SIZE)) / TILE_SIZE;
float y;
float h1, h2, h3, h12, h13;
if((ix+iz)%2==0) //»ç°¢ÇüÀÌ / ¸ð¾ç..
{
h1 = m_pMapData[ix*m_ti_MapSize + iz].fHeight;
h3 = m_pMapData[(ix+1)*m_ti_MapSize + (iz+1)].fHeight;
if (dZ > dX) //ÀÂÊ »ï°¢Çü..
{
h2 = m_pMapData[ix*m_ti_MapSize + (iz+1)].fHeight;
h12 = h1 + (h2-h1) * dZ; // h1°ú h2»çÀÌÀÇ ³ôÀÌ°ª
h13 = h1 + (h3-h1) * dZ; // h1°ú h3»çÀÌÀÇ ³ôÀÌ°ª
y = h12 + ((h13-h12) * (dX/dZ)); // ã°íÀÚ ÇÏ´Â ³ôÀÌ°ª
return y;
}
else //¾Æ·¡ÂÊ »ï°¢Çü..
{
if(dX==0.0f) return h1;
h2 = m_pMapData[(ix+1)*m_ti_MapSize + iz].fHeight;
h12 = h1 + (h2-h1) * dX; // h1°ú h2»çÀÌÀÇ ³ôÀÌ°ª
h13 = h1 + (h3-h1) * dX; // h1°ú h3»çÀÌÀÇ ³ôÀÌ°ª
y = h12 + ((h13-h12) * (dZ/dX)); // ã°íÀÚ ÇÏ´Â ³ôÀÌ°ª
return y;
}
}
else if ((ix+iz)%2==1) //»ç°¢ÇüÀÌ ¿ª½½·¹½¬ ¸ð¾ç..
{
h1 = m_pMapData[(ix+1)*m_ti_MapSize + iz].fHeight;
h3 = m_pMapData[ix*m_ti_MapSize + (iz+1)].fHeight;
if ((dX+dZ) > 1.0f) //ÀÂÊ »ï°¢Çü..
{
if(dZ==0.0f) return h1;
h2 = m_pMapData[(ix+1)*m_ti_MapSize + (iz+1)].fHeight;
h12 = h1 + (h2-h1) * dZ;
h13 = h1 + (h3-h1) * dZ;
y = h12 + ((h13-h12) * ((1.0f-dX)/dZ));
return y;
}
else //¾Æ·¡ÂÊ »ï°¢Çü..
{
if(dX==1.0f) return h1;
h2 = m_pMapData[ix*m_ti_MapSize + iz].fHeight;
h12 = h2+(h1-h2)*dX; // h1°ú h2»çÀÌÀÇ ³ôÀÌ°ª
h13 = h3+(h1-h3)*dX; // h1°ú h3»çÀÌÀÇ ³ôÀÌ°ª
y = h12 + ((h13-h12) * (dZ/(1.0f-dX)));
return y;
}
}
return -FLT_MAX;
}