GL - added RigidBody data on client for debuging output

This commit is contained in:
lindaandersson 2014-02-18 13:31:36 +01:00
parent fc19938f1b
commit bfa748047f
4 changed files with 172 additions and 25 deletions

View File

@ -31,32 +31,27 @@ void C_Object::updateWorld()
{ {
Oyster::Math3D::Float4x4 translation = Oyster::Math3D::TranslationMatrix(this->position); Oyster::Math3D::Float4x4 translation = Oyster::Math3D::TranslationMatrix(this->position);
Oyster::Math3D::Float4x4 rot = Oyster::Math3D::RotationMatrix(this->rotation); Oyster::Math3D::Float4x4 rot = Oyster::Math3D::RotationMatrix(this->rotation);
//Oyster::Math3D::Float4x4 scale = Oyster::Math3D::; Oyster::Math3D::Float4x4 scale = Oyster::Math3D::ScalingMatrix(this->scale);
Oyster::Math3D::Float4x4 scale = Oyster::Math3D::Matrix::identity;
scale.v[0].x = this->scale[0];
scale.v[1].y = this->scale[1];
scale.v[2].z = this->scale[2];
world = translation * rot * scale; world = translation * rot * scale;
model->WorldMatrix = world; model->WorldMatrix = world;
} }
void C_Object::setWorld(Oyster::Math::Float4x4 world)
{
model->WorldMatrix = world;
}
Oyster::Math::Float4x4 C_Object::getWorld() const Oyster::Math::Float4x4 C_Object::getWorld() const
{ {
Oyster::Math3D::Float4x4 translation = Oyster::Math3D::TranslationMatrix(this->position);
Oyster::Math3D::Float4x4 rot = Oyster::Math3D::RotationMatrix(this->rotation);
Oyster::Math3D::Float4x4 scale = Oyster::Math3D::ScalingMatrix(this->scale);
Oyster::Math3D::Float4x4 world = translation * rot * scale;
return world; return world;
} }
void C_Object::setPos(Oyster::Math::Float3 newPos) void C_Object::setPos(Oyster::Math::Float3 newPos)
{ {
this->position = newPos; this->position = newPos;
updateWorld();
} }
void C_Object::addPos(Oyster::Math::Float3 deltaPos) void C_Object::addPos(Oyster::Math::Float3 deltaPos)
{ {
this->position += deltaPos; this->position += deltaPos;
updateWorld();
} }
Oyster::Math::Float3 C_Object::getPos() const Oyster::Math::Float3 C_Object::getPos() const
{ {
@ -65,12 +60,6 @@ Oyster::Math::Float3 C_Object::getPos() const
void C_Object::setRot(Oyster::Math::Quaternion newRot) void C_Object::setRot(Oyster::Math::Quaternion newRot)
{ {
this->rotation = newRot; this->rotation = newRot;
updateWorld();
}
void C_Object::addRot(Oyster::Math::Quaternion deltaRot)
{
this->rotation += deltaRot;
updateWorld();
} }
Oyster::Math::Quaternion C_Object::getRotation() const Oyster::Math::Quaternion C_Object::getRotation() const
{ {
@ -79,12 +68,10 @@ Oyster::Math::Quaternion C_Object::getRotation() const
void C_Object::setScale(Oyster::Math::Float3 newScale) void C_Object::setScale(Oyster::Math::Float3 newScale)
{ {
this->scale = newScale; this->scale = newScale;
updateWorld();
} }
void C_Object::addScale(Oyster::Math::Float3 deltaScale) void C_Object::addScale(Oyster::Math::Float3 deltaScale)
{ {
this->scale += deltaScale; this->scale += deltaScale;
updateWorld();
} }
Oyster::Math::Float3 C_Object::getScale() const Oyster::Math::Float3 C_Object::getScale() const
{ {
@ -106,3 +93,53 @@ void C_Object::Release()
this->model = nullptr; this->model = nullptr;
} }
} }
////////////////////////////////////////////////
// RB DEBUG
////////////////////////////////////////////////
bool C_Object::InitRB(RBInitData RBInit)
{
RBposition = RBInit.position;
RBrotation = RBInit.rotation;
RBscale = RBInit.scale;
return true;
}
Oyster::Math::Float4x4 C_Object::getRBWorld() const
{
Oyster::Math3D::Float4x4 translation = Oyster::Math3D::TranslationMatrix(this->RBposition);
Oyster::Math3D::Float4x4 rot = Oyster::Math3D::RotationMatrix(this->RBrotation);
Oyster::Math3D::Float4x4 scale = Oyster::Math3D::ScalingMatrix(this->RBscale);
Oyster::Math3D::Float4x4 world = translation * rot * scale;
return world;
}
void C_Object::setRBPos(Oyster::Math::Float3 newPos)
{
this->RBposition = newPos;
}
Oyster::Math::Float3 C_Object::getRBPos() const
{
return this->RBposition;
}
void C_Object::setRBRot(Oyster::Math::Quaternion newRot)
{
this->RBrotation = newRot;
}
Oyster::Math::Quaternion C_Object::getRBRotation() const
{
return this->RBrotation;
}
void C_Object::setRBScale(Oyster::Math::Float3 newScale)
{
this->RBscale = newScale;
}
Oyster::Math::Float3 C_Object::getRBScale() const
{
return this->RBscale;
}
RB_Type C_Object::getBRtype()const
{
return this->type;
}

View File

@ -5,7 +5,11 @@ namespace DanBias
{ {
namespace Client namespace Client
{ {
enum RB_Type
{
RB_Type_Cube,
RB_Type_Sphere
};
struct ModelInitData struct ModelInitData
{ {
int id; int id;
@ -15,6 +19,13 @@ namespace DanBias
Oyster::Math::Float3 scale; Oyster::Math::Float3 scale;
bool visible; bool visible;
}; };
struct RBInitData
{
Oyster::Math::Float3 position;
Oyster::Math::Quaternion rotation;
Oyster::Math::Float3 scale;
RB_Type type;
};
class C_Object class C_Object
{ {
@ -24,27 +35,42 @@ namespace DanBias
Oyster::Math::Quaternion rotation; Oyster::Math::Quaternion rotation;
Oyster::Math::Float3 scale; Oyster::Math::Float3 scale;
// RB DEBUG
Oyster::Math::Float3 RBposition;
Oyster::Math::Quaternion RBrotation;
Oyster::Math::Float3 RBscale;
RB_Type type;
int id; int id;
void updateWorld();
protected: protected:
Oyster::Graphics::Model::Model *model; Oyster::Graphics::Model::Model *model;
public: public:
C_Object(); C_Object();
virtual ~C_Object(); virtual ~C_Object();
virtual bool Init(ModelInitData modelInit); virtual bool Init(ModelInitData modelInit);
void updateWorld();
void setWorld(Oyster::Math::Float4x4 world); //void setWorld(Oyster::Math::Float4x4 world);
Oyster::Math::Float4x4 getWorld() const; Oyster::Math::Float4x4 getWorld() const;
void setPos(Oyster::Math::Float3 newPos); void setPos(Oyster::Math::Float3 newPos);
Oyster::Math::Float3 getPos() const; Oyster::Math::Float3 getPos() const;
void addPos(Oyster::Math::Float3 deltaPos); void addPos(Oyster::Math::Float3 deltaPos);
void setRot(Oyster::Math::Quaternion newRot); void setRot(Oyster::Math::Quaternion newRot);
Oyster::Math::Quaternion getRotation() const; Oyster::Math::Quaternion getRotation() const;
void addRot(Oyster::Math::Quaternion deltaRot);
void setScale(Oyster::Math::Float3 newScale); void setScale(Oyster::Math::Float3 newScale);
void addScale(Oyster::Math::Float3 deltaScale); void addScale(Oyster::Math::Float3 deltaScale);
Oyster::Math::Float3 getScale() const; Oyster::Math::Float3 getScale() const;
// RB DEBUG
bool InitRB(RBInitData modelInit);
Oyster::Math::Float4x4 getRBWorld() const;
void setRBPos(Oyster::Math::Float3 newPos);
Oyster::Math::Float3 getRBPos() const;
void setRBRot(Oyster::Math::Quaternion newRot);
Oyster::Math::Quaternion getRBRotation() const;
void setRBScale(Oyster::Math::Float3 newScale);
Oyster::Math::Float3 getRBScale() const;
RB_Type getBRtype()const;
virtual void Render(); virtual void Render();
virtual void Release(); virtual void Release();
virtual int GetId() const; virtual int GetId() const;

View File

@ -108,10 +108,19 @@ void GameState::InitiatePlayer( int id, const std::string &modelName, const floa
StringToWstring( modelName, modelData.modelPath ); StringToWstring( modelName, modelData.modelPath );
modelData.id = id; modelData.id = id;
// RB DEBUG
RBInitData RBData;
RBData.position = position;
RBData.rotation = ArrayToQuaternion( rotation );
RBData.scale = Float3( 3 );
if( isMyPlayer ) if( isMyPlayer )
{ {
if( this->privData->player.Init(modelData) ) if( this->privData->player.Init(modelData) )
{ {
// RB DEBUG
this->privData->player.InitRB( RBData );
this->privData->myId = id; this->privData->myId = id;
this->privData->camera.SetPosition( this->privData->player.getPos() ); this->privData->camera.SetPosition( this->privData->player.getPos() );
Float3 offset = Float3( 0.0f ); Float3 offset = Float3( 0.0f );
@ -125,6 +134,9 @@ void GameState::InitiatePlayer( int id, const std::string &modelName, const floa
C_DynamicObj *p = new C_DynamicObj(); C_DynamicObj *p = new C_DynamicObj();
if( p->Init(modelData) ) if( p->Init(modelData) )
{ {
// RB DEBUG
this->privData->player.InitRB( RBData );
(*this->privData->dynamicObjects)[id] = p; (*this->privData->dynamicObjects)[id] = p;
} }
} }
@ -157,6 +169,41 @@ bool GameState::Render()
dynamicObject->second->Render(); dynamicObject->second->Render();
} }
// RB DEBUG render wire frame
Oyster::Graphics::API::StartRenderWireFrame();
Oyster::Math3D::Float4x4 translation = Oyster::Math3D::TranslationMatrix(Float3( 0,132, 20));
Oyster::Math3D::Float4x4 scale = Oyster::Math3D::ScalingMatrix(Float3( 2, 2, 2));
Oyster::Math3D::Float4x4 world = translation * scale;
Oyster::Graphics::API::RenderDebugCube( world );
Oyster::Graphics::API::RenderDebugCube(this->privData->player.getRBWorld());
for( ; staticObject != this->privData->staticObjects->end(); ++staticObject )
{
if( staticObject->second->getBRtype() == RB_Type_Cube)
{
Oyster::Graphics::API::RenderDebugCube( staticObject->second->getRBWorld());
}
if( staticObject->second->getBRtype() == RB_Type_Sphere)
{
Oyster::Graphics::API::RenderDebugSphere( staticObject->second->getRBWorld());
}
}
for( ; dynamicObject != this->privData->dynamicObjects->end(); ++dynamicObject )
{
if( dynamicObject->second->getBRtype() == RB_Type_Cube)
{
Oyster::Graphics::API::RenderDebugCube( dynamicObject->second->getRBWorld());
}
if( dynamicObject->second->getBRtype() == RB_Type_Sphere)
{
Oyster::Graphics::API::RenderDebugSphere( dynamicObject->second->getRBWorld());
}
}
Oyster::Graphics::API::EndFrame(); Oyster::Graphics::API::EndFrame();
return true; return true;
} }

View File

@ -138,6 +138,25 @@ void NetLoadState::LoadGame( const ::std::string &fileName )
C_StaticObj *staticObject = new C_StaticObj(); C_StaticObj *staticObject = new C_StaticObj();
if( staticObject->Init( desc ) ) if( staticObject->Init( desc ) )
{ {
// RB DEBUG
RBInitData RBData;
if(oh->boundingVolume.geoType == CollisionGeometryType_Box)
{
RBData.position = (Float3)oh->position + (Float3)oh->boundingVolume.box.position;
RBData.rotation = ArrayToQuaternion( oh->rotation ); // Only model rotation
RBData.scale = (Float3)oh->scale * (Float3)oh->boundingVolume.box.size;
staticObject->InitRB( RBData );
}
if(oh->boundingVolume.geoType == CollisionGeometryType_Sphere)
{
RBData.position = (Float3)oh->position + (Float3)oh->boundingVolume.sphere.position;
RBData.rotation = ArrayToQuaternion( oh->rotation ); // Only model rotation
RBData.scale = (Float3)oh->scale * oh->boundingVolume.sphere.radius;
staticObject->InitRB( RBData );
}
(*this->privData->staticObjects)[objectID] = staticObject; (*this->privData->staticObjects)[objectID] = staticObject;
} }
else else
@ -161,6 +180,24 @@ void NetLoadState::LoadGame( const ::std::string &fileName )
C_DynamicObj *dynamicObject = new C_DynamicObj(); C_DynamicObj *dynamicObject = new C_DynamicObj();
if( dynamicObject->Init( desc ) ) if( dynamicObject->Init( desc ) )
{ {
// RB DEBUG
RBInitData RBData;
if(oh->boundingVolume.geoType == CollisionGeometryType_Box)
{
RBData.position = (Float3)oh->position + (Float3)oh->boundingVolume.box.position;
RBData.rotation = ArrayToQuaternion( oh->rotation ); // Only model rotation
RBData.scale = (Float3)oh->scale * (Float3)oh->boundingVolume.box.size;
dynamicObject->InitRB( RBData );
}
if(oh->boundingVolume.geoType == CollisionGeometryType_Sphere)
{
RBData.position = (Float3)oh->position + (Float3)oh->boundingVolume.sphere.position;
RBData.rotation = ArrayToQuaternion( oh->rotation ); // Only model rotation
RBData.scale = (Float3)oh->scale * oh->boundingVolume.sphere.radius;
dynamicObject->InitRB( RBData );
}
(*this->privData->dynamicObjects)[objectID] = dynamicObject; (*this->privData->dynamicObjects)[objectID] = dynamicObject;
} }
else else