llLookAt() by Janus Dugong 
public void llLookAt(LSL_Vector target, double strength, double damping)
{
m_host.AddScriptLPS(1);
// Determine where we are looking from
LSL_Vector from = llGetPos();
// normalized direction to target
LSL_Vector dir = llVecNorm(target - from);
// Janus Dugong & Fumi.Hax
if (LSL_Vector.Mag(dir)<=0.0) return;
//
LSL_Vector vec_yaw = new LSL_Vector(0.0, 0.0, Math.Atan2(dir.y, dir.x)); // yaw
LSL_Vector vec_pth = new LSL_Vector(0.0, Math.Acos(dir.z), 0.0); // pitch
LSL_Rotation rot_yaw = llEuler2Rot(vec_yaw);
LSL_Rotation rot_pth = llEuler2Rot(vec_pth);
LSL_Rotation rot = rot_pth * rot_yaw;
// Per discussion with Melanie, for non-physical objects llLookAt appears to simply
// set the rotation of the object, copy that behavior
PhysicsActor pa = m_host.PhysActor;
if (strength == 0 || pa == null || !pa.IsPhysical)
{
llSetRot(rot);
}
else
{
m_host.StartLookAt(rot, (float)strength, (float)damping);
}
}
Counter: 1507,
today: 1,
yesterday: 0
最終更新: 2015-02-26 (木) 22:16:41 (JST) (3938d) by iseki
