aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDahlia Trimble2008-09-02 01:54:08 +0000
committerDahlia Trimble2008-09-02 01:54:08 +0000
commita5e78076122d3828038aad8234887c7a5157ddfa (patch)
tree2c417b5fac2eac722b63a9b84ef443ea39c3426e
parentAdd an explicit cast to bool for the if expression so that any base types (diff)
downloadopensim-SC_OLD-a5e78076122d3828038aad8234887c7a5157ddfa.zip
opensim-SC_OLD-a5e78076122d3828038aad8234887c7a5157ddfa.tar.gz
opensim-SC_OLD-a5e78076122d3828038aad8234887c7a5157ddfa.tar.bz2
opensim-SC_OLD-a5e78076122d3828038aad8234887c7a5157ddfa.tar.xz
Y top shear accuracy improvements in circular path prim meshes
-rw-r--r--OpenSim/Region/Physics/Meshing/PrimMesher.cs8
1 files changed, 5 insertions, 3 deletions
diff --git a/OpenSim/Region/Physics/Meshing/PrimMesher.cs b/OpenSim/Region/Physics/Meshing/PrimMesher.cs
index d0a09ff..f03aa7c 100644
--- a/OpenSim/Region/Physics/Meshing/PrimMesher.cs
+++ b/OpenSim/Region/Physics/Meshing/PrimMesher.cs
@@ -737,6 +737,7 @@ namespace OpenSim.Region.Physics.Meshing
737 float totalSkew = this.skew * 2.0f * pathLength; 737 float totalSkew = this.skew * 2.0f * pathLength;
738 float skewStart = this.pathCutBegin * 2.0f * this.skew - this.skew; 738 float skewStart = this.pathCutBegin * 2.0f * this.skew - this.skew;
739 float xOffsetTopShearXFactor = this.topShearX * (0.25f + 0.5f * (0.5f - this.holeSizeY)); 739 float xOffsetTopShearXFactor = this.topShearX * (0.25f + 0.5f * (0.5f - this.holeSizeY));
740 float yShearCompensation = 1.0f + Math.Abs(this.topShearY) * 0.25f;
740 741
741 // It's not quite clear what pushY (Y top shear) does, but subtracting it from the start and end 742 // It's not quite clear what pushY (Y top shear) does, but subtracting it from the start and end
742 // angles appears to approximate it's effects on path cut. Likewise, adding it to the angle used 743 // angles appears to approximate it's effects on path cut. Likewise, adding it to the angle used
@@ -825,9 +826,9 @@ namespace OpenSim.Region.Physics.Meshing
825 float xOffset = 0.5f * (skewStart + totalSkew * percentOfAngles); 826 float xOffset = 0.5f * (skewStart + totalSkew * percentOfAngles);
826 xOffset += (float)Math.Sin(angle) * xOffsetTopShearXFactor; 827 xOffset += (float)Math.Sin(angle) * xOffsetTopShearXFactor;
827 828
828 float yOffset = (float)Math.Cos(angle) * (0.5f - yPathScale) * radiusScale; 829 float yOffset = yShearCompensation * (float)Math.Cos(angle) * (0.5f - yPathScale) * radiusScale;
829 830
830 float zOffset = (float)Math.Sin(angle + this.topShearY * 0.9f) * (0.5f - yPathScale) * radiusScale; 831 float zOffset = (float)Math.Sin(angle + this.topShearY) * (0.5f - yPathScale) * radiusScale;
831 832
832 // next apply twist rotation to the profile layer 833 // next apply twist rotation to the profile layer
833 if (twistTotal != 0.0f || twistBegin != 0.0f) 834 if (twistTotal != 0.0f || twistBegin != 0.0f)
@@ -835,7 +836,8 @@ namespace OpenSim.Region.Physics.Meshing
835 836
836 // now orient the rotation of the profile layer relative to it's position on the path 837 // now orient the rotation of the profile layer relative to it's position on the path
837 // adding taperY to the angle used to generate the quat appears to approximate the viewer 838 // adding taperY to the angle used to generate the quat appears to approximate the viewer
838 newLayer.AddRot(new Quaternion(new Vertex(1.0f, 0.0f, 0.0f), angle + this.topShearY * 0.9f)); 839 //newLayer.AddRot(new Quaternion(new Vertex(1.0f, 0.0f, 0.0f), angle + this.topShearY * 0.9f));
840 newLayer.AddRot(new Quaternion(new Vertex(1.0f, 0.0f, 0.0f), angle + this.topShearY));
839 newLayer.AddPos(xOffset, yOffset, zOffset); 841 newLayer.AddPos(xOffset, yOffset, zOffset);
840 842
841 if (angle == startAngle) 843 if (angle == startAngle)