2017-03-19 2 views
2

Urho3D/Urhosharpのテストシーンには2つのボックスが含まれています(スクリーンショット参照)。 両方とも、赤と緑のボックスにはRigidBodyCollisionShapeを追加しました。PhysicsWorld/CollisionShapeをデバッグレンダラで視覚化するには?

enter image description here

赤いボックスの形状は、球と青いボックスのためのものです。私は追加することで、デバッグの可視化を有効にしている:

app.Engine.SubscribeToPostRenderUpdate(args => { 
    app.Renderer.DrawDebugGeometry(false); 
}); 

しかし、これは衝突形状が、オブジェクト(緑色の線)の唯一のワイヤーフレームをレンダリングしていません。

var floorNode = app.RootNode.CreateChild("Floor"); 
    floorNode.Position = Vector3.Zero; 
    floorNode.Scale = new Vector3(10, 1, 10); 
    var floorComp = floorNode.CreateComponent<Box>(); 
    floorComp.SetMaterial(Material.FromColor(new Color(0, 0, 1, 0.5f))); 

var rigidBody = floorNode.CreateComponent<RigidBody>(); 
    rigidBody.Mass = 0; 
    var collNode = floorNode.CreateComponent<CollisionShape>(); 
    collNode.SetBox(Vector3.One, Vector3.Zero, Quaternion.Identity); 

と赤のいずれかの:

は、ここで青ノード用のコードです

var boxNode = app.RootNode.CreateChild("Box"); 
    boxNode.SetScale(2f); 
    var boxComp = boxNode.CreateComponent<Box>(); 
    boxComp.Color = Color.Red; 
    boxComp.SetMaterial(Material.FromColor(Color.Red)); 

var rigidBody = boxNode.CreateComponent<RigidBody>(); 
    rigidBody.Mass = 0f; 
    var collNode = boxNode.CreateComponent<CollisionShape>(); 

    collNode.SetBox(Vector3.One, Vector3.Zero, Quaternion.Identity); 
    collNode.SetSphere(3f, Vector3.Zero, Quaternion.Identity); 

衝突作品が、それはそれが容易になりますので、私は物理学の世界を見てみたいです実験する。

答えて

3

解決方法:Urho3Dレンダラのデフォルトのデバッグ出力には、物理​​コンポーネントが含まれていません。手動で追加する必要があります。

app.Scene.GetOrCreateComponent<PhysicsWorld>(); 
app.Scene.GetOrCreateComponent<DebugRenderer>(); 

が続いて結果が期待されているとおり、もちろんデバッグレンダラと物理コンポーネントを持っている必要があり、このシーンを動作するため

app.Engine.SubscribeToPostRenderUpdate(args => { 
    // Default debug rendering. 
    app.Renderer.DrawDebugGeometry(false); 

    // Use debug renderer to output physics world debug. 
    var debugRendererComp = app.Scene.GetComponent<DebugRenderer>(); 
    var physicsComp = app.Scene.GetComponent<PhysicsWorld>(); 
    if(physicsComp != null) 
    { 
     physicsComp.DrawDebugGeometry(debugRendererComp, false); 
    } 
}); 

Physics debug rendering

私が気づい良いところ::赤いボックス下の画像では球状の衝突形状を持っている衝突形状は、それがノードと一緒にスケールします実際のノードの子ノードであるから。つまり、サイズがVector3.Oneのボックスまたは球(または何でも)が作成された場合、実際のノードサイズと常に一致します。

関連する問題