本文整理汇总了C#中JigLibX.Collision.CollisionSkin.ApplyLocalTransform方法的典型用法代码示例。如果您正苦于以下问题:C# CollisionSkin.ApplyLocalTransform方法的具体用法?C# CollisionSkin.ApplyLocalTransform怎么用?C# CollisionSkin.ApplyLocalTransform使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类JigLibX.Collision.CollisionSkin
的用法示例。
在下文中一共展示了CollisionSkin.ApplyLocalTransform方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Initialise
public override void Initialise()
{
base.Initialise();
// Create new bodey and collision skin
m_Body = new Body();
m_Skin = new CollisionSkin(m_Body);
if (m_Body != null)
{
// Set skin to the body
m_Body.CollisionSkin = m_Skin;
// Check the skin was successfully created and add this
// custom dice as a primitive to the collision skin
if (m_Skin != null)
{
Box box = new Box(Vector3.Zero, Matrix.Identity, transform.Scale);
m_Skin.AddPrimitive(box, (int)MaterialTable.MaterialID.BouncyNormal);
// Set mass
m_Mass = SetMass(1.0f);
// Move the body to correct position initially
m_Body.MoveTo(transform.Position, Matrix.Identity);
// Apply transform to skin
m_Skin.ApplyLocalTransform(new JigLibX.Math.Transform(-m_Mass, Matrix.Identity));
// Enable body
EnableBody();
}
}
}
示例2: BowlingPin
public BowlingPin(Game game, Model model, Matrix orientation, Vector3 position)
: base(game, model)
{
body = new Body();
collision = new CollisionSkin(body);
// add a capsule for the main corpus
Primitive capsule = new Capsule(Vector3.Zero, Matrix.Identity, 0.1f, 1.3f);
// add a small box at the buttom
Primitive box = new Box(new Vector3(-0.1f,-0.1f,-0.1f), Matrix.Identity, Vector3.One * 0.2f);
// add a sphere in the middle
Primitive sphere = new Sphere(new Vector3(0.0f, 0.0f, 0.3f), 0.3f);
collision.AddPrimitive(capsule, new MaterialProperties(0.1f, 0.5f, 0.5f));
collision.AddPrimitive(box, new MaterialProperties(0.1f, 0.5f, 0.5f));
collision.AddPrimitive(sphere, new MaterialProperties(0.1f, 0.5f, 0.5f));
body.CollisionSkin = this.collision;
Vector3 com = SetMass(0.5f);
body.MoveTo(position, orientation);
collision.ApplyLocalTransform(new Transform(-com, Matrix.Identity));
body.EnableBody();
this.scale = Vector3.One * 10.0f;
}
示例3: Missile
public Missile(ParentGame game, Model modelObj, Texture2D[] modelTextures, DrawingClass drawClass, GameplayScreen Screen)
: base(game, modelObj, modelTextures)
{
this.drawClass = drawClass;
this.Screen = Screen;
_body = new Body();
_skin = new CollisionSkin(_body);
_body.CollisionSkin = _skin;
Box box = new Box(Vector3.Zero, Matrix.Identity, new Vector3(1f,1f,4f));
_skin.AddPrimitive(box, new MaterialProperties(0.8f, 0.8f, 0.7f));
Vector3 com = SetMass(2.0f);
_body.MoveTo(position, Matrix.Identity);
_skin.ApplyLocalTransform(new Transform(-com, Matrix.Identity));
_body.EnableBody();
Body.ExternalData = this;
Vector3 pos = position;
Vector3 forwardVec = Body.Orientation.Forward;
forwardVec.Normalize();
pos -= forwardVec * 10;
// Use the particle emitter helper to output our trail particles.
trailEmitter = new ParticleEmitter(drawClass.projectileTrailParticles,
trailParticlesPerSecond, position);
rgob = new RagdollObject(parentGame, null, null, null, RagdollObject.RagdollType.Simple, 1.0f, 3);
rgob.Position = position;
//rgob.PutToSleep();
//rgob.limbs[0].PhysicsBody.AngularVelocity = (new Vector3(1, 1, 0) * 2000);
RagdollTransforms = new List<Matrix>();
RagdollTransforms = rgob.GetWorldMatrix();
foreach (JigLibX.Objects.PhysicObject lim in rgob.limbs)
DisableCollisions(lim.PhysicsBody, Body);
foreach (JigLibX.Objects.PhysicObject lim in rgob.limbs)
foreach (BuildingPiece pic in Screen.PieceList)
DisableCollisions(lim.PhysicsBody, pic.Body);
foreach (JigLibX.Objects.PhysicObject lim in rgob.limbs)
foreach (Building bld in Screen.Buildings)
DisableCollisions(lim.PhysicsBody, bld.Body);
foreach (JigLibX.Objects.PhysicObject lim in rgob.limbs)
DisableCollisions(lim.PhysicsBody, Screen.terrainActor.Body);
foreach (JigLibX.Objects.PhysicObject limb0 in rgob.limbs)
foreach (Missile mis in Screen.BulletList)
foreach (JigLibX.Objects.PhysicObject limb1 in mis.rgob.limbs)
DisableCollisions(limb1.PhysicsBody, limb0.PhysicsBody);
}
示例4: BoxObject
public BoxObject(Game game,Model model,Vector3 sideLengths, Matrix orientation, Vector3 position)
: base(game,model)
{
body = new Body();
collision = new CollisionSkin(body);
collision.AddPrimitive(new Box(- 0.5f * sideLengths, orientation, sideLengths), new MaterialProperties(0.8f, 0.8f, 0.7f));
body.CollisionSkin = this.collision;
Vector3 com = SetMass(1.0f);
body.MoveTo(position, Matrix.Identity);
collision.ApplyLocalTransform(new Transform(-com, Matrix.Identity));
body.EnableBody();
this.scale = sideLengths;
}
示例5: CapsuleObject
public CapsuleObject(Game game, Model model,float radius,float length, Matrix orientation, Vector3 position)
: base(game, model)
{
body = new Body();
collision = new CollisionSkin(body);
collision.AddPrimitive(new Capsule(Vector3.Transform(new Vector3(-0.5f,0,0), orientation),orientation,radius,length),(int)MaterialTable.MaterialID.BouncyNormal);
body.CollisionSkin = this.collision;
Vector3 com = SetMass(10.0f);
body.MoveTo(position + com, Matrix.Identity);
collision.ApplyLocalTransform(new Transform(-com,Matrix.Identity));
body.EnableBody();
this.scale = new Vector3(radius, radius, length / 2);
}
示例6: CylinderObject
public CylinderObject(Game game, float radius, float length, Vector3 position, Model model)
: base(game, model)
{
body = new Body();
collision = new CollisionSkin(body);
if (length - 2.0f * radius < 0.0f)
throw new ArgumentException("Radius must be at least half length");
Capsule middle = new Capsule(Vector3.Zero, Matrix.Identity, radius, length - 2.0f * radius);
float sideLength = 2.0f * radius / (float) Math.Sqrt(2.0d);
Vector3 sides = new Vector3(-0.5f * sideLength, -0.5f * sideLength, -radius);
Box supply0 = new Box(sides, Matrix.Identity,
new Vector3(sideLength, sideLength, length));
Box supply1 = new Box(Vector3.Transform(sides,Matrix.CreateRotationZ(MathHelper.PiOver4)),
Matrix.CreateRotationZ(MathHelper.PiOver4), new Vector3(sideLength, sideLength, length));
collision.AddPrimitive(middle, new MaterialProperties(0.8f, 0.8f, 0.7f));
collision.AddPrimitive(supply0, new MaterialProperties(0.8f, 0.8f, 0.7f));
collision.AddPrimitive(supply1, new MaterialProperties(0.8f, 0.8f, 0.7f));
body.CollisionSkin = this.collision;
Vector3 com = SetMass(1.0f);
collision.ApplyLocalTransform(new Transform(-com, Matrix.Identity));
#region Manually set body inertia
float cylinderMass = body.Mass;
float comOffs = (length - 2.0f * radius) * 0.5f; ;
float Ixx = 0.5f * cylinderMass * radius * radius + cylinderMass * comOffs * comOffs;
float Iyy = 0.25f * cylinderMass * radius * radius + (1.0f / 12.0f) * cylinderMass * length * length + cylinderMass * comOffs * comOffs;
float Izz = Iyy;
body.SetBodyInertia(Ixx, Iyy, Izz);
#endregion
body.MoveTo(position, Matrix.CreateRotationX(MathHelper.PiOver2));
body.EnableBody();
this.scale = new Vector3(radius, radius, length * 0.5f);
}
示例7: Cuboid
public Cuboid(Vector dimension)
{
Dimension = dimension;
PhysicsBody = new Body();
collisionSkin = new CollisionSkin(PhysicsBody);
PhysicsBody.CollisionSkin = collisionSkin;
var box = new Box(Vector3.Zero, Microsoft.Xna.Framework.Matrix.Identity, Dimension.ToXna());
collisionSkin.AddPrimitive(box, new MaterialProperties(0.1f, 0.4f, 0.9f));
var com = ApplyMass(1.0f);
// PhysicsBody.MoveTo(Utils.VectorBalderToXna(this.Position), Microsoft.Xna.Framework.Matrix.Identity);
collisionSkin.ApplyLocalTransform(new JigLibX.Math.Transform(-com, Microsoft.Xna.Framework.Matrix.Identity));
PhysicsBody.EnableBody();
}
示例8: BuildingPiece
public BuildingPiece(ParentGame game, Model modelObj, Texture2D[] modelTextures,
DrawingClass drawClass, GameplayScreen Screen, float Length, float Width, float Height)
: base(game, modelObj, modelTextures)
{
// Use the particle emitter helper to output our trail particles.
trailEmitter = new ParticleEmitter(drawClass.smokePlumeParticles,
3, position);
fireEmitter = new ParticleEmitter(drawClass.fireParticles,
30, position);
this.Screen = Screen;
this.drawClass = drawClass;
_body = new Body();
_skin = new CollisionSkin(_body);
_body.CollisionSkin = _skin;
//Box box = new Box(Vector3.Zero, Matrix.Identity, new Vector3(10f, 7f, 7f));
Box box = new Box(Vector3.Zero, Matrix.Identity, new Vector3(Length, Width, Height));
if (Length > Width && Length > Height)
boundSphere.Radius = Length;
else if (Width > Length && Width > Height)
boundSphere.Radius = Width;
else
boundSphere.Radius = Height;
_skin.AddPrimitive(box, new MaterialProperties(0.8f, 0.8f, 0.7f));
Vector3 com = SetMass(3.0f);
_body.MoveTo(position, Matrix.Identity);
_skin.ApplyLocalTransform(new Transform(-com, Matrix.Identity));
_body.EnableBody();
Body.ExternalData = this;
SetBody(rotation);
Body.AllowFreezing = true;
Body.SetDeactivationTime(1);
foreach (BuildingPiece pic in Screen.PieceList)
DisableCollisions(this.Body, pic.Body);
foreach (Building bld in Screen.Buildings)
DisableCollisions(this.Body, bld.Body);
}
示例9: BoxActor
public BoxActor(Game game, Vector3 position, Vector3 scale)
: base(game)
{
this.position = position;
this.scale = scale;
_body = new Body();
_skin = new CollisionSkin(_body);
_body.CollisionSkin = _skin;
Box box = new Box(Vector3.Zero, Matrix.Identity, scale);
_skin.AddPrimitive(box, new MaterialProperties(0.8f, 0.8f, 0.7f));
Vector3 com = SetMass(1.0f);
_body.MoveTo(position, Matrix.Identity);
_skin.ApplyLocalTransform(new JigLibX.Math.Transform(-com, Matrix.Identity));
_body.EnableBody();
}
示例10: LoadSpecific
protected override void LoadSpecific()
{
base.LoadSpecific();
// Create new bodey and collision skin
m_Body = new Body();
m_Skin = new CollisionSkin(m_Body);
if (m_Body != null)
{
// Set skin to the body
m_Body.CollisionSkin = m_Skin;
// Check the skin was successfully created and add this
// custom dice as a primitive to the collision skin
if (m_Skin != null)
{
Vector3 sideLengths = (m_BoundingBox.Max - m_BoundingBox.Min);
if (sideLengths.Y <= 0)
sideLengths.Y = 1;
Box box = new Box(Vector3.Zero, Matrix.Identity, sideLengths);
m_Skin.AddPrimitive(box, (int)MaterialTable.MaterialID.BouncyNormal);
// Set mass
m_Mass = SetMass(1.0f);
// Move the body to correct position initially
m_Body.MoveTo((transform.Position + new Vector3(0, (sideLengths.Y * 0.5f), 0)), Matrix.Identity);
// Apply transform to skin
m_Skin.ApplyLocalTransform(new JigLibX.Math.Transform(-m_Mass, Matrix.Identity));
// Enable it
Enable();
// Set to immovable
m_Body.Immovable = true;
}
}
}
示例11: TriangleMeshObject
public TriangleMeshObject(Game game, Model model, Matrix orientation, Vector3 position)
: base(game, model)
{
body = new Body();
collision = new CollisionSkin(null);
triangleMesh = new TriangleMesh();
List<Vector3> vertexList = new List<Vector3>();
List<TriangleVertexIndices> indexList = new List<TriangleVertexIndices>();
ExtractData(vertexList, indexList, model);
triangleMesh.CreateMesh(vertexList,indexList, 4, 1.0f);
collision.AddPrimitive(triangleMesh,new MaterialProperties(0.8f,0.7f,0.6f));
PhysicsSystem.CurrentPhysicsSystem.CollisionSystem.AddCollisionSkin(collision);
// Transform
collision.ApplyLocalTransform(new JigLibX.Math.Transform(position, orientation));
// we also need to move this dummy, so the object is *rendered* at the correct positiob
body.MoveTo(position, orientation);
}
示例12: OnAdd
public override void OnAdd(Scene scene)
{
base.OnAdd(scene);
scene.AddActor(this);
PhysicsSystem world = scene.GetPhysicsEngine();
Vector3 pos = Vector3.Up * 256 + 15*(new Vector3((float)RandomHelper.RandomGen.NextDouble(), (float)RandomHelper.RandomGen.NextDouble(), (float)RandomHelper.RandomGen.NextDouble())*2-Vector3.One);
//pos.X += (scene.MainTerrain as TerrainHeightmap).GetWidth()*0.5f;
//pos.Z += (scene.MainTerrain as TerrainHeightmap).GetDepth() * 0.5f;
Vector3 normal = Vector3.Up;
//scene.MainTerrain.GenerateRandomTransform(RandomHelper.RandomGen, out pos, out normal);
//pos = pos + Vector3.Up * 5;
body = new CharacterBody();
collision = new CollisionSkin(body);
standCapsule = new Capsule(Vector3.Zero, Matrix.CreateRotationX(MathHelper.PiOver2), 1.0f, 1.778f);
crouchCapsule = new Capsule(Vector3.Zero, Matrix.CreateRotationX(MathHelper.PiOver2), 1.0f, 1.0f);
SetupPosture(false);
collision.AddPrimitive(standCapsule, (int)MaterialTable.MaterialID.NormalRough);
body.CollisionSkin = collision;
Vector3 com = PhysicsHelper.SetMass(75.0f, body, collision);
body.MoveTo(pos + com, Matrix.Identity);
collision.ApplyLocalTransform(new JigLibX.Math.Transform(-com, Matrix.Identity));
body.SetBodyInvInertia(0.0f, 0.0f, 0.0f);
body.AllowFreezing = false;
body.EnableBody();
Transformation = new Transform(body);
ResetState();
}
示例13: Initialize
public override void Initialize()
{
Body = new Body();
Skin = new CollisionSkin(Body);
Body.CollisionSkin = Skin;
radius = 12;
float length = 3;
//Capsule middle = new Capsule(Vector3.Zero, Matrix.Identity, radius, length - 2.0f * radius);
float sideLength = 2.0f * radius / (float)Math.Sqrt(2.0d);
Vector3 sides = new Vector3(-0.5f * sideLength, -0.5f * sideLength, -radius);
Box supply0 = new Box(sides, Matrix.Identity,
new Vector3(sideLength, sideLength, length));
Box supply1 = new Box(Vector3.Transform(sides, Matrix.CreateRotationZ(MathHelper.PiOver4)),
Matrix.CreateRotationZ(MathHelper.PiOver4), new Vector3(sideLength, sideLength, length));
Box supply2 = new Box(Vector3.Transform(sides, Matrix.CreateRotationZ( (MathHelper.PiOver4 * 0.5f) )),
Matrix.CreateRotationZ( (MathHelper.PiOver4 * 0.5f) ), new Vector3(sideLength, sideLength, length));
Box supply3 = new Box(Vector3.Transform(sides, Matrix.CreateRotationZ((MathHelper.PiOver4 * 1.5f))),
Matrix.CreateRotationZ((MathHelper.PiOver4 * 1.5f)), new Vector3(sideLength, sideLength, length));
//Skin.AddPrimitive(middle, new MaterialProperties(0.8f, 0.8f, 0.7f));
Skin.AddPrimitive(supply0, new MaterialProperties(0.8f, 0.8f, 0.7f));
Skin.AddPrimitive(supply1, new MaterialProperties(0.8f, 0.8f, 0.7f));
Skin.AddPrimitive(supply2, new MaterialProperties(0.8f, 0.8f, 0.7f));
Skin.AddPrimitive(supply3, new MaterialProperties(0.8f, 0.8f, 0.7f));
Vector3 com = SetMass(1.0f);
Body.MoveTo(position, Matrix.Identity);
Skin.ApplyLocalTransform(new Transform(-com, Matrix.Identity));
#region Manually set body inertia
float cylinderMass = Body.Mass;
float comOffs = (length - 2.0f * radius) * 0.5f; ;
float Ixx = 0.5f * cylinderMass * radius * radius + cylinderMass * comOffs * comOffs;
float Iyy = 0.25f * cylinderMass * radius * radius + (1.0f / 12.0f) * cylinderMass * length * length + cylinderMass * comOffs * comOffs;
float Izz = Iyy;
Body.SetBodyInertia(Ixx, Iyy, Izz);
#endregion
Body.EnableBody();
Body.ExternalData = this;
SetBody(rotation);
}
示例14: PlayerPhysicsObject
public PlayerPhysicsObject(Vector3 size, Matrix orientation, Vector3 pos)
{
body = new Body();
collision = new CollisionSkin(body);
collision.AddPrimitive(new Sphere(pos, size.Y), (int)MaterialTable.MaterialID.NotBouncyNormal);
body.CollisionSkin = this.collision;
Vector3 com = SetMass(1.0f);
body.MoveTo(pos, Matrix.Identity);
collision.ApplyLocalTransform(new Transform(-com, Matrix.Identity));
body.EnableBody();
//body.SetBodyInvInertia(0.0f, 0.0f, 0.0f);
body.AllowFreezing = false;
}
示例15: setBody
public void setBody(Vector3 position)
{
scale = new Vector3(1f, 1f, 1f);
_body = new Body();
_skin = new CollisionSkin(_body);
_body.CollisionSkin = _skin;
Box box = new Box(position, Matrix.Identity, scale);
_skin.AddPrimitive(box, (int)MaterialTable.MaterialID.BouncySmooth);
Vector3 com = SetMass(1.0f);
_body.MoveTo(position, Matrix.Identity);
_skin.ApplyLocalTransform(new JigLibX.Math.Transform(-com, Matrix.Identity));
_body.EnableBody();
}