mirror of
https://github.com/opensim/opensim.git
synced 2026-08-06 01:06:30 +08:00
* Ignores VolumeDetect enabled prim in the camera raycast call. Note: The SceneRaycast call doesn't have a filter option in the interface and physics will use the lower level one for all sorts of goodies so it wouldn't be appropriate to ignore it at the physics layer yet.. though that would be better once the API has filters.
This commit is contained in:
@@ -1526,17 +1526,42 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
m_doingCamRayCast = false;
|
||||
if (hitYN && localid != LocalId)
|
||||
{
|
||||
CameraConstraintActive = true;
|
||||
pNormal.X = (float)Math.Round(pNormal.X, 2);
|
||||
pNormal.Y = (float)Math.Round(pNormal.Y, 2);
|
||||
pNormal.Z = (float)Math.Round(pNormal.Z, 2);
|
||||
pNormal.Normalize();
|
||||
collisionPoint.X = (float)Math.Round(collisionPoint.X, 1);
|
||||
collisionPoint.Y = (float)Math.Round(collisionPoint.Y, 1);
|
||||
collisionPoint.Z = (float)Math.Round(collisionPoint.Z, 1);
|
||||
SceneObjectGroup group = m_scene.GetGroupByPrim(localid);
|
||||
bool IsPrim = group != null;
|
||||
if (IsPrim)
|
||||
{
|
||||
SceneObjectPart part = group.GetPart(localid);
|
||||
if (part != null && !part.VolumeDetectActive)
|
||||
{
|
||||
CameraConstraintActive = true;
|
||||
pNormal.X = (float) Math.Round(pNormal.X, 2);
|
||||
pNormal.Y = (float) Math.Round(pNormal.Y, 2);
|
||||
pNormal.Z = (float) Math.Round(pNormal.Z, 2);
|
||||
pNormal.Normalize();
|
||||
collisionPoint.X = (float) Math.Round(collisionPoint.X, 1);
|
||||
collisionPoint.Y = (float) Math.Round(collisionPoint.Y, 1);
|
||||
collisionPoint.Z = (float) Math.Round(collisionPoint.Z, 1);
|
||||
|
||||
Vector4 plane = new Vector4(pNormal.X, pNormal.Y, pNormal.Z, Vector3.Dot(collisionPoint, pNormal));
|
||||
UpdateCameraCollisionPlane(plane);
|
||||
Vector4 plane = new Vector4(pNormal.X, pNormal.Y, pNormal.Z,
|
||||
Vector3.Dot(collisionPoint, pNormal));
|
||||
UpdateCameraCollisionPlane(plane);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
CameraConstraintActive = true;
|
||||
pNormal.X = (float) Math.Round(pNormal.X, 2);
|
||||
pNormal.Y = (float) Math.Round(pNormal.Y, 2);
|
||||
pNormal.Z = (float) Math.Round(pNormal.Z, 2);
|
||||
pNormal.Normalize();
|
||||
collisionPoint.X = (float) Math.Round(collisionPoint.X, 1);
|
||||
collisionPoint.Y = (float) Math.Round(collisionPoint.Y, 1);
|
||||
collisionPoint.Z = (float) Math.Round(collisionPoint.Z, 1);
|
||||
|
||||
Vector4 plane = new Vector4(pNormal.X, pNormal.Y, pNormal.Z,
|
||||
Vector3.Dot(collisionPoint, pNormal));
|
||||
UpdateCameraCollisionPlane(plane);
|
||||
}
|
||||
}
|
||||
else if (!m_pos.ApproxEquals(m_lastPosition, POSITION_TOLERANCE) ||
|
||||
!Rotation.ApproxEquals(m_lastRotation, ROTATION_TOLERANCE))
|
||||
|
||||
Reference in New Issue
Block a user