я пытался....
real AngleR(real x,real y,real x1,real y1,real angle){
DisplayTimedTextToPlayer(Player(0),0,0,2,R2S(angle))
if y>0{ Верх,Низ
DisplayTimedTextToPlayer(Player(0),0,0,2,"else")
return -angle
elseif Непонятно
DisplayTimedTextToPlayer(Player(0),0,0,2,"+")
return -angle + 180
else
DisplayTimedTextToPlayer(Player(0),0,0,2,"-")
return -angle - 180
}
return 0.0
}
DisplayTimedTextToPlayer(Player(0),0,0,2,R2S(angle))
if y>0{ Верх,Низ
DisplayTimedTextToPlayer(Player(0),0,0,2,"else")
return -angle
elseif Непонятно
DisplayTimedTextToPlayer(Player(0),0,0,2,"+")
return -angle + 180
else
DisplayTimedTextToPlayer(Player(0),0,0,2,"-")
return -angle - 180
}
return 0.0
}
Принятый ответ
Самое главное - получить нормаль, вот некоторые функции, которые тебе пригодятся:
float3 GetNormal(float3 a, float3 b, float3 c)
{
float wrki;
float3 v1 = float3.create();
float3 v2 = float3.create();
float3 normal = float3.create();
v1.x = a.x - b.x;
v1.y = a.y - b.y;
v1.z = a.z - b.z;
v2.x = b.x - c.x;
v2.y = b.y - c.y;
v2.z = b.z - c.z;
wrki = SquareRoot(sqr(v1.y * v2.z - v1.z * v2.y) + sqr(v1.z * v2.x - v1.x * v2.z) + sqr(v1.x * v2.y - v1.y * v2.x));
normal.x = (v1.y * v2.z - v1.z * v2.y) / wrki;
normal.y = (v1.z * v2.x - v1.x * v2.z) / wrki;
normal.z = (v1.x * v2.y - v1.y * v2.x) / wrki;
return normal;
}
float DotProduct(float3 v1, float3 v2)
{
return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z;
}
float3 Reflect(float3 ray, float3 normal)
{
return -2 * DotProduct(ray, normal) * normal + ray;
}
Далее в функции движения снаряда определяем столкновение с землёй, получаем нормаль и строим вектор отражения по данной нормали и текущей скорости снаряда:
float3 v1 = float3.New(curPos.x+2, curPos.y+2, GetTerrainZ(curPos.x+2, curPos.y+2));
float3 v2 = float3.New(curPos.x+2, curPos.y, GetTerrainZ(curPos.x+2, curPos.y));
float3 v3 = float3.New(curPos.x, curPos.y+2, GetTerrainZ(curPos.x, curPos.y+2));
float3 normal = GetNormal(v1, v2, v3);
float3 reflect = Reflect(curVelocity, normal);
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован ENAleksey
Ох не думал я что все так сложно.
Ладно пойду разбирать.Спасибо)