aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/physics
diff options
context:
space:
mode:
authorMW2007-03-10 20:30:25 +0000
committerMW2007-03-10 20:30:25 +0000
commit76569ff4fba09f22ed4a06b8073deaed7f64a2e3 (patch)
treef83430652d8874f299733f505b6b7ded13910bb8 /src/physics
parentAnother attempt to fix the project files (diff)
downloadopensim-SC-76569ff4fba09f22ed4a06b8073deaed7f64a2e3.zip
opensim-SC-76569ff4fba09f22ed4a06b8073deaed7f64a2e3.tar.gz
opensim-SC-76569ff4fba09f22ed4a06b8073deaed7f64a2e3.tar.bz2
opensim-SC-76569ff4fba09f22ed4a06b8073deaed7f64a2e3.tar.xz
A PhysX physics plugin (that actually uses physX now but currently only works on windows)
Can now change direction when walking without stopping Flying works when using the Physx dll
Diffstat (limited to 'src/physics')
-rw-r--r--src/physics/PhysicsManager.cs7
-rw-r--r--src/physics/RealPhysX/RealPhysXplugin/AssemblyInfo.cs31
-rw-r--r--src/physics/RealPhysX/RealPhysXplugin/RealPhysX.cs361
-rw-r--r--src/physics/RealPhysX/RealPhysXplugin/RealPhysXplugin.csproj45
-rw-r--r--src/physics/RealPhysX/RealPhysXplugin/RealPhysXplugin.sln7
-rw-r--r--src/physics/plugins/PhysXplugin.cs38
6 files changed, 484 insertions, 5 deletions
diff --git a/src/physics/PhysicsManager.cs b/src/physics/PhysicsManager.cs
index 0986501..e5d5bd6 100644
--- a/src/physics/PhysicsManager.cs
+++ b/src/physics/PhysicsManager.cs
@@ -110,6 +110,8 @@ namespace PhysicsSystem
110 { 110 {
111 public abstract PhysicsActor AddAvatar(PhysicsVector position); 111 public abstract PhysicsActor AddAvatar(PhysicsVector position);
112 112
113 public abstract PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size);
114
113 public abstract void Simulate(float timeStep); 115 public abstract void Simulate(float timeStep);
114 116
115 public abstract void GetResults(); 117 public abstract void GetResults();
@@ -140,6 +142,11 @@ namespace PhysicsSystem
140 { 142 {
141 get; 143 get;
142 } 144 }
145 public abstract bool Flying
146 {
147 get;
148 set;
149 }
143 150
144 public abstract void AddForce(PhysicsVector force); 151 public abstract void AddForce(PhysicsVector force);
145 152
diff --git a/src/physics/RealPhysX/RealPhysXplugin/AssemblyInfo.cs b/src/physics/RealPhysX/RealPhysXplugin/AssemblyInfo.cs
new file mode 100644
index 0000000..913aae7
--- /dev/null
+++ b/src/physics/RealPhysX/RealPhysXplugin/AssemblyInfo.cs
@@ -0,0 +1,31 @@
1using System.Reflection;
2using System.Runtime.CompilerServices;
3using System.Runtime.InteropServices;
4
5// Information about this assembly is defined by the following
6// attributes.
7//
8// change them to the information which is associated with the assembly
9// you compile.
10
11[assembly: AssemblyTitle("RealPhysXplugin")]
12[assembly: AssemblyDescription("")]
13[assembly: AssemblyConfiguration("")]
14[assembly: AssemblyCompany("")]
15[assembly: AssemblyProduct("RealPhysXplugin")]
16[assembly: AssemblyCopyright("")]
17[assembly: AssemblyTrademark("")]
18[assembly: AssemblyCulture("")]
19
20// This sets the default COM visibility of types in the assembly to invisible.
21// If you need to expose a type to COM, use [ComVisible(true)] on that type.
22[assembly: ComVisible(false)]
23
24// The assembly version has following format :
25//
26// Major.Minor.Build.Revision
27//
28// You can specify all values by your own or you can build default build and revision
29// numbers with the '*' character (the default):
30
31[assembly: AssemblyVersion("1.0.*")]
diff --git a/src/physics/RealPhysX/RealPhysXplugin/RealPhysX.cs b/src/physics/RealPhysX/RealPhysXplugin/RealPhysX.cs
new file mode 100644
index 0000000..9576a40
--- /dev/null
+++ b/src/physics/RealPhysX/RealPhysXplugin/RealPhysX.cs
@@ -0,0 +1,361 @@
1/*
2* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
3*
4* Redistribution and use in source and binary forms, with or without
5* modification, are permitted provided that the following conditions are met:
6* * Redistributions of source code must retain the above copyright
7* notice, this list of conditions and the following disclaimer.
8* * Redistributions in binary form must reproduce the above copyright
9* notice, this list of conditions and the following disclaimer in the
10* documentation and/or other materials provided with the distribution.
11* * Neither the name of the <organization> nor the
12* names of its contributors may be used to endorse or promote products
13* derived from this software without specific prior written permission.
14*
15* THIS SOFTWARE IS PROVIDED BY <copyright holder> ``AS IS'' AND ANY
16* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18* DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
19* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25*
26*/
27/*
28* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
29*
30* Redistribution and use in source and binary forms, with or without
31* modification, are permitted provided that the following conditions are met:
32* * Redistributions of source code must retain the above copyright
33* notice, this list of conditions and the following disclaimer.
34* * Redistributions in binary form must reproduce the above copyright
35* notice, this list of conditions and the following disclaimer in the
36* documentation and/or other materials provided with the distribution.
37* * Neither the name of the <organization> nor the
38* names of its contributors may be used to endorse or promote products
39* derived from this software without specific prior written permission.
40*
41* THIS SOFTWARE IS PROVIDED BY <copyright holder> ``AS IS'' AND ANY
42* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
43* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
44* DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
45* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
46* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
48* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
49* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
50* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
51*
52*/
53using System;
54using System.Collections.Generic;
55using PhysicsSystem;
56using PhysXWrapper;
57
58namespace PhysXplugin
59{
60 /// <summary>
61 /// Will be the PhysX plugin but for now will be a very basic physics engine
62 /// </summary>
63 public class PhysXPlugin : IPhysicsPlugin
64 {
65 private PhysXScene _mScene;
66
67 public PhysXPlugin()
68 {
69
70 }
71
72 public bool Init()
73 {
74 return true;
75 }
76
77 public PhysicsScene GetScene()
78 {
79 if(_mScene == null)
80 {
81 _mScene = new PhysXScene();
82 }
83 return(_mScene);
84 }
85
86 public string GetName()
87 {
88 return("RealPhysX");
89 }
90
91 public void Dispose()
92 {
93
94 }
95 }
96
97 public class PhysXScene :PhysicsScene
98 {
99 private List<PhysXCharacter> _characters = new List<PhysXCharacter>();
100 private List<PhysXPrim> _prims = new List<PhysXPrim>();
101 private float[] _heightMap;
102 private NxPhysicsSDK mySdk;
103 private NxScene scene;
104
105 public PhysXScene()
106 {
107 mySdk = NxPhysicsSDK.CreateSDK();
108 scene = mySdk.CreateScene();
109
110 }
111
112 public override PhysicsActor AddAvatar(PhysicsVector position)
113 {
114 Vec3 pos = new Vec3();
115 pos.X = position.X;
116 pos.Y = position.Y;
117 pos.Z = position.Z;
118 PhysXCharacter act = new PhysXCharacter( scene.AddCharacter(pos));
119 act.Position = position;
120 _characters.Add(act);
121 return act;
122 }
123
124 public override PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size)
125 {
126 Vec3 pos = new Vec3();
127 pos.X = position.X;
128 pos.Y = position.Y;
129 pos.Z = position.Z;
130 Vec3 siz = new Vec3();
131 siz.X = size.X;
132 siz.Y = size.Y;
133 siz.Z = size.Z;
134 PhysXPrim act = new PhysXPrim( scene.AddNewBox(pos, siz));
135 _prims.Add(act);
136 return act;
137 }
138 public override void Simulate(float timeStep)
139 {
140 foreach (PhysXCharacter actor in _characters)
141 {
142 actor.Move(timeStep);
143 }
144 scene.Simulate(timeStep);
145 scene.FetchResults();
146 scene.UpdateControllers();
147
148 foreach (PhysXCharacter actor in _characters)
149 {
150 actor.UpdatePosition();
151 }
152
153 }
154
155 public override void GetResults()
156 {
157
158 }
159
160 public override bool IsThreaded
161 {
162 get
163 {
164 return(false); // for now we won't be multithreaded
165 }
166 }
167
168 public override void SetTerrain(float[] heightMap)
169 {
170 this._heightMap = heightMap;
171 this.scene.AddTerrain(heightMap);
172 }
173 }
174
175 public class PhysXCharacter : PhysicsActor
176 {
177 private PhysicsVector _position;
178 private PhysicsVector _velocity;
179 private PhysicsVector _acceleration;
180 private NxCharacter _character;
181 private bool flying;
182
183 public PhysXCharacter(NxCharacter character)
184 {
185 _velocity = new PhysicsVector();
186 _position = new PhysicsVector();
187 _acceleration = new PhysicsVector();
188 _character = character;
189 }
190
191 public override bool Flying
192 {
193 get
194 {
195 return flying;
196 }
197 set
198 {
199 flying = value;
200 }
201 }
202
203 public override PhysicsVector Position
204 {
205 get
206 {
207 return _position;
208 }
209 set
210 {
211 _position = value;
212 }
213 }
214
215 public override PhysicsVector Velocity
216 {
217 get
218 {
219 return _velocity;
220 }
221 set
222 {
223 _velocity = value;
224 }
225 }
226
227 public override PhysicsVector Acceleration
228 {
229 get
230 {
231 return _acceleration;
232 }
233
234 }
235 public void SetAcceleration (PhysicsVector accel)
236 {
237 this._acceleration = accel;
238 }
239
240 public override void AddForce(PhysicsVector force)
241 {
242
243 }
244
245 public override void SetMomentum(PhysicsVector momentum)
246 {
247
248 }
249
250 public void Move(float timeStep)
251 {
252 Vec3 vec = new Vec3();
253 vec.X = this._velocity.X * timeStep;
254 vec.Y = this._velocity.Y * timeStep;
255 if(flying)
256 {
257 vec.Z = ( this._velocity.Z) * timeStep;
258 }
259 else
260 {
261 vec.Z = (-9.8f + this._velocity.Z) * timeStep;
262 }
263 this._character.Move(vec);
264 }
265
266 public void UpdatePosition()
267 {
268 Vec3 vec = this._character.Position;
269 this._position.X = vec.X;
270 this._position.Y = vec.Y;
271 this._position.Z = vec.Z;
272 }
273 }
274
275 public class PhysXPrim : PhysicsActor
276 {
277 private PhysicsVector _position;
278 private PhysicsVector _velocity;
279 private PhysicsVector _acceleration;
280 private NxActor _prim;
281
282 public PhysXPrim(NxActor prim)
283 {
284 _velocity = new PhysicsVector();
285 _position = new PhysicsVector();
286 _acceleration = new PhysicsVector();
287 _prim = prim;
288 }
289 public override bool Flying
290 {
291 get
292 {
293 return false; //no flying prims for you
294 }
295 set
296 {
297
298 }
299 }
300 public override PhysicsVector Position
301 {
302 get
303 {
304 PhysicsVector pos = new PhysicsVector();
305 Vec3 vec = this._prim.Position;
306 pos.X = vec.X;
307 pos.Y = vec.Y;
308 pos.Z = vec.Z;
309 return pos;
310
311 }
312 set
313 {
314 PhysicsVector vec = value;
315 Vec3 pos = new Vec3();
316 pos.X = vec.X;
317 pos.Y = vec.Y;
318 pos.Z = vec.Z;
319 this._prim.Position = pos;
320 }
321 }
322
323 public override PhysicsVector Velocity
324 {
325 get
326 {
327 return _velocity;
328 }
329 set
330 {
331 _velocity = value;
332 }
333 }
334
335 public override PhysicsVector Acceleration
336 {
337 get
338 {
339 return _acceleration;
340 }
341
342 }
343 public void SetAcceleration (PhysicsVector accel)
344 {
345 this._acceleration = accel;
346 }
347
348 public override void AddForce(PhysicsVector force)
349 {
350
351 }
352
353 public override void SetMomentum(PhysicsVector momentum)
354 {
355
356 }
357
358
359 }
360
361}
diff --git a/src/physics/RealPhysX/RealPhysXplugin/RealPhysXplugin.csproj b/src/physics/RealPhysX/RealPhysXplugin/RealPhysXplugin.csproj
new file mode 100644
index 0000000..ae7bb79
--- /dev/null
+++ b/src/physics/RealPhysX/RealPhysXplugin/RealPhysXplugin.csproj
@@ -0,0 +1,45 @@
1<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
2 <PropertyGroup>
3 <OutputType>Library</OutputType>
4 <RootNamespace>RealPhysXplugin</RootNamespace>
5 <AssemblyName>RealPhysXplugin</AssemblyName>
6 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
7 <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
8 <ProjectGuid>{56C1D214-F389-4228-921A-0A3A0712C159}</ProjectGuid>
9 </PropertyGroup>
10 <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
11 <OutputPath>bin\Debug\</OutputPath>
12 <Optimize>False</Optimize>
13 <DefineConstants>DEBUG;TRACE</DefineConstants>
14 <DebugSymbols>True</DebugSymbols>
15 <DebugType>Full</DebugType>
16 <CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
17 </PropertyGroup>
18 <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
19 <OutputPath>bin\Release\</OutputPath>
20 <Optimize>True</Optimize>
21 <DefineConstants>TRACE</DefineConstants>
22 <DebugSymbols>False</DebugSymbols>
23 <DebugType>None</DebugType>
24 <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
25 </PropertyGroup>
26 <ItemGroup>
27 <Reference Include="System" />
28 <Reference Include="System.Xml" />
29 <Reference Include="PhysX_Wrapper_Dotnet">
30 <HintPath>..\..\..\..\bin\PhysX_Wrapper_Dotnet.dll</HintPath>
31 <SpecificVersion>False</SpecificVersion>
32 </Reference>
33 </ItemGroup>
34 <ItemGroup>
35 <Compile Include="RealPhysX.cs" />
36 <Compile Include="AssemblyInfo.cs" />
37 </ItemGroup>
38 <ItemGroup>
39 <ProjectReference Include="..\..\PhysicsManager.csproj">
40 <Project>{3C86A846-7977-4EE7-A8DC-DD487FA5DC2B}</Project>
41 <Name>PhysicsManager</Name>
42 </ProjectReference>
43 </ItemGroup>
44 <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
45</Project> \ No newline at end of file
diff --git a/src/physics/RealPhysX/RealPhysXplugin/RealPhysXplugin.sln b/src/physics/RealPhysX/RealPhysXplugin/RealPhysXplugin.sln
new file mode 100644
index 0000000..34f87e6
--- /dev/null
+++ b/src/physics/RealPhysX/RealPhysXplugin/RealPhysXplugin.sln
@@ -0,0 +1,7 @@
1
2Microsoft Visual Studio Solution File, Format Version 9.00
3# SharpDevelop 2.1.0.2017
4Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RealPhysXplugin", "RealPhysXplugin.csproj", "{56C1D214-F389-4228-921A-0A3A0712C159}"
5EndProject
6Global
7EndGlobal
diff --git a/src/physics/plugins/PhysXplugin.cs b/src/physics/plugins/PhysXplugin.cs
index 58a82fb..8c09dc8 100644
--- a/src/physics/plugins/PhysXplugin.cs
+++ b/src/physics/plugins/PhysXplugin.cs
@@ -85,14 +85,30 @@ namespace PhysXplugin
85 return act; 85 return act;
86 } 86 }
87 87
88 public override PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size)
89 {
90 return null;
91 }
92
88 public override void Simulate(float timeStep) 93 public override void Simulate(float timeStep)
89 { 94 {
90 foreach (PhysXActor actor in _actors) 95 foreach (PhysXActor actor in _actors)
91 { 96 {
92 actor.Position.X = actor.Position.X + actor.Velocity.X * timeStep; 97 actor.Position.X = actor.Position.X + (actor.Velocity.X * timeStep);
93 actor.Position.Y = actor.Position.Y + actor.Velocity.Y * timeStep; 98 actor.Position.Y = actor.Position.Y + (actor.Velocity.Y * timeStep);
94 actor.Position.Z = actor.Position.Z + actor.Velocity.Z * timeStep; 99 actor.Position.Z = actor.Position.Z + (actor.Velocity.Z * timeStep);
95 actor.Position.Z = _heightMap[(int)actor.Position.Y * 256 + (int)actor.Position.X]+1; 100 /*if(actor.Flying)
101 {
102 actor.Position.Z = actor.Position.Z + (actor.Velocity.Z * timeStep);
103 }
104 else
105 {
106 actor.Position.Z = actor.Position.Z + ((-9.8f + actor.Velocity.Z) * timeStep);
107 }
108 if(actor.Position.Z < (_heightMap[(int)actor.Position.Y * 256 + (int)actor.Position.X]+1))
109 {*/
110 actor.Position.Z = _heightMap[(int)actor.Position.Y * 256 + (int)actor.Position.X]+1;
111 //}
96 if(actor.Position.X<0) 112 if(actor.Position.X<0)
97 { 113 {
98 actor.Position.X = 0; 114 actor.Position.X = 0;
@@ -140,7 +156,7 @@ namespace PhysXplugin
140 private PhysicsVector _position; 156 private PhysicsVector _position;
141 private PhysicsVector _velocity; 157 private PhysicsVector _velocity;
142 private PhysicsVector _acceleration; 158 private PhysicsVector _acceleration;
143 159 private bool flying;
144 public PhysXActor() 160 public PhysXActor()
145 { 161 {
146 _velocity = new PhysicsVector(); 162 _velocity = new PhysicsVector();
@@ -148,6 +164,18 @@ namespace PhysXplugin
148 _acceleration = new PhysicsVector(); 164 _acceleration = new PhysicsVector();
149 } 165 }
150 166
167 public override bool Flying
168 {
169 get
170 {
171 return false;
172 }
173 set
174 {
175 flying= value;
176 }
177 }
178
151 public override PhysicsVector Position 179 public override PhysicsVector Position
152 { 180 {
153 get 181 get