diff options
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs | 14 | ||||
-rwxr-xr-x | OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs | 15 | ||||
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs | 6 | ||||
-rwxr-xr-x | OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt | 75 |
4 files changed, 67 insertions, 43 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs index aa247dd..c27d3f0 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs | |||
@@ -774,7 +774,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin | |||
774 | 774 | ||
775 | // Since the computation of terrain height can be a little involved, this routine | 775 | // Since the computation of terrain height can be a little involved, this routine |
776 | // is used to fetch the height only once for each vehicle simulation step. | 776 | // is used to fetch the height only once for each vehicle simulation step. |
777 | Vector3 lastRememberedHeightPos; | 777 | Vector3 lastRememberedHeightPos = new Vector3(-1, -1, -1); |
778 | private float GetTerrainHeight(Vector3 pos) | 778 | private float GetTerrainHeight(Vector3 pos) |
779 | { | 779 | { |
780 | if ((m_knownHas & m_knownChangedTerrainHeight) == 0 || pos != lastRememberedHeightPos) | 780 | if ((m_knownHas & m_knownChangedTerrainHeight) == 0 || pos != lastRememberedHeightPos) |
@@ -788,14 +788,16 @@ namespace OpenSim.Region.Physics.BulletSPlugin | |||
788 | 788 | ||
789 | // Since the computation of water level can be a little involved, this routine | 789 | // Since the computation of water level can be a little involved, this routine |
790 | // is used ot fetch the level only once for each vehicle simulation step. | 790 | // is used ot fetch the level only once for each vehicle simulation step. |
791 | Vector3 lastRememberedWaterHeightPos = new Vector3(-1, -1, -1); | ||
791 | private float GetWaterLevel(Vector3 pos) | 792 | private float GetWaterLevel(Vector3 pos) |
792 | { | 793 | { |
793 | if ((m_knownHas & m_knownChangedWaterLevel) == 0) | 794 | if ((m_knownHas & m_knownChangedWaterLevel) == 0 || pos != lastRememberedWaterHeightPos) |
794 | { | 795 | { |
796 | lastRememberedWaterHeightPos = pos; | ||
795 | m_knownWaterLevel = ControllingPrim.PhysScene.TerrainManager.GetWaterLevelAtXYZ(pos); | 797 | m_knownWaterLevel = ControllingPrim.PhysScene.TerrainManager.GetWaterLevelAtXYZ(pos); |
796 | m_knownHas |= m_knownChangedWaterLevel; | 798 | m_knownHas |= m_knownChangedWaterLevel; |
797 | } | 799 | } |
798 | return (float)m_knownWaterLevel; | 800 | return m_knownWaterLevel; |
799 | } | 801 | } |
800 | 802 | ||
801 | private Vector3 VehiclePosition | 803 | private Vector3 VehiclePosition |
@@ -991,11 +993,17 @@ namespace OpenSim.Region.Physics.BulletSPlugin | |||
991 | { | 993 | { |
992 | Vector3 vel = VehicleVelocity; | 994 | Vector3 vel = VehicleVelocity; |
993 | if ((m_flags & (VehicleFlag.NO_X)) != 0) | 995 | if ((m_flags & (VehicleFlag.NO_X)) != 0) |
996 | { | ||
994 | vel.X = 0; | 997 | vel.X = 0; |
998 | } | ||
995 | if ((m_flags & (VehicleFlag.NO_Y)) != 0) | 999 | if ((m_flags & (VehicleFlag.NO_Y)) != 0) |
1000 | { | ||
996 | vel.Y = 0; | 1001 | vel.Y = 0; |
1002 | } | ||
997 | if ((m_flags & (VehicleFlag.NO_Z)) != 0) | 1003 | if ((m_flags & (VehicleFlag.NO_Z)) != 0) |
1004 | { | ||
998 | vel.Z = 0; | 1005 | vel.Z = 0; |
1006 | } | ||
999 | VehicleVelocity = vel; | 1007 | VehicleVelocity = vel; |
1000 | } | 1008 | } |
1001 | 1009 | ||
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs b/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs index 1214703..7693195 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs | |||
@@ -188,6 +188,8 @@ public class BSVMotor : BSMotor | |||
188 | CurrentValue = current; | 188 | CurrentValue = current; |
189 | return Step(timeStep); | 189 | return Step(timeStep); |
190 | } | 190 | } |
191 | // Given and error, computer a correction for this step. | ||
192 | // Simple scaling of the error by the timestep. | ||
191 | public virtual Vector3 StepError(float timeStep, Vector3 error) | 193 | public virtual Vector3 StepError(float timeStep, Vector3 error) |
192 | { | 194 | { |
193 | if (!Enabled) return Vector3.Zero; | 195 | if (!Enabled) return Vector3.Zero; |
@@ -221,7 +223,7 @@ public class BSVMotor : BSMotor | |||
221 | CurrentValue, TargetValue); | 223 | CurrentValue, TargetValue); |
222 | 224 | ||
223 | LastError = BSMotor.InfiniteVector; | 225 | LastError = BSMotor.InfiniteVector; |
224 | while (maxOutput-- > 0 && !LastError.ApproxEquals(Vector3.Zero, ErrorZeroThreshold)) | 226 | while (maxOutput-- > 0 && !ErrorIsZero()) |
225 | { | 227 | { |
226 | Vector3 lastStep = Step(timeStep); | 228 | Vector3 lastStep = Step(timeStep); |
227 | MDetailLog("{0},BSVMotor.Test,{1},cur={2},tgt={3},lastError={4},lastStep={5}", | 229 | MDetailLog("{0},BSVMotor.Test,{1},cur={2},tgt={3},lastError={4},lastStep={5}", |
@@ -375,7 +377,6 @@ public class BSPIDVMotor : BSVMotor | |||
375 | // The factors are vectors for the three dimensions. This is the proportional of each | 377 | // The factors are vectors for the three dimensions. This is the proportional of each |
376 | // that is applied. This could be multiplied through the actual factors but it | 378 | // that is applied. This could be multiplied through the actual factors but it |
377 | // is sometimes easier to manipulate the factors and their mix separately. | 379 | // is sometimes easier to manipulate the factors and their mix separately. |
378 | // to | ||
379 | public Vector3 FactorMix; | 380 | public Vector3 FactorMix; |
380 | 381 | ||
381 | // Arbritrary factor range. | 382 | // Arbritrary factor range. |
@@ -413,14 +414,14 @@ public class BSPIDVMotor : BSVMotor | |||
413 | // If efficiency is high (1f), use a factor value that moves the error value to zero with little overshoot. | 414 | // If efficiency is high (1f), use a factor value that moves the error value to zero with little overshoot. |
414 | // If efficiency is low (0f), use a factor value that overcorrects. | 415 | // If efficiency is low (0f), use a factor value that overcorrects. |
415 | // TODO: might want to vary contribution of different factor depending on efficiency. | 416 | // TODO: might want to vary contribution of different factor depending on efficiency. |
416 | float factor = ((1f - this.Efficiency) * EfficiencyHigh + EfficiencyLow) / 3f; | 417 | // float factor = ((1f - this.Efficiency) * EfficiencyHigh + EfficiencyLow) / 3f; |
417 | // float factor = (1f - this.Efficiency) * EfficiencyHigh + EfficiencyLow; | 418 | float factor = (1f - this.Efficiency) * EfficiencyHigh + EfficiencyLow; |
418 | 419 | ||
419 | proportionFactor = new Vector3(factor, factor, factor); | 420 | proportionFactor = new Vector3(factor, factor, factor); |
420 | integralFactor = new Vector3(factor, factor, factor); | 421 | integralFactor = new Vector3(factor, factor, factor); |
421 | derivFactor = new Vector3(factor, factor, factor); | 422 | derivFactor = new Vector3(factor, factor, factor); |
422 | 423 | ||
423 | MDetailLog("{0},BSPIDVMotor.setEfficiency,eff={1},factor={2}", BSScene.DetailLogZero, Efficiency, factor); | 424 | MDetailLog("{0}, BSPIDVMotor.setEfficiency,eff={1},factor={2}", BSScene.DetailLogZero, Efficiency, factor); |
424 | } | 425 | } |
425 | } | 426 | } |
426 | 427 | ||
@@ -441,8 +442,8 @@ public class BSPIDVMotor : BSVMotor | |||
441 | + derivitive / TimeScale * derivFactor * FactorMix.Z | 442 | + derivitive / TimeScale * derivFactor * FactorMix.Z |
442 | ; | 443 | ; |
443 | 444 | ||
444 | MDetailLog("{0}, BSPIDVMotor.step,ts={1},err={2},runnInt={3},deriv={4},ret={5}", | 445 | MDetailLog("{0}, BSPIDVMotor.step,ts={1},err={2},lerr={3},runnInt={4},deriv={5},ret={6}", |
445 | BSScene.DetailLogZero, timeStep, error, RunningIntegration, derivitive, ret); | 446 | BSScene.DetailLogZero, timeStep, error, LastError, RunningIntegration, derivitive, ret); |
446 | 447 | ||
447 | return ret; | 448 | return ret; |
448 | } | 449 | } |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs index b2947c6..f0858ca 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs | |||
@@ -1125,7 +1125,9 @@ public class BSPrim : BSPhysObject | |||
1125 | OMV.Vector3 addForce = force; | 1125 | OMV.Vector3 addForce = force; |
1126 | PhysScene.TaintedObject(inTaintTime, "BSPrim.AddForce", delegate() | 1126 | PhysScene.TaintedObject(inTaintTime, "BSPrim.AddForce", delegate() |
1127 | { | 1127 | { |
1128 | // Bullet adds this central force to the total force for this tick | 1128 | // Bullet adds this central force to the total force for this tick. |
1129 | // Deep down in Bullet: | ||
1130 | // linearVelocity += totalForce / mass * timeStep; | ||
1129 | DetailLog("{0},BSPrim.addForce,taint,force={1}", LocalID, addForce); | 1131 | DetailLog("{0},BSPrim.addForce,taint,force={1}", LocalID, addForce); |
1130 | if (PhysBody.HasPhysicalBody) | 1132 | if (PhysBody.HasPhysicalBody) |
1131 | { | 1133 | { |
@@ -1493,6 +1495,8 @@ public class BSPrim : BSPhysObject | |||
1493 | 1495 | ||
1494 | returnMass = Util.Clamp(returnMass, BSParam.MinimumObjectMass, BSParam.MaximumObjectMass); | 1496 | returnMass = Util.Clamp(returnMass, BSParam.MinimumObjectMass, BSParam.MaximumObjectMass); |
1495 | // DetailLog("{0},BSPrim.CalculateMass,den={1},vol={2},mass={3}", LocalID, Density, volume, returnMass); | 1497 | // DetailLog("{0},BSPrim.CalculateMass,den={1},vol={2},mass={3}", LocalID, Density, volume, returnMass); |
1498 | DetailLog("{0},BSPrim.CalculateMass,den={1},vol={2},mass={3},pathB={4},pathE={5},profB={6},profE={7},siz={8}", | ||
1499 | LocalID, Density, volume, returnMass, pathBegin, pathEnd, profileBegin, profileEnd, _size); | ||
1496 | 1500 | ||
1497 | return returnMass; | 1501 | return returnMass; |
1498 | }// end CalculateMass | 1502 | }// end CalculateMass |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt b/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt index 4357ef1..0453376 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt +++ b/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt | |||
@@ -3,25 +3,21 @@ CURRENT PROBLEMS TO FIX AND/OR LOOK AT | |||
3 | Vehicle buoyancy. Computed correctly? Possibly creating very large effective mass. | 3 | Vehicle buoyancy. Computed correctly? Possibly creating very large effective mass. |
4 | Interaction of llSetBuoyancy and vehicle buoyancy. Should be additive? | 4 | Interaction of llSetBuoyancy and vehicle buoyancy. Should be additive? |
5 | Negative buoyancy computed correctly | 5 | Negative buoyancy computed correctly |
6 | Center-of-gravity | ||
6 | Computation of mesh mass. How done? How should it be done? | 7 | Computation of mesh mass. How done? How should it be done? |
7 | Script changing rotation of child prim while vehicle moving (eg turning wheel) causes | ||
8 | the wheel to appear to jump back. Looks like sending position from previous update. | ||
9 | Enable vehicle border crossings (at least as poorly as ODE) | 8 | Enable vehicle border crossings (at least as poorly as ODE) |
10 | Terrain skirts | 9 | Terrain skirts |
11 | Avatar created in previous region and not new region when crossing border | 10 | Avatar created in previous region and not new region when crossing border |
12 | Vehicle recreated in new sim at small Z value (offset from root value?) (DONE) | 11 | Vehicle recreated in new sim at small Z value (offset from root value?) (DONE) |
12 | User settable terrain mesh | ||
13 | Allow specifying as convex or concave and use different getHeight functions depending | ||
14 | Boats, when turning nose down into the water | ||
15 | Acts like rotation around Z is also effecting rotation around X and Y | ||
13 | Deleting a linkset while standing on the root will leave the physical shape of the root behind. | 16 | Deleting a linkset while standing on the root will leave the physical shape of the root behind. |
14 | Not sure if it is because standing on it. Done with large prim linksets. | 17 | Not sure if it is because standing on it. Done with large prim linksets. |
15 | Linkset child rotations. | 18 | Linkset child rotations. |
16 | Nebadon spiral tube has middle sections which are rotated wrong. | 19 | Nebadon spiral tube has middle sections which are rotated wrong. |
17 | Select linked spiral tube. Delink and note where the middle section ends up. | 20 | Select linked spiral tube. Delink and note where the middle section ends up. |
18 | Refarb compound linkset creation to create a pseudo-root for center-of-mass | ||
19 | Let children change their shape to physical indendently and just add shapes to compound | ||
20 | Vehicle angular vertical attraction | ||
21 | vehicle angular banking | ||
22 | Center-of-gravity | ||
23 | Vehicle angular deflection | ||
24 | Preferred orientation angular correction fix | ||
25 | Teravus llMoveToTarget script debug | 21 | Teravus llMoveToTarget script debug |
26 | Mixing of hover, buoyancy/gravity, moveToTarget, into one force | 22 | Mixing of hover, buoyancy/gravity, moveToTarget, into one force |
27 | Setting hover height to zero disables hover even if hover flags are on (from SL wiki) | 23 | Setting hover height to zero disables hover even if hover flags are on (from SL wiki) |
@@ -33,10 +29,16 @@ Vehicle script tuning/debugging | |||
33 | Avanti speed script | 29 | Avanti speed script |
34 | Weapon shooter script | 30 | Weapon shooter script |
35 | Move material definitions (friction, ...) into simulator. | 31 | Move material definitions (friction, ...) into simulator. |
32 | osGetPhysicsEngineVerion() and create a version code for the C++ DLL | ||
36 | One sided meshes? Should terrain be built into a closed shape? | 33 | One sided meshes? Should terrain be built into a closed shape? |
37 | When meshes get partially wedged into the terrain, they cannot push themselves out. | 34 | When meshes get partially wedged into the terrain, they cannot push themselves out. |
38 | It is possible that Bullet processes collisions whether entering or leaving a mesh. | 35 | It is possible that Bullet processes collisions whether entering or leaving a mesh. |
39 | Ref: http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=4869 | 36 | Ref: http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=4869 |
37 | Small physical objects do not interact correctly | ||
38 | Create chain of .5x.5x.1 torui and make all but top physical so to hang. | ||
39 | The chain will fall apart and pairs will dance around on ground | ||
40 | Chains of 1x1x.2 will stay connected but will dance. | ||
41 | Chains above 2x2x.4 are more stable and get stablier as torui get larger. | ||
40 | 42 | ||
41 | VEHICLES TODO LIST: | 43 | VEHICLES TODO LIST: |
42 | ================================================= | 44 | ================================================= |
@@ -45,14 +47,12 @@ LINEAR_MOTOR_DIRECTION values should be clamped to reasonable numbers. | |||
45 | Same for other velocity settings. | 47 | Same for other velocity settings. |
46 | UBit improvements to remove rubber-banding of avatars sitting on vehicle child prims: | 48 | UBit improvements to remove rubber-banding of avatars sitting on vehicle child prims: |
47 | https://github.com/UbitUmarov/Ubit-opensim | 49 | https://github.com/UbitUmarov/Ubit-opensim |
48 | Vehicles (Move smoothly) | ||
49 | Some vehicles should not be able to turn if no speed or off ground. | 50 | Some vehicles should not be able to turn if no speed or off ground. |
50 | Cannot edit/move a vehicle being ridden: it jumps back to the origional position. | 51 | Cannot edit/move a vehicle being ridden: it jumps back to the origional position. |
51 | Neb car jiggling left and right | 52 | Neb car jiggling left and right |
52 | Happens on terrain and any other mesh object. Flat cubes are much smoother. | 53 | Happens on terrain and any other mesh object. Flat cubes are much smoother. |
53 | This has been reduced but not eliminated. | 54 | This has been reduced but not eliminated. |
54 | Implement referenceFrame for all the motion routines. | 55 | Implement referenceFrame for all the motion routines. |
55 | For limitMotorUp, use raycast down to find if vehicle is in the air. | ||
56 | Verify llGetVel() is returning a smooth and good value for vehicle movement. | 56 | Verify llGetVel() is returning a smooth and good value for vehicle movement. |
57 | llGetVel() should return the root's velocity if requested in a child prim. | 57 | llGetVel() should return the root's velocity if requested in a child prim. |
58 | Implement function efficiency for lineaar and angular motion. | 58 | Implement function efficiency for lineaar and angular motion. |
@@ -93,29 +93,15 @@ Revisit CollisionMargin. Builders notice the 0.04 spacing between prims. | |||
93 | Duplicating a physical prim causes old prim to jump away | 93 | Duplicating a physical prim causes old prim to jump away |
94 | Dup a phys prim and the original become unselected and thus interacts w/ selected prim. | 94 | Dup a phys prim and the original become unselected and thus interacts w/ selected prim. |
95 | Scenes with hundred of thousands of static objects take a lot of physics CPU time. | 95 | Scenes with hundred of thousands of static objects take a lot of physics CPU time. |
96 | BSPrim.Force should set a continious force on the prim. The force should be | ||
97 | applied each tick. Some limits? | ||
98 | Gun sending shooter flying. | 96 | Gun sending shooter flying. |
99 | Collision margin (gap between physical objects lying on each other) | 97 | Collision margin (gap between physical objects lying on each other) |
100 | Boundry checking (crashes related to crossing boundry) | 98 | Boundry checking (crashes related to crossing boundry) |
101 | Add check for border edge position for avatars and objects. | 99 | Add check for border edge position for avatars and objects. |
102 | Verify the events are created for border crossings. | 100 | Verify the events are created for border crossings. |
103 | Avatar rotation (check out changes to ScenePresence for physical rotation) | ||
104 | Avatar running (what does phys engine need to do?) | ||
105 | Small physical objects do not interact correctly | ||
106 | Create chain of .5x.5x.1 torui and make all but top physical so to hang. | ||
107 | The chain will fall apart and pairs will dance around on ground | ||
108 | Chains of 1x1x.2 will stay connected but will dance. | ||
109 | Chains above 2x2x.4 are more stable and get stablier as torui get larger. | ||
110 | Add PID motor for avatar movement (slow to stop, ...) | ||
111 | setForce should set a constant force. Different than AddImpulse. | ||
112 | Implement raycast. | ||
113 | Implement ShapeCollection.Dispose() | 101 | Implement ShapeCollection.Dispose() |
114 | Implement water as a plain so raycasting and collisions can happen with same. | 102 | Implement water as a plain or mesh so raycasting and collisions can happen with same. |
115 | Add collision penetration return | 103 | Add collision penetration return |
116 | Add field passed back by BulletSim.dll and fill with info in ManifoldConstact.GetDistance() | 104 | Add field passed back by BulletSim.dll and fill with info in ManifoldConstact.GetDistance() |
117 | Add osGetPhysicsEngineName() so scripters can tell whether BulletSim or ODE | ||
118 | Also osGetPhysicsEngineVerion() maybe. | ||
119 | Linkset.Position and Linkset.Orientation requre rewrite to properly return | 105 | Linkset.Position and Linkset.Orientation requre rewrite to properly return |
120 | child position. LinksetConstraint acts like it's at taint time!! | 106 | child position. LinksetConstraint acts like it's at taint time!! |
121 | Implement LockAngularMotion -- implements llSetStatus(ROTATE_AXIS_*, T/F) | 107 | Implement LockAngularMotion -- implements llSetStatus(ROTATE_AXIS_*, T/F) |
@@ -127,9 +113,6 @@ Selecting and deselecting physical objects causes CPU processing time to jump | |||
127 | Re-implement buoyancy as a separate force on the object rather than diddling gravity. | 113 | Re-implement buoyancy as a separate force on the object rather than diddling gravity. |
128 | Register a pre-step event to add the force. | 114 | Register a pre-step event to add the force. |
129 | More efficient memory usage when passing hull information from BSPrim to BulletSim | 115 | More efficient memory usage when passing hull information from BSPrim to BulletSim |
130 | Avatar movement motor check for zero or small movement. Somehow suppress small movements | ||
131 | when avatar has stopped and is just standing. Simple test for near zero has | ||
132 | the problem of preventing starting up (increase from zero) especially when falling. | ||
133 | Physical and phantom will drop through the terrain | 116 | Physical and phantom will drop through the terrain |
134 | 117 | ||
135 | 118 | ||
@@ -172,7 +155,6 @@ Do we need to do convex hulls all the time? Can complex meshes be left meshes? | |||
172 | There is some problem with meshes and collisions | 155 | There is some problem with meshes and collisions |
173 | Hulls are not as detailed as meshes. Hulled vehicles insides are different shape. | 156 | Hulls are not as detailed as meshes. Hulled vehicles insides are different shape. |
174 | Debounce avatar contact so legs don't keep folding up when standing. | 157 | Debounce avatar contact so legs don't keep folding up when standing. |
175 | Implement LSL physics controls. Like STATUS_ROTATE_X. | ||
176 | Add border extensions to terrain to help region crossings and objects leaving region. | 158 | Add border extensions to terrain to help region crossings and objects leaving region. |
177 | Use a different capsule shape for avatar when sitting | 159 | Use a different capsule shape for avatar when sitting |
178 | LL uses a pyrimidal shape scaled by the avatar's bounding box | 160 | LL uses a pyrimidal shape scaled by the avatar's bounding box |
@@ -205,8 +187,6 @@ Keep avatar scaling correct. http://pennycow.blogspot.fr/2011/07/matter-of-scale | |||
205 | 187 | ||
206 | INTERNAL IMPROVEMENT/CLEANUP | 188 | INTERNAL IMPROVEMENT/CLEANUP |
207 | ================================================= | 189 | ================================================= |
208 | Can the 'inTaintTime' flag be cleaned up and used? For instance, a call to | ||
209 | BSScene.TaintedObject() could immediately execute the callback if already in taint time. | ||
210 | Create the physical wrapper classes (BulletBody, BulletShape) by methods on | 190 | Create the physical wrapper classes (BulletBody, BulletShape) by methods on |
211 | BSAPITemplate and make their actual implementation Bullet engine specific. | 191 | BSAPITemplate and make their actual implementation Bullet engine specific. |
212 | For the short term, just call the existing functions in ShapeCollection. | 192 | For the short term, just call the existing functions in ShapeCollection. |
@@ -365,4 +345,35 @@ After getting off a vehicle, the root prim is phantom (can be walked through) | |||
365 | Explore btGImpactMeshShape as alternative to convex hulls for simplified physical objects. | 345 | Explore btGImpactMeshShape as alternative to convex hulls for simplified physical objects. |
366 | Regular triangle meshes don't do physical collisions. | 346 | Regular triangle meshes don't do physical collisions. |
367 | (DONE: discovered GImpact is VERY CPU intensive) | 347 | (DONE: discovered GImpact is VERY CPU intensive) |
348 | Script changing rotation of child prim while vehicle moving (eg turning wheel) causes | ||
349 | the wheel to appear to jump back. Looks like sending position from previous update. | ||
350 | (DONE: redo of compound linksets fixed problem) | ||
351 | Refarb compound linkset creation to create a pseudo-root for center-of-mass | ||
352 | Let children change their shape to physical indendently and just add shapes to compound | ||
353 | (DONE: redo of compound linkset fixed problem) | ||
354 | Vehicle angular vertical attraction (DONE: vegaslon code) | ||
355 | vehicle angular banking (DONE: vegaslon code) | ||
356 | Vehicle angular deflection (DONE: vegaslon code) | ||
357 | Preferred orientation angular correction fix | ||
358 | Vehicles (Move smoothly) | ||
359 | For limitMotorUp, use raycast down to find if vehicle is in the air. | ||
360 | (WILL NOT BE DONE: gravity does the job well enough) | ||
361 | BSPrim.Force should set a continious force on the prim. The force should be | ||
362 | applied each tick. Some limits? | ||
363 | (DONE: added physical actors. Implemented SetForce, SetTorque, ...) | ||
364 | Implement LSL physics controls. Like STATUS_ROTATE_X. (DONE) | ||
365 | Add osGetPhysicsEngineName() so scripters can tell whether BulletSim or ODE | ||
366 | Avatar rotation (check out changes to ScenePresence for physical rotation) (DONE) | ||
367 | Avatar running (what does phys engine need to do?) (DONE: multiplies run factor by walking force) | ||
368 | setForce should set a constant force. Different than AddImpulse. (DONE) | ||
369 | Add PID motor for avatar movement (slow to stop, ...) (WNBD: current works ok) | ||
370 | Avatar movement motor check for zero or small movement. Somehow suppress small movements | ||
371 | when avatar has stopped and is just standing. Simple test for near zero has | ||
372 | the problem of preventing starting up (increase from zero) especially when falling. | ||
373 | (DONE: avatar movement actor knows if standing on stationary object and zeros motion) | ||
374 | Can the 'inTaintTime' flag be cleaned up and used? For instance, a call to | ||
375 | BSScene.TaintedObject() could immediately execute the callback if already in taint time. | ||
376 | (DONE) | ||
377 | |||
378 | |||
368 | 379 | ||