private void renderMesh(Assimp.Matrix4x4 matrix, List <int> meshindices) { Matrix3D _ObjectToWorld; Matrix3D _WorldToObject; Matrix3D _MatrixV; Matrix3D _matrix_projection; Matrix3D _MatrixVP; Matrix3D _MatrixInvV; Matrix3D m = Matrix3D.Identity; Matrix3D mt = new Matrix3D( matrix[1, 1], matrix[1, 2], matrix[1, 3], matrix[1, 4], matrix[2, 1], matrix[2, 2], matrix[2, 3], matrix[2, 4], matrix[3, 1], matrix[3, 2], matrix[3, 3], matrix[3, 4], matrix[4, 1], matrix[4, 2], matrix[4, 3], matrix[4, 4] ); //mt.transpose(); //m.append(mt); //time = 0.096f; float angle = time * 3.14f / 2; //angle = 0.32656005f; //m.appendRotation(angle, Vector3.X_AXIS); m.appendRotation(angle, Vector3.Y_AXIS); //m.appendScale(Mathf.sin(1), 1, 2); _ObjectToWorld = m; _WorldToObject = m.getInvert(); Vector4 camerpos = new Vector4(0, 0, -3.3f, 1); Matrix3D mcamera = Matrix3D.Identity.appendRotation(angle, Vector3.Y_AXIS); //camerpos = camerpos * mcamera; var camera = Matrix3D.lookAtLH(camerpos.x, camerpos.y, camerpos.z, 0f, 0f, 0, 0, 1, 0); _MatrixV = camera; _MatrixInvV = _MatrixV.getInvert(); var perspective = Matrix3D.perspectiveOffCenterLH(-1, 1, -1.0f * 600 / 800, 1.0f * 600 / 800, 2f, 50f); _matrix_projection = perspective; _MatrixVP = _MatrixV.append(perspective); context3D.setProgramConstants_Matrices(_ObjectToWorld, _WorldToObject, camera, _matrix_projection, _MatrixVP, _MatrixInvV, true); context3D.setProgramVariables(camerpos); for (int i = 0; i < meshindices.Count; i++) { context3D.bindVertexBuffer(lst_vertexes[meshindices[i]]); context3D.drawTriangles(lst_indexList[meshindices[i]]); } }