Jump to content

Global transform matrix to local and back


photo

Recommended Posts

I need do some calculation in PlayerActor::getIModelview() coordinate system. First of all, I try convert global (world) object's transformation matrix to PlayerActor::getIModelview() coordinate system and back:

mat4 modelView = actor.getIModelview(); // PlayerActor's camera coordinate system
mat4 modelFeelerView = modelView * ::translate(0, 0, -feelerLength); // position ahead PlayerActor's

vec3 actorPos = Math::decomposePositionXYZ(actor.getIModelview()); // get PlayerActor's camera position
vec3 actorFeelerPos = Math::decomposePositionXYZ(modelFeelerView); // get ahead PlayerActor's camera position

mat4 feelerTransform = ::translate(actorFeelerPos) * ::inverse(modelView); // convert global (world) object's transformation matrix to PlayerActor::getIModelview() coordinate system

vec3 feelerLocalPos = Math::decomposePositionXYZ(feelerTransform); // get local position ahead PlayerActor's

engine.visualizer.renderLine3D(actorPos, Math::decomposePositionXYZ(::translate(feelerLocalPos) * modelView), vec4(0, 1, 0, 1)); // this give not correct result - line draws incorrect direction and position
engine.visualizer.renderLine3D(actorPos, Math::decomposePositionXYZ(objectTransform * modelView), vec4(0, 1, 0, 1)); // this give correct result - line draws correct - in right place

vec3 Math::decomposePositionXYZ(mat4 transform)
{
return transform.m03m13m23; // get position from transform matrix
}

 

What I doing wrong? I use transform.m03m13m23 many times, and it always gives correct position, but now I can do correct transformations with matrix, but only I get position from matrix, this position not returning in right position. Or problem in that I do conversion world->local and local->world incorrect way? Thanks.

Link to comment
×
×
  • Create New...