2828import lombok .experimental .UtilityClass ;
2929import net .minecraft .util .Mth ;
3030import org .joml .Matrix4f ;
31- import org .joml .Vector3f ;
3231import org .joml .Vector3fc ;
33- import org .joml .Vector4f ;
3432
3533import java .util .List ;
3634
@@ -119,18 +117,22 @@ public static float getWeatherAlpha(List<Weather> weatherConditions, float rainS
119117 // See https://github.com/sp614x/optifine/issues/7235#issuecomment-1581930719
120118 public static void rotate (final Matrix4f pose , final float angle , final Vector3fc axis ) {
121119 // Quaternion fields
122- final Vector4f q = new Vector4f (axis .mul (Mth .sin (angle * 0.5F ), new Vector3f ()), Mth .cos (angle * 0.5F ));
120+ float q_sin = Mth .sin (angle * 0.5F );
121+ float q_x = axis .x () * q_sin ;
122+ float q_y = axis .y () * q_sin ;
123+ float q_z = axis .z () * q_sin ;
124+ float q_w = Mth .cos (angle * 0.5F );
123125
124126 // Matrix4f/Matrix3f fields
125- float m_xFactor = 2.0F * q . x * q . x ;
126- float m_yFactor = 2.0F * q . y * q . y ;
127- float m_zFactor = 2.0F * q . z * q . z ;
128- float m_xy = q . x * q . y ;
129- float m_yz = q . y * q . z ;
130- float m_zx = q . z * q . x ;
131- float m_xw = q . x * q . w ;
132- float m_yw = q . y * q . w ;
133- float m_zw = q . z * q . w ;
127+ float m_xFactor = 2.0F * q_x * q_x ;
128+ float m_yFactor = 2.0F * q_y * q_y ;
129+ float m_zFactor = 2.0F * q_z * q_z ;
130+ float m_xy = q_x * q_y ;
131+ float m_yz = q_y * q_z ;
132+ float m_zx = q_z * q_x ;
133+ float m_xw = q_x * q_w ;
134+ float m_yw = q_y * q_w ;
135+ float m_zw = q_z * q_w ;
134136 float m_m00 = 1.0F - m_yFactor - m_zFactor ;
135137 float m_m01 = 2.0F * (m_xy - m_zw );
136138 float m_m02 = 2.0F * (m_zx + m_yw );
@@ -142,17 +144,17 @@ public static void rotate(final Matrix4f pose, final float angle, final Vector3f
142144 float m_m22 = 1.0F - m_xFactor - m_yFactor ;
143145
144146 // Multiply pose matrix
145- pose .m00 (m_m00 * pose .m00 () + m_m01 * pose .m10 () + m_m02 * pose .m20 ())
146- .m01 (m_m00 * pose .m01 () + m_m01 * pose .m11 () + m_m02 * pose .m21 ())
147- .m02 (m_m00 * pose .m02 () + m_m01 * pose .m12 () + m_m02 * pose .m22 ())
148- .m03 (m_m00 * pose .m03 () + m_m01 * pose .m13 () + m_m02 * pose .m23 ())
149- .m10 (m_m10 * pose .m00 () + m_m11 * pose .m10 () + m_m12 * pose .m20 ())
150- .m11 (m_m10 * pose .m01 () + m_m11 * pose .m11 () + m_m12 * pose .m21 ())
151- .m12 (m_m10 * pose .m02 () + m_m11 * pose .m12 () + m_m12 * pose .m22 ())
152- .m13 (m_m10 * pose .m03 () + m_m11 * pose .m13 () + m_m12 * pose .m23 ())
153- .m20 (m_m20 * pose .m00 () + m_m21 * pose .m10 () + m_m22 * pose .m20 ())
154- .m21 (m_m20 * pose .m01 () + m_m21 * pose .m11 () + m_m22 * pose .m21 ())
155- .m22 (m_m20 * pose .m02 () + m_m21 * pose .m12 () + m_m22 * pose .m22 ())
156- .m23 (m_m20 * pose .m03 () + m_m21 * pose .m13 () + m_m22 * pose .m23 ());
147+ pose .m00 (m_m00 * pose .m00 () + m_m01 * pose .m10 () + m_m02 * pose .m20 ());
148+ pose .m01 (m_m00 * pose .m01 () + m_m01 * pose .m11 () + m_m02 * pose .m21 ());
149+ pose .m02 (m_m00 * pose .m02 () + m_m01 * pose .m12 () + m_m02 * pose .m22 ());
150+ pose .m03 (m_m00 * pose .m03 () + m_m01 * pose .m13 () + m_m02 * pose .m23 ());
151+ pose .m10 (m_m10 * pose .m00 () + m_m11 * pose .m10 () + m_m12 * pose .m20 ());
152+ pose .m11 (m_m10 * pose .m01 () + m_m11 * pose .m11 () + m_m12 * pose .m21 ());
153+ pose .m12 (m_m10 * pose .m02 () + m_m11 * pose .m12 () + m_m12 * pose .m22 ());
154+ pose .m13 (m_m10 * pose .m03 () + m_m11 * pose .m13 () + m_m12 * pose .m23 ());
155+ pose .m20 (m_m20 * pose .m00 () + m_m21 * pose .m10 () + m_m22 * pose .m20 ());
156+ pose .m21 (m_m20 * pose .m01 () + m_m21 * pose .m11 () + m_m22 * pose .m21 ());
157+ pose .m22 (m_m20 * pose .m02 () + m_m21 * pose .m12 () + m_m22 * pose .m22 ());
158+ pose .m23 (m_m20 * pose .m03 () + m_m21 * pose .m13 () + m_m22 * pose .m23 ());
157159 }
158160}
0 commit comments