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 rot = Oyster::Math3D::RotationMatrix(this->rotation);
//Oyster::Math3D::Float4x4 scale = Oyster::Math3D::;
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];
Oyster::Math3D::Float4x4 scale = Oyster::Math3D::ScalingMatrix(this->scale);
world = translation * rot * scale;
model->WorldMatrix = world;
}
void C_Object::setWorld(Oyster::Math::Float4x4 world)
{
model->WorldMatrix = world;
}
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;
}
void C_Object::setPos(Oyster::Math::Float3 newPos)
{
this->position = newPos;
updateWorld();
}
void C_Object::addPos(Oyster::Math::Float3 deltaPos)
{
this->position += deltaPos;
updateWorld();
}
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)
{
this->rotation = newRot;
updateWorld();
}
void C_Object::addRot(Oyster::Math::Quaternion deltaRot)
{
this->rotation += deltaRot;
updateWorld();
}
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)
{
this->scale = newScale;
updateWorld();
}
void C_Object::addScale(Oyster::Math::Float3 deltaScale)
{
this->scale += deltaScale;
updateWorld();
}
Oyster::Math::Float3 C_Object::getScale() const
{
@ -106,3 +93,53 @@ void C_Object::Release()
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
{
enum RB_Type
{
RB_Type_Cube,
RB_Type_Sphere
};
struct ModelInitData
{
int id;
@ -15,6 +19,13 @@ namespace DanBias
Oyster::Math::Float3 scale;
bool visible;
};
struct RBInitData
{
Oyster::Math::Float3 position;
Oyster::Math::Quaternion rotation;
Oyster::Math::Float3 scale;
RB_Type type;
};
class C_Object
{
@ -24,27 +35,42 @@ namespace DanBias
Oyster::Math::Quaternion rotation;
Oyster::Math::Float3 scale;
// RB DEBUG
Oyster::Math::Float3 RBposition;
Oyster::Math::Quaternion RBrotation;
Oyster::Math::Float3 RBscale;
RB_Type type;
int id;
void updateWorld();
protected:
Oyster::Graphics::Model::Model *model;
public:
C_Object();
virtual ~C_Object();
virtual bool Init(ModelInitData modelInit);
void setWorld(Oyster::Math::Float4x4 world);
void updateWorld();
//void setWorld(Oyster::Math::Float4x4 world);
Oyster::Math::Float4x4 getWorld() const;
void setPos(Oyster::Math::Float3 newPos);
Oyster::Math::Float3 getPos() const;
void addPos(Oyster::Math::Float3 deltaPos);
void setRot(Oyster::Math::Quaternion newRot);
Oyster::Math::Quaternion getRotation() const;
void addRot(Oyster::Math::Quaternion deltaRot);
void setScale(Oyster::Math::Float3 newScale);
void addScale(Oyster::Math::Float3 deltaScale);
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 Release();
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 );
modelData.id = id;
// RB DEBUG
RBInitData RBData;
RBData.position = position;
RBData.rotation = ArrayToQuaternion( rotation );
RBData.scale = Float3( 3 );
if( isMyPlayer )
{
if( this->privData->player.Init(modelData) )
{
// RB DEBUG
this->privData->player.InitRB( RBData );
this->privData->myId = id;
this->privData->camera.SetPosition( this->privData->player.getPos() );
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();
if( p->Init(modelData) )
{
// RB DEBUG
this->privData->player.InitRB( RBData );
(*this->privData->dynamicObjects)[id] = p;
}
}
@ -157,6 +169,41 @@ bool GameState::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();
return true;
}

View File

@ -138,6 +138,25 @@ void NetLoadState::LoadGame( const ::std::string &fileName )
C_StaticObj *staticObject = new C_StaticObj();
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;
}
else
@ -161,6 +180,24 @@ void NetLoadState::LoadGame( const ::std::string &fileName )
C_DynamicObj *dynamicObject = new C_DynamicObj();
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;
}
else