public static void DrawLines(Line <Vector3>[] lines, ref Matrix4 mvp, ref Color4 color, float width = 1.0f) { GL.LineWidth(width); lineShader.UseShader(); lineShader.SetParameter(lineShader.loc_color, ref color); foreach (var l in lines) { var v = l.to - l.from; var len = v.Length; if (len == 0.0f) { continue; } var angle = Vector3.CalculateAngle(Vector3.UnitZ, l.to - l.from); var axis = Vector3.Cross(Vector3.UnitZ, v).Normalized(); var rot = Matrix4.CreateFromAxisAngle(axis, angle); var scale = Matrix4.CreateScale(len); var trans = Matrix4.CreateTranslation(l.from); var m = scale * rot * trans * mvp; lineShader.SetParameter(lineShader.loc_mvp, ref m, false); DrawSubMesh(lineMesh.subMeshes[0]); } lineShader.UnuseShader(); }