PhysX.Net icon indicating copy to clipboard operation
PhysX.Net copied to clipboard

How use contact report

Open j303-27 opened this issue 6 years ago • 0 comments

Hey. I'm trying to do this. In Monogame. `using System.Numerics;

using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input;

using PhysX; using PhysX.VisualDebugger;

namespace Game3 { public class ErrorOutput : ErrorCallback { public override void ReportError(ErrorCode errorCode, string message, string file, int lineNumber) { } }

public class SampleFilterShader : SimulationFilterShader
{
    public override FilterResult Filter(int attributes0, FilterData filterData0, int attributes1, FilterData filterData1)
    {
        return new FilterResult
        {
            FilterFlag = FilterFlag.Default,
            PairFlags = PairFlag.ContactDefault | PairFlag.NotifyTouchFound | PairFlag.NotifyTouchLost
        };
    }
}

public class EventCallback : SimulationEventCallback
{
    public override void OnContact(ContactPairHeader pairHeader, ContactPair[] pairs)
    {
        base.OnContact(pairHeader, pairs);
    }
}

public class Game1 : Game
{
    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;

    Physics Physics = null;
    Scene Scene = null;

    RigidDynamic box = null;
    RigidStatic ground = null;

    public Game1()
    {
        graphics = new GraphicsDeviceManager(this);
        Content.RootDirectory = "Content";
    }

    protected override void Initialize()
    {
        this.InitializePhysics();

        base.Initialize();
    }

    void InitializePhysics()
    {
        ErrorOutput errorOutput = new ErrorOutput();

        Foundation foundation = new Foundation(errorOutput);

        var pvd = new PhysX.VisualDebugger.Pvd(foundation);

        this.Physics = new Physics(foundation, true, pvd);

        SceneDesc desc = new SceneDesc();
        desc.Gravity = new System.Numerics.Vector3(0, -9.81f, 0);
        desc.FilterShader = new SampleFilterShader();
        desc.Flags |= SceneFlag.EnableGpuDynamics;
		desc.BroadPhaseType |= BroadPhaseType.Gpu;

        this.Scene = this.Physics.CreateScene(desc);

        this.Scene.SetVisualizationParameter(VisualizationParameter.Scale, 1.0f);
        this.Scene.SetVisualizationParameter(VisualizationParameter.CollisionShapes, true);
        this.Scene.SetVisualizationParameter(VisualizationParameter.JointLocalFrames, true);
        this.Scene.SetVisualizationParameter(VisualizationParameter.JointLimits, true);
        this.Scene.SetVisualizationParameter(VisualizationParameter.ActorAxes, true);

        this.Physics.Pvd.Connect("localhost");

        this.box = this.Scene.Physics.CreateRigidDynamic();
        this.box.GlobalPose = Matrix4x4.CreateTranslation(new System.Numerics.Vector3(0, 4, 0));
        RigidActorExt.CreateExclusiveShape(this.box, new BoxGeometry(1, 1, 1), this.Scene.Physics.CreateMaterial(0.5f, 0.5f, 0.5f), null);
        this.Scene.AddActor(this.box);

        this.ground = this.Scene.Physics.CreateRigidStatic();
        this.ground.GlobalPose = Matrix4x4.CreateTranslation(new System.Numerics.Vector3(0, -8, 0));
        RigidActorExt.CreateExclusiveShape(this.ground, new BoxGeometry(16, 8, 16), this.Scene.Physics.CreateMaterial(0.5f, 0.5f, 0.5f), null);
        this.Scene.AddActor(this.ground);
    }

    protected override void LoadContent()
    {
        spriteBatch = new SpriteBatch(GraphicsDevice);
    }

    protected override void UnloadContent()
    {
    }

    protected override void Update(GameTime gameTime)
    {
        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
            Exit();

        this.Scene.Simulate(1.0f / 60.0f);
        this.Scene.FetchResults(true);

        this.Window.Title = this.box.GlobalPose.M42.ToString();

        base.Update(gameTime);
    }

    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);

        base.Draw(gameTime);
    }
}

} ` But the contact is not fixed in the event. What am I doing wrong? Thanks.

j303-27 avatar Sep 18 '19 07:09 j303-27