ソースを参照

Adding to physics debugger

Panagiotis Christopoulos Charitos 11 年 前
コミット
64223fab74

+ 17 - 2
include/anki/renderer/DebugDrawer.h

@@ -10,6 +10,7 @@
 #include "anki/Gl.h"
 #include "anki/Gl.h"
 #include "anki/resource/Resource.h"
 #include "anki/resource/Resource.h"
 #include "anki/collision/CollisionShape.h"
 #include "anki/collision/CollisionShape.h"
+#include "anki/physics/PhysicsDrawer.h"
 #include "anki/scene/Forward.h"
 #include "anki/scene/Forward.h"
 #include "anki/util/Array.h"
 #include "anki/util/Array.h"
 #include <unordered_map>
 #include <unordered_map>
@@ -134,8 +135,22 @@ private:
 	DebugDrawer* m_dbg; ///< The debug drawer
 	DebugDrawer* m_dbg; ///< The debug drawer
 };
 };
 
 
-// Forward
-class Renderer;
+/// Implement physics debug drawer.
+class PhysicsDebugDrawer: public PhysicsDrawer
+{
+public:
+	PhysicsDebugDrawer(DebugDrawer* dbg)
+	:	m_dbg(dbg)
+	{}
+
+	void drawLines(
+		const Vec3* lines,
+		const U32 linesCount,
+		const Vec4& color) final;
+
+private:
+	DebugDrawer* m_dbg; ///< The debug drawer
+};
 
 
 /// This is a drawer for some scene nodes that need debug
 /// This is a drawer for some scene nodes that need debug
 class SceneDebugDrawer
 class SceneDebugDrawer

+ 2 - 1
src/physics/PhysicsDrawer.cpp

@@ -60,7 +60,8 @@ void PhysicsDrawer::drawAabb(const NewtonBody* body)
 		Vec3(p1.x(), p1.y(), p0.z()),
 		Vec3(p1.x(), p1.y(), p0.z()),
 		Vec3(p1.x(), p1.y(), p1.z())};
 		Vec3(p1.x(), p1.y(), p1.z())};
 
 
-	drawLines(lines, sizeof(lines) / sizeof(Vec3), Vec4(0.0, 0.0, 1.0, 0.5));
+	const U32 linesCount = sizeof(lines) / sizeof(Vec3) / 2;
+	drawLines(lines, linesCount, Vec4(0.0, 0.0, 1.0, 0.5));
 }
 }
 
 
 } // end namespace anki
 } // end namespace anki

+ 8 - 0
src/renderer/Dbg.cpp

@@ -128,6 +128,14 @@ Error Dbg::run(GlCommandBufferHandle& cmdb)
 
 
 	(void)err;
 	(void)err;
 
 
+	if(1)
+	{
+		PhysicsDebugDrawer phyd(m_drawer);
+
+		m_drawer->setModelMatrix(Mat4::getIdentity());
+		phyd.drawWorld(scene._getPhysicsWorld());
+	}
+
 	// XXX
 	// XXX
 #if 0
 #if 0
 	if(0)
 	if(0)

+ 17 - 0
src/renderer/DebugDrawer.cpp

@@ -475,6 +475,23 @@ void CollisionDebugDrawer::visit(const Frustum& f)
 	}
 	}
 }
 }
 
 
+//==============================================================================
+// PhysicsDebugDrawer                                                          =
+//==============================================================================
+void PhysicsDebugDrawer::drawLines(
+	const Vec3* lines,
+	const U32 linesCount,
+	const Vec4& color)
+{
+	m_dbg->begin(GL_LINES);
+	m_dbg->setColor(color);
+	for(U i = 0; i < linesCount * 2; ++i)
+	{
+		m_dbg->pushBackVertex(lines[i]);
+	}
+	m_dbg->end();
+}
+
 //==============================================================================
 //==============================================================================
 // SceneDebugDrawer                                                            =
 // SceneDebugDrawer                                                            =
 //==============================================================================
 //==============================================================================

+ 4 - 15
testapp/Main.cpp

@@ -54,7 +54,7 @@ Error init()
 	MainRenderer& renderer = app->getMainRenderer();
 	MainRenderer& renderer = app->getMainRenderer();
 	ResourceManager& resources = app->getResourceManager();
 	ResourceManager& resources = app->getResourceManager();
 
 
-	scene.setAmbientColor(Vec4(0.1, 0.05, 0.05, 0.0) * 0.1);
+	scene.setAmbientColor(Vec4(0.1, 0.05, 0.05, 0.0) * 2.1);
 
 
 	if(getenv("PROFILE"))
 	if(getenv("PROFILE"))
 	{
 	{
@@ -219,24 +219,13 @@ Error init()
 	}
 	}
 #endif
 #endif
 
 
-#if 0
+#if 1
 	// horse
 	// horse
 	err = scene.newSceneNode<ModelNode>("horse", horse, 
 	err = scene.newSceneNode<ModelNode>("horse", horse, 
-		"models/horse/horse.ankimdl");
+		"models/crate0/crate0.ankimdl");
 	if(err) return err;
 	if(err) return err;
 	horse->getComponent<MoveComponent>().setLocalTransform(
 	horse->getComponent<MoveComponent>().setLocalTransform(
 		Transform(Vec4(-2, 0, 0, 0.0), Mat3x4::getIdentity(), 0.7));
 		Transform(Vec4(-2, 0, 0, 0.0), Mat3x4::getIdentity(), 0.7));
-
-	//horse = scene.newSceneNode<ModelNode>("crate", "models/crate0/crate0.ankimdl");
-	//horse->setLocalTransform(Transform(Vec3(2, 10.0, 0), Mat3::getIdentity(),
-	//	1.0));
-
-	// barrel
-	/*ModelNode* redBarrel = new ModelNode(
-		"red_barrel", &scene, nullptr, MoveComponent::MF_NONE, 
-		"models/red_barrel/red_barrel.mdl");
-	redBarrel->setLocalTransform(Transform(Vec3(+2, 0, 0), Mat3::getIdentity(),
-		0.7));*/
 #endif
 #endif
 
 
 	if(0)
 	if(0)
@@ -253,7 +242,7 @@ Error init()
 		move->setLocalOrigin(Vec4(0.0, 1.4, 0.6, 0.0));
 		move->setLocalOrigin(Vec4(0.0, 1.4, 0.6, 0.0));
 	}
 	}
 
 
-#if 1
+#if 0
 	{
 	{
 		ScriptResourcePointer script;
 		ScriptResourcePointer script;