eugene.litvinov Posted March 28, 2011 Share Posted March 28, 2011 I have PlayerActor player, that have some "feeler" ahead, that can intersect objects, and player can move around himself with this objects. Also I need save offset between object's center and object's intersection with player. First of all I try realize it via adding object into player's children list, but this pattern is not suitable: 1. When PlayerActor turning left/right then children nodes transform with it, but if it move up/down, then rotated camera inside of player, and children not transform. 2. I will use physical forces in future, so I would like keep player and object in one hierarchical level. Problem described on screenshot: Next realization was via objects position: I save vector via player's camera position and gived object: v = intersectionPos - actorPos; // vector via intersection position and plyer camera position centerOffset = objectPos - intersectionPos; // vector via object center and intersection position Then in update method I use next: mat4 objectModelview = translate(actorPos); mat4 t = translate(v); objectModelview = objectModelview * t * translate(centerOffset); vec3 p2 = objectModelview.m03m13m23; // position of destination point But this variant not take into account player's rotation. I try to use for this matrix lookAt: vec3 actorPos = actor.getIModelview().m03m13m23; mat4 objectModelview = lookAt(actorPos, // actor's camera position actorFeelerPos, // actor's feeler position (ahead the actor) actor.getUp() // actor's up vector ); mat4 t = translate(v); objectModelview = objectModelview * t * translate(centerOffset); vec3 p2 = objectModelview.m03m13m23; // position of destination point And try to use IModelview: mat4 objectModelview = actor.getIModelview(); mat4 t = translate(v); objectModelview = objectModelview * t * translate(centerOffset); vec3 p2 = objectModelview.m03m13m23; // position of destination point And all this patterns give me different results... I think best variant to use IModelview or maybe Modelview matrices, but when I use it, line objectModelview = objectModelview * t; give me different variants even for different angles between player and object... It seems like this matrix have different coordinate system than world transformations or I have errors in some else ( Link to comment
eugene.litvinov Posted March 29, 2011 Author Share Posted March 29, 2011 I do additional tests: If I use next code: engine.visualizer.renderSolidSphere(actor.getIModelview() * ::translate(vec3(0, 0, -1)), 0.1, vec4(1, 0, 0, 1)); I have necessary effect - I see sphere in front of player's camera. But when I calculate vector from player's camera to intersection point with object, I have, for example, next vector: (1.18, 0.12, -0.13), in this case object placed in front of camera too, but vector axis distance moved from Z to X: vec3(0, 0, -1) // vector with right direction for objects in front of player's camera vec3(1.18, 0.12, -0.13) // calculated vector, described distance from player's camera to object in front of it, have different axis and sign What I doing wrong? I think I'm doing all calculations in different transformation spaces or something about it. Link to comment
Recommended Posts