public static void rotate(float angle, Vertex3f axis, Matrix4f src, ref Matrix4f dest) { Matrix4f rotationMatrix = new Matrix4f(); rotationMatrix.SetIdentity(); float[] matbuffer = rotationMatrix.Buffer; if (axis.x != 0) { matbuffer[5] = (float)Math.Cos(angle); matbuffer[6] = (float)-Math.Sin(angle); matbuffer[9] = (float)Math.Sin(angle); matbuffer[10] = (float)Math.Cos(angle); } else if (axis.y != 0) { matbuffer[0] = (float)Math.Cos(angle); matbuffer[2] = (float)Math.Sin(angle); matbuffer[8] = (float)-Math.Sin(angle); matbuffer[10] = (float)Math.Cos(angle); } else if (axis.z != 0) { matbuffer[0] = (float)Math.Cos(angle); matbuffer[1] = (float)-Math.Sin(angle); matbuffer[4] = (float)Math.Sin(angle); matbuffer[5] = (float)Math.Cos(angle); } // apply rotation to src matrix Matrix tempmat = (Matrix) new Matrix(matbuffer, 4, 4).Multiply(src); // set dest matrix to the rotated matrix dest = new Matrix4f(tempmat.Buffer); }
public static void scale(Vertex3f vector, Matrix4f src, ref Matrix4f dest) { Matrix4f scalerMatrix = new Matrix4f(); scalerMatrix.SetIdentity(); float[] matbuffer = scalerMatrix.Buffer; matbuffer[0] = vector.x; matbuffer[5] = vector.y; matbuffer[10] = vector.z; Matrix tempmat = (Matrix) new Matrix(matbuffer, 4, 4).Multiply(src); dest = new Matrix4f(tempmat.Buffer); }
public static void translate(Vertex3f translation, Matrix4f src, out Matrix4f des) { Matrix4f translationMatrix = new Matrix4f(); translationMatrix.SetIdentity(); float[] matbuffer = translationMatrix.Buffer; matbuffer[12] = translation.x; matbuffer[13] = translation.y; matbuffer[14] = translation.z; Matrix tempmat = (Matrix) new Matrix(matbuffer, 4, 4).Multiply(src); des = new Matrix4f(tempmat.Buffer); }