Duplicates Blitz3D matrix results, with position, rotation, scale. The only thing I worry about is the intermediate quaternions could be wrong, and I don't have any way to test.
Global VectorX# Global VectorY# Global VectorZ# Global VectorW# Function VectorX#() Return VectorX# End Function Function VectorY#() Return VectorY# End Function Function VectorZ#() Return VectorZ# End Function Function VectorW#() Return VectorW# End Function Function EulerAsQuat(pitch#,yaw#,roll#) cr#=Cos(-roll#/2.0) cp#=Cos(pitch#/2.0) cy#=Cos(yaw#/2.0) sr#=Sin(-roll#/2.0) sp#=Sin(pitch#/2.0) sy#=Sin(yaw#/2.0) cpcy#=cp#*cy# spsy#=sp#*sy# spcy#=sp#*cy# cpsy#=cp#*sy# VectorW#=cr#*cpcy#+sr#*spsy# VectorX#=sr#*cpcy#-cr#*spsy# VectorY#=cr#*spcy#+sr#*cpsy# VectorZ#=cr#*cpsy#-sr#*spcy# End Function Graphics3D 640,480,16,2 p=CreatePivot() x#=1 y#=2 z#=3 pitch#=20 yaw#=60 roll#=10 scalex#=2 scaley#=1 scalez#=1 PositionEntity p,x,y,z RotateEntity p,pitch,yaw,roll ScaleEntity p,scalex,scaley,scalez Print GetMatElement(p,0,0)+", "+GetMatElement(p,0,1)+", "+GetMatElement(p,0,2) Print GetMatElement(p,1,0)+", "+GetMatElement(p,1,1)+", "+GetMatElement(p,1,2) Print GetMatElement(p,2,0)+", "+GetMatElement(p,2,1)+", "+GetMatElement(p,2,2) Print GetMatElement(p,3,0)+", "+GetMatElement(p,3,1)+", "+GetMatElement(p,3,2) EulerAsQuat(pitch,yaw,roll) qx#=VectorX() qy#=VectorY() qz#=VectorZ() qw#=VectorW() mat00#=(1.0-2.0*qx#*qx#-2.0*qz#*qz#)*scalex mat10#=-(2.0*qz#*qy#-2.0*qw#*qx#)*scaley mat20#=-(2.0*qx#*qy#+2.0*qw#*qz#)*scalez mat30#=x mat01#=-(2.0*qz#*qy#+2.0*qw#*qx#)*scalex mat11#=(1.0-2.0*qy#*qy#-2.0*qx#*qx#)*scaley mat21#=-(2.0*qw#*qy#-2.0*qx#*qz#)*scalez mat31#=y mat02#=(2.0*qw#*qz#-2.0*qx#*qy#)*scalex mat12#=(2.0*qx#*qz#+2.0*qw#*qy#)*scaley mat22#=(1.0-2.0*qz#*qz#-2.0*qy#*qy#)*scalez mat32#=z mat03#=0 mat13#=0 mat23#=0 mat33#=0 Print "" Print mat00#+", "+mat01#+", "+mat02# Print mat10#+", "+mat11#+", "+mat12# Print mat20#+", "+mat21#+", "+mat22# Print mat30#+", "+mat31#+", "+mat32# WaitKey