Can someone explain what the “toMatrix” part of this code is doing? It’s
python. Don’t know where the “toMatrix” function came from but I’m
trying to update an old blender script.
e1=Mathutils.Euler([obj.RotX, obj.RotY, obj.RotZ])
cam_vec=Vector([obj.LocX, obj.LocY, obj.LocZ])
target= Mathutils.VecMultMat(cam_vec, e2)
Oh, duh, it came from mathutils. I was using a different euler
function. Why to a matrix, though? I suppose because they want to end up
with a matrix. Ok, so the rotation is one line of the matrix, right?
which one? and will that work if I get those numbers from the matrix? I
think the matrix is 4 across. There isn’t a obj.RotX anymore that I can
edit: there is an object.rotation_euler which gives 3 numbers. It seems
repetitive, but it should work.
Hate 3d math.
Please log in or register to post a reply.
The euler angles aren’t going to be in one line of the matrix, no. The
matrix will be made by multiplying together an X rotation, a Y rotation,
and a Z rotation, each of which is made of some sin/cos factors in
They’re converting the euler angles to a matrix so they can apply the
rotation to cam_vec.
So an x rotation isn’t a single float number?
obj.rotation_euler returns Euler((0.0,0.0,0.0),’XYZ’) I think that’s
the new way to get rotation as there is no object.rotx that I can
Would I be able to use those numbers for the mathUtil.
Euler(Xrot,Yrot,Zrot) so I can call the e1.toMatrix function?
That doesn’t work anyway. It says a Euler object doesn’t have a
OK, they changed the function to “to_matrix()”
but is my logic wrong, or are they talking about something else? The
Euler function takes 3 numbers. I saw the rotationx cosine/ whatever
matrix you were talking about also. I thought there was a rotation row
on a 3X3 matrix or 3X4 whatever the euler matrix was.
An x rotationmatrixisn’t a single number, no. It has the sine and
cosine of the angle in it. There’s no simple relationship between Euler
angles and the components of a general rotation matrix. The formulas to
convert are pretty yucky, but you can find them online.
I don’t know Blender, but if the object has a rotation_euler property
then that’s probably the RotX, RotY, RotZ you’re looking for, just
stored as a vector instead of 3 separate values. I don’t know about the
toMatrix() function, that’s something from Blender’s math library.
Probably it just got renamed or moved to a different object or
Yeah, it was renamed. I’m pretty sure I have the replacements and it
should work however it was meant to.
Blender generally stores all transformations as a matrix internally, so
these operations are in fact converting from a matrix to euler, and then
back into a matrix again (eww). There are some exceptions, for example
when you do keyframe animations you can decide what data format is used.
Nevertheless, always fetch the transformation matrices from Blender
directly. If you look at Blender’s docs for
you’ll see they have a few matrices for you to use. matrix_basis,
matrix_local, matrix_world, etc.
The problem is I don’t understand what they are doing so I’d probably
screw it up. This isn’t anything overly difficult. It only getting the
floor, camera, and lights for a 2.5d game. If it absolutely does not
work when I translate, I’ll have to understand it.