Orientation converting to local Axis for some reason?!

block.CFrame = CFrame.new(endPos) * CFrame.Angles(math.rad(block.OrientationVal.Value.X), math.rad(block.OrientationVal.Value.Y), math.rad(block.OrientationVal.Value.Z))

If OrientationVal = 90, 90, 0 then the parts orientation is 0, 90, 90 for some reason, and then if i set it to 90,270,0 the part is at 0, -90, -90, so it seems that parts are turning in a relative axis.

1 Like

Use CFrame.fromOrientation. CFrame.Angles is different.

They’re actually exactly the same.

I recommend against CFrame.Angles though, I would recommend using the CFrame matrix where possible.

local newAngleCFrame = someCFrame
local newPosCFrame = CFrame.new(endPos)
block.CFrame = CFrame.new(endPos.X, endPos.Y, endPos.Z, select(4, newAngleCFrame:components()))

No, they are different enough to have a chance of producing errors within code with unintentional results.

1 Like

You’re correct. I had to test it since they didn’t seem to mention the method directly in the info you shared. I’ll submit a request to fix the documentation later. Thanks for the info.

I still advise against it though. Gimbal lock and all that.

Ok, I am going to try that :shark:

CFrame.Angles and CFrame.fromOrientation both suffer from gimbal lock

The difference between Angles and fromOrientation is that angles applies it X then Y then Z which can cause problems because most people think of angles (and its usually more useful) as being applied in the Y then X then Z order

The “orientation” property functions the same as the Y X Z or fromOrientation order while the rotation property is applied in the normal X Y Z order

90,90,0 applied in XYZ order would look like: pitch up 90 degrees then yaw over 90
You can see this results in an orientation value of 0,90,90 simply because euler angles suck
Applying the angles in the order of Y X Z manually you see you get the intended results

Unless you want to learn quaternions you’re probably gonna have to deal with these annoying euler angle problems so Itd be best to familiarize yourself with them

I use neither quaternions nor Euler if I can help it, I use Roblox’s impressive CFrame functions (fromAxisAngle anyone?) and let them take care of it for me. But my issue is that the developer hub says the two functions do the same thing, which as I learned is definitely wrong.

Edit: Oh right, I froget that fromEulerAnglesYZX is a thing and I mis-read it. This is all on me then. smh