|
1: 2015-02-26 (木) 22:16:24 iseki |
| + | *** llLookAt() by Janus Dugong [#wb1da18a] |
| + | 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); |
| + | } |
| + | } |
|
106 人のユーザが現在オンラインです。 (22 人のユーザが xpwiki を参照しています。)
登録ユーザ: 0
ゲスト: 106
もっと...
|
|