eugene.litvinov Posted April 7, 2011 Share Posted April 7, 2011 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
Recommended Posts