It's happen that it transform my cube in single line. But now I found a new thing: the repere change by do this algo:
Translate_object -> Rotate_object -> Repere_object
And it give:
copy_coord_x4: dd 0, 0, 0, 0 ; - p1
dd 0, 0, 0, 0 ; - p2
dd 0, 0, 0, 0 ; - p3
dd 0, 0, 0, 0 ; - p4
moveobject_tmp:
translate_mat: dd 0, 0, 0, 0 ; x, y, z
rotate_mat: dd 0, 0, 0, 0 ; x, y, z
repere_mat: dd 0, 0, 0, 0 ; x, y, z
dd 0, 0, 0, 0
permut_dword: dd 1, 0, 3, 2 ; - p1
dd 5, 4, 7, 6 ; - p2
; X-axe:
rotate_x_yz: dd 0, 0, 0, 0 ; y, z, 2y, 2z
dd 0, 0, 0, 0 ; 3y, 3z, 4y, 4z
rotate_x_zy: dd 0, 0, 0, 0 ; z, y, 2z, 2y
dd 0, 0, 0, 0 ; 3z, 3y, 4z, 4y
; Y-axe:
dd 0
rotate_y_zx: dd 0, 0, 0, 0 ; z, x, 2z, 2x
dd 0, 0, 0, 0 ; 3z, 3x, 4z, 4x
rotate_y_xz: dd 0, 0, 0, 0 ; x, z, 2x, 2z
dd 0, 0, 0, 0 ; 3x, 3z, 4x, 4z
; Z-axe:
dd 0
rotate_z_xy: dd 0, 0, 0, 0 ; x, y, 2x, 2y
dd 0, 0, 0, 0 ; 3x, 3y, 4x, 4y
rotate_z_yx: dd 0, 0, 0, 0 ; y, x, 2y, 2x
dd 0, 0, 0, 0 ; 3y, 3x, 4y, 4x
; Manage translation
vmovups xmm0, [translate_mat]
vaddps xmm0, [r8 + OBJ_3D_PROP_POSITION]
vmovups [r8 + OBJ_3D_PROP_POSITION], xmm0
; Manage repere
vmovups xmm0, [repere_mat]
vaddps xmm0, [r8 + OBJ_3D_PROP_REPERE]
vmovups [r8 + OBJ_3D_PROP_REPERE], xmm0
call reset_angle
; Manage rotation
vmovups xmm0, [rotate_mat]
vaddps xmm0, [r8 + OBJ_3D_PROP_ANGLE]
vmovups [r8 + OBJ_3D_PROP_ANGLE], xmm0
vmovups [fsincosps_angle], xmm0
call fsincosps
; Duplicate cos(x)
vbroadcastss ymm0, [fsincosps_cos + _1x]
; Duplicate cos(y)
vbroadcastss ymm1, [fsincosps_cos + _1y]
; Duplicate cos(z)
vbroadcastss ymm2, [fsincosps_cos + _1z]
; Duplicate sin(x)
vbroadcastss ymm3, [fsincosps_sin + _1x]
; Duplicate sin(y)
vbroadcastss ymm4, [fsincosps_sin + _1y]
; Duplicate sin(z)
vbroadcastss ymm5, [fsincosps_sin + _1z]
vbroadcastf128 ymm6, [r8 + OBJ_3D_PROP_POSITION]
vbroadcastf128 ymm7, [r8 + OBJ_3D_PROP_REPERE]
;======================================================================================================================================================================================
;FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION
;======================================================================================================================================================================================
object_translate:
vaddps ymm8, ymm6, [rsi]
vmovups [copy_coord_x4], ymm8
vaddps ymm8, ymm6, [rsi + _3x]
vmovups [copy_coord_x4 + _3x], ymm8
;======================================================================================================================================================================================
;END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION
;======================================================================================================================================================================================
;======================================================================================================================================================================================
;FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION
;======================================================================================================================================================================================
; object_rotate:
; On applique la rotation au point |[rsi + _1x]
; |[rsi + _1y]
; |[rsi + _1z]
; |[rsi + _1color] .Unmodified
; |[rsi + _2x]
; |[rsi + _2y]
; |[rsi + _2z]
; |[rsi + _2color] .Unmodified
; |[rsi + _3x]
; |[rsi + _3y]
; |[rsi + _3z]
; |[rsi + _3color] .Unmodified
; |[rsi + _4x]
; |[rsi + _4y]
; |[rsi + _4z]
; |[rsi + _4color] .Unmodified
object_rotate:
;=============
; pitch
;=============
Pitch: ; x
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;-------------------------------------------------------;;
;; ;;
;;-------------------------------------------------------;;
;; X-axe ;;
;; 1y' = (1y * cos(phi_x)) - (1z * sin(phi_x)) ;; 1 0
;; 1z' = (1z * cos(phi_x)) + (1y * sin(phi_x)) ;; 2 4
;; 2y' = (2y * cos(phi_x)) - (2z * sin(phi_x)) ;; 3 8
;; 2z' = (2z * cos(phi_x)) + (2y * sin(phi_x)) ;; 4 12
;; 3y' = (3y * cos(phi_x)) - (3z * sin(phi_x)) ;; 5 16
;; 3z' = (3z * cos(phi_x)) + (3y * sin(phi_x)) ;; 6 20
;; 4y' = (4y * cos(phi_x)) - (4z * sin(phi_x)) ;; 7 24
;; 4z' = (4z * cos(phi_x)) + (4y * sin(phi_x)) ;; 8 28
;; ;;
;; 1y = 1y' 3y = 3y' ;;
;; 1z = 1z' 3z = 3z' ;;
;; 2y = 2y' 4y = 4y' ;;
;; 2z = 2z' 4z = 4z' ;;
;;-------------------------------------------------------;;
;; ;;
;;-------------------------------------------------------;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Prepare data
; Store i = 0::Loop(i <= 4 , j <= 8){ ymm = iY; j++; ymm = iZ; i++; j++;}
vmovlps xmm8, [copy_coord_x4 + _1y]
vmovlps xmm9, [copy_coord_x4 + _2y]
vmovlps xmm10, [copy_coord_x4 + _3y]
vmovlps xmm11, [copy_coord_x4 + _4y]
vmovlps [rotate_x_yz + 0], xmm8
vmovlps [rotate_x_yz + 8], xmm9
vmovlps [rotate_x_yz + 16], xmm10
vmovlps [rotate_x_yz + 24], xmm11
; Store i = 0::Loop(i <= 4 , j <= 8){ ymm = iZ; j++; ymm = iY; i++; j++;}
; AVX2 requirement
; vmovups ymm9, [permut_dword]
; vpermps ymm9, ymm9, [rotate_x_yz]
; vmovups [rotate_x_zy], ymm9
vextractps dword [rotate_x_zy + 0], xmm8, 1 ; _1z
vmovss dword [rotate_x_zy + 4], xmm8 ; _1y
vextractps dword [rotate_x_zy + 8], xmm9, 1 ; _2z
vmovss dword [rotate_x_zy + 12], xmm9 ; _2y
vextractps dword [rotate_x_zy + 16], xmm10, 1 ; _3z
vmovss dword [rotate_x_zy + 20], xmm10 ; _3y
vextractps dword [rotate_x_zy + 24], xmm11, 1 ; _4z
vmovss dword [rotate_x_zy + 28], xmm11 ; _4y
; ymm8 ymm9
; y' = (y * cos(phi_x)) - (z * sin(phi_x))
; z' = (z * cos(phi_x)) + (y * sin(phi_x))
vmulps ymm8, ymm0, [rotate_x_yz] ; ymm8 * cos(x)
vmulps ymm9, ymm3, [rotate_x_zy] ; ymm9 * sin(x)
vaddsubps ymm8, ymm9
vmovups [temp256], ymm8
; y = y' ymm8
; z = z' ymm8
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;-------------------------------------------------------;;
;; ;;
;;-------------------------------------------------------;;
;; /X-axe ;;
;;-------------------------------------------------------;;
;; ;;
;;-------------------------------------------------------;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;=============
; / pitch
;=============
;=============
; yaw
;=============
Yaw: ; y
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;-------------------------------------------------------;;
;; ;;
;;-------------------------------------------------------;;
;; Y-axe ;;
;; End.1z = 1z' = (1z * cos(phi_y)) - (1x * sin(phi_y)) ;; 1 0
;; 1x' = (1x * cos(phi_y)) + (1z * sin(phi_y)) ;; 2 4
;; End.2z = 2z' = (2z * cos(phi_y)) - (2x * sin(phi_y)) ;; 3 8
;; 2x' = (2x * cos(phi_y)) + (2z * sin(phi_y)) ;; 4 12
;; End.3z = 3z' = (3z * cos(phi_y)) - (3x * sin(phi_y)) ;; 5 16
;; 3x' = (3x * cos(phi_y)) + (3z * sin(phi_y)) ;; 6 20
;; End.4z = 4z' = (4z * cos(phi_y)) - (4x * sin(phi_y)) ;; 7 24
;; 4x' = (4x * cos(phi_y)) + (4z * sin(phi_y)) ;; 8 28
;; ;;
;; 1x = 1x' ;;
;; 2x = 2x' ;;
;; 3x = 3x' ;;
;; 4x = 4x' ;;
;;-------------------------------------------------------;;
;; ;;
;;-------------------------------------------------------;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Prepare data
vmovss xmm9, [copy_coord_x4 + _1x]
vmovss xmm10, [copy_coord_x4 + _2x]
vmovss xmm11, [copy_coord_x4 + _3x]
vmovss xmm12, [copy_coord_x4 + _4x]
; Store i = 0::Loop(i <= 4 , j <= 8){ ymm = iZ; j++; ymm = iX; i++; j++;}
vmovups [rotate_y_zx - 4], ymm8
vmovss [rotate_y_zx + 4], xmm9
vmovss [rotate_y_zx + 12], xmm10
vmovss [rotate_y_zx + 20], xmm11
vmovss [rotate_y_zx + 28], xmm12
; Store i = 0::Loop(i <= 4 , j <= 8){ ymm = iX; j++; ymm = iZ; i++; j++;}
; AVX2 requirement
; vmovups ymm9, [permut_dword]
; vpermps ymm9, ymm9, [rotate_y_zx]
; vmovups [rotate_y_xz], ymm9
vmovups [rotate_y_xz + 0], ymm8
vmovss [rotate_y_xz + 0], xmm9
vmovss [rotate_y_xz + 8], xmm10
vmovss [rotate_y_xz + 16], xmm11
vmovss [rotate_y_xz + 24], xmm12
; ymm8 ymm9
; z' = (z * cos(phi_y)) - (x * sin(phi_y))
; x' = (x * cos(phi_y)) + (z * sin(phi_y))
vmulps ymm8, ymm1, [rotate_y_zx] ; ymm8 * cos(y)
vmulps ymm9, ymm4, [rotate_y_xz] ; ymm9 * sin(y)
vaddsubps ymm8, ymm9
; x = x' xmm3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;-------------------------------------------------------;;
;; ;;
;;-------------------------------------------------------;;
;; /Y-axe ;;
;;-------------------------------------------------------;;
;; ;;
;;-------------------------------------------------------;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;=============
; / yaw
;=============
;=============
; roll
;=============
Roll: ; z
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;-------------------------------------------------------;;
;; ;;
;;-------------------------------------------------------;;
;; Z-axe ;;
;; End.1x = 1x' = (1x * cos(phi_z)) - (1y * sin(phi_z)) ;; 1 0
;; End.1y = 1y' = (1y * cos(phi_z)) + (1x * sin(phi_z)) ;; 2 4
;; End.2x = 2x' = (2x * cos(phi_z)) - (2y * sin(phi_z)) ;; 3 8
;; End.2y = 2y' = (2y * cos(phi_z)) + (2x * sin(phi_z)) ;; 4 12
;; End.3x = 3x' = (3x * cos(phi_z)) - (3y * sin(phi_z)) ;; 5 16
;; End.3y = 3y' = (3y * cos(phi_z)) + (3x * sin(phi_z)) ;; 6 20
;; End.4x = 4x' = (4x * cos(phi_z)) - (4y * sin(phi_z)) ;; 7 24
;; End.4y = 4y' = (4y * cos(phi_z)) + (4x * sin(phi_z)) ;; 8 28
;;-------------------------------------------------------;;
;; ;;
;;-------------------------------------------------------;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Prepare data
vmovss xmm9 , [temp256]
vmovss xmm10 , [temp256 + 8]
vmovss xmm11 , [temp256 + 16]
vmovss xmm12, [temp256 + 24]
; Store i = 0::Loop(i <= 4 , j <= 8){ ymm = iX; j++; ymm = iY; i++; j++;}
vmovups [rotate_z_xy - 4], ymm8
vmovss [rotate_z_xy + 4], xmm9
vmovss [rotate_z_xy + 12], xmm10
vmovss [rotate_z_xy + 20], xmm11
vmovss [rotate_z_xy + 28], xmm12
; Store i = 0::Loop(i <= 4 , j <= 8){ ymm = iY; j++; ymm = iX; i++; j++;}
vmovups [rotate_z_yx + 0], ymm8
vmovss [rotate_z_yx + 0], xmm9
vmovss [rotate_z_yx + 8], xmm10
vmovss [rotate_z_yx + 16], xmm11
vmovss [rotate_z_yx + 24], xmm12
; Save z
vmovss [rbx + _1z], xmm8
vextractps [rbx + _2z], xmm8, 2
vextractf128 xmm8, ymm8, 1
vmovss [rbx + _3z], xmm8
vextractps [rbx + _4z], xmm8, 2
; ymm8 ymm9
; x' = (x * cos(phi_z)) - (y * sin(phi_z))
; y' = (y * cos(phi_z)) + (x * sin(phi_z))
vmulps ymm8, ymm2, [rotate_z_xy] ; ymm8 * cos(z)
vmulps ymm9, ymm5, [rotate_z_yx] ; ymm9 * sin(z)
vaddsubps ymm8, ymm9
; Save x y
vmovsd [rbx + _1x], xmm8
vpextrq [rbx + _2x], xmm8, 2
vextractf128 xmm8, ymm8, 1
vmovsd [rbx + _3x], xmm8
vpextrq [rbx + _4x], xmm8, 2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;-------------------------------------------------------;;
;; ;;
;;-------------------------------------------------------;;
;; /Z-axe ;;
;;-------------------------------------------------------;;
;; ;;
;;-------------------------------------------------------;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;=============
; / roll
;=============
end_object_rotate:
; ret
;======================================================================================================================================================================================
;END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION
;======================================================================================================================================================================================
;======================================================================================================================================================================================
;FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION FUNCTION
;======================================================================================================================================================================================
object_repere:
vaddps ymm8, ymm7, [rbx]
vmovups [rbx], ymm8
vaddps ymm8, ymm7, [rbx + _3x]
vmovups [rbx + _3x], ymm8
;======================================================================================================================================================================================
;END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION END_FUNCTION
;======================================================================================================================================================================================
vmovss xmm8, [rsi + _1color]
vmovss xmm9, [rsi + _2color]
vmovss xmm10, [rsi + _3color]
vmovss xmm11, [rsi + _4color]
vmovss [rbx + _1color], xmm8
vmovss [rbx + _2color], xmm9
vmovss [rbx + _3color], xmm10
vmovss [rbx + _4color], xmm11