|
发表于 2008-5-21 09:18:00
|
显示全部楼层
Re:关于刷地形的算法
那个圆只是近似圆,我用了24个点+线连起来的,每个点的高度是根据地形计算出来的。
具体算法其实不复杂
//单个点受影响进行高度的提升或降低
bool UpOrDownPoint(const D3DXVECTOR3& picketPoint, float& x, float& y, float& z,
float radius ,float strengthPower, float strengthArc)
{
float distance2 = (x - picketPoint.x) * (x - picketPoint.x) +
(z - picketPoint.z) * (z - picketPoint.z);
float r2 = radius * radius;
float fp = pow((1- distance2 / r2),(1- strengthArc)) * strengthPower;
//单次循环,凹凸变化的步长,可以根据需要进行修改
if(distance2 < r2)
{
if(gDInput->KeyDown(DIK_LCONTROL))
{
y += fp;
return true;
}
if(gDInput->KeyDown(DIK_LALT))
{
y -= fp;
return true;
}
if(gDInput->KeyDown(DIK_LSHIFT))
{
if(y > 0)
{
if(y <= fp)
y = 0;
else
y -= fp;
}
else
{
if(-y <= fp)
y = 0;
else
y += fp;
}
return true;
}
}
return false;
} |
|