-
June 29th, 2020, 03:59 PM
#1
Math 3D: how rotate the 3D vectors?
how can i rotate the 3D axis?
i have these 2 functions(i must convert degrees to radians)(forget been VB6 code.. i just need rotate from player position):
Code:
Private Function ConvertDegreesToRadians(Rotation As Angle3D) As Angle3D
Dim deg2Rad As Double
deg2Rad = Pi / 180
ConvertDegreesToRadians.X = Rotation.X * deg2Rad
ConvertDegreesToRadians.Y = Rotation.Y * deg2Rad
ConvertDegreesToRadians.Z = Rotation.Z * deg2Rad
End Function
Private Function Rotate(Position As Position3D, Rotation As Angle3D, PositionRotated As Position3D) As Position3D
Dim ConvertedPosition As Position3D
Dim RotationInRads As Angle3D
'Convert degrees to Radians
'Rotation works on Radians
RotationInRads = ConvertDegreesToRadians(Rotation)
'Convert the actual position to zero or player position, using the rotation position:
ConvertedPosition = Position
ConvertedPosition.X = Position.X - PositionRotated.X
ConvertedPosition.Y = -(PositionRotated.Y - Position.Y) 'reversed because Y increments down
ConvertedPosition.Z = Position.Z - PositionRotated.Z
'Rotate the position, but the Z axis must be the 1st:
Dim T As Position3D
'Z axis (Roll)
T = ConvertedPosition
ConvertedPosition.X = T.X * Cos(RotationInRads.Z) - T.Y * Sin(RotationInRads.Z)
ConvertedPosition.Y = T.X * Sin(RotationInRads.Z) + T.Y * Cos(RotationInRads.Z)
'X axis (Pitch)
T = ConvertedPosition
ConvertedPosition.Y = T.Y * Cos(RotationInRads.X) - T.Z * Sin(RotationInRads.X)
ConvertedPosition.Z = T.Y * Sin(RotationInRads.X) + T.Z * Cos(RotationInRads.X)
'Y axis (Yaw)
T = ConvertedPosition
ConvertedPosition.X = T.Z * Sin(RotationInRads.Y) + T.X * Cos(RotationInRads.Y)
ConvertedPosition.Z = T.Z * Cos(RotationInRads.Y) - T.X * Sin(RotationInRads.Y)
'Convert to the rotated original position:
ConvertedPosition.X = ConvertedPosition.X + PositionRotated.X
ConvertedPosition.Y = ConvertedPosition.Y + PositionRotated.Y
ConvertedPosition.Z = ConvertedPosition.Z + PositionRotated.Z
'Convert to Camera Coordinates\Position:
'ConvertedPosition.X = ConvertedPosition.X + camera1.Position.X
'ConvertedPosition.Y = ConvertedPosition.Y + camera1.Position.Y
'ConvertedPosition.Z = ConvertedPosition.Z + camera1.Position.Z
Rotate = ConvertedPosition
End Function
when i do the rotation, some vectors can be much more far away and sometimes i get a wrong draw:
https://imgur.com/ZeV7Oii
is the rotation correct? i think that these calculation isn't correct
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|