dsman Posted May 17, 2015 Share Posted May 17, 2015 So I am integrating babylon with raytracer. And all I know is I need to provide rotation of each meshes in (angle, x, y, z) format. Is this format a Quaternion in first place? And anyway when I tried to get rotation in quaternion format (by doing mesh.rotationQuaternion ), I am getting error as I have set mesh rotation by mesh.rotaion and not mesh.rotationQuaternion . So both the property seems exclusive to each other. How does this work ? Logically rotation is rotation by whichever method you set or get. No ? Quote Link to comment Share on other sites More sharing options...
Wingnut Posted May 18, 2015 Share Posted May 18, 2015 Hi dsman! Um, can you use yourmesh.rotation.toQuaternion() ? Mesh don't have a .rotationQuaternion by default. It is added when/if needed, by system. You can add one, anytime... mesh.rotationQuaternion = new BABYLON.Quaternion(0, 0, 0, 1); But after that, I THINK you must use things like... mesh.rotationQuaternion = BABYLON.Quaternion.RotationYawPitchRoll(0, 0, 0); and/or... mesh.rotate(BABYLON.Axis.X, 0, BABYLON.Space.LOCAL); mesh.rotate(BABYLON.Axis.Y, 0, BABYLON.Space.LOCAL); mesh.rotate(BABYLON.Axis.Z, 0, BABYLON.Space.LOCAL); Maybe this will help. Be well. Quote Link to comment Share on other sites More sharing options...
dsman Posted May 18, 2015 Author Share Posted May 18, 2015 If I do meshrotation = mesh.rotation.toQuaternion() , how do I get angle , x, y, z from meshrotation object? meshrotation has properties like meshrotation.x , meshrotation.y, meshrotation.z, meshrotation.w but which one is angle and which one is rest ? I am asking because I applied Math.PI/4 angle on x axis (By mesh.rotation.x = Math.PI/4) and after that if I do meshrotation= mesh.rotation.toQuaternion(), meshrotation.x = 0.382683meshrotation.y = 0meshrotation.z=0meshrotation.w =0.92387953 Now no If I rotate at different angle , .x , .y, .z properties changes respectively but .w remains the same. So I am wondering if this toQuternion() will give me the format that I want. Format I want is Angle, x , y, z . Quote Link to comment Share on other sites More sharing options...
jerome Posted May 18, 2015 Share Posted May 18, 2015 DBawel explained here about quaternions/angles relationship : http://www.html5gamedevs.com/topic/14349-meshrebase/?p=82414 What's your question :What do you know in initial state (mesh coordinates ? angles to rotate it then ?) ?What do you want to achieve ? Quote Link to comment Share on other sites More sharing options...
dsman Posted May 18, 2015 Author Share Posted May 18, 2015 Well let me make it simpler.. 1. I have a model converted/imported from 3D max. 2. In babylon, I am looping through all meshes and want rotation of each meshes in (angle, x, y, z ) format. AS I need to provide it to other ray tracing application. 3. I am doing meshrotation = mesh.rotation.toQuaternion() . I realized (meshrotation.w * 180 ) becomes my 'angle' 4. Now , I only need to know what does meshrotation.x , meshrotation.y , meshrotation.z is actually ? If the given mesh has rotation of 45 degree on all axis, then I get value of meshrotation.x = 6.1232 , meshrotation.y = 6.1232 , meshrotation.z = 6.1232 .. So what does 6.1232 tell us here ? All I want is mesh's rotation in (angle, x,y, z) format (where x,y,z is axis around which rotation is to be made, according to raytracer specification) Here I have figured out the angle part. Only this x,y,z is mystery . I read the link you gave. But I am still not able to get how to I get the rotation axis x,y,z . Quote Link to comment Share on other sites More sharing options...
jerome Posted May 18, 2015 Share Posted May 18, 2015 okIn BJS, mesh.rotation.x, y, z are properties valuing the mesh rotation around its local x, y, z axis (y first, then x, finally z) not around a given other axis.These values are expressed in radians, not degrees. These are Euler angles. The mesh orientation expression with only an axis and an angle around this axis is quite a quaternion expression.It's possible to convert from an expression to the other : http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_anglesThere are converting tools in BJS also. I don't know what properties are valued when you import a mesh from 3D max.I didn't understand what were the values you got and know after importation (mesh.rotation ?).Maybe someone working with 3D max could tell us what mesh rotation values are imported with. Quote Link to comment Share on other sites More sharing options...
dsman Posted May 18, 2015 Author Share Posted May 18, 2015 Ok. So based on DBWel 's answer at http://www.html5gamedevs.com/topic/14349-meshrebase/?p=82414 and Radian to degree conversion ( http://www.rapidtables.com/convert/number/radians-to-degrees.htm ) I have figured it out in this way : currentmesh.getWorldMatrix().decompose(scale, rot, trans); preangle = Math.acos(rot.w) * 2 ; if (angle == 0) sin = 1; else sin = Math.sin(preangle / 2);rotx = rot.x / sin; // rotation axis x-coordinateroty = rot.y / sin; // rotation axis y-coordinaterotz = rot.z / sin; // rotation axis z-coordinateangle = preangle * 180 / Math.PI ; // final angle in degree Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.