首页 > 解决方案 > 查看距剖切面一定距离的剖面

问题描述

我正在尝试创建剪切平面以在 opentk glControl 中定义对象的不同点处的部分,为此我定义了一个变量“elevActual”,该变量指示将创建剪切平面的距离。通过单击一个按钮,我可以推进我的剪裁平面。问题是随着剪切平面的前进,剪切平面后面的对象仍然显示,我只希望显示在“elevActual”距离处定义的部分。

double[] Elevyz = new double[] { -1, 0, 0, ElevActual };
        // Definir planos de recorte YZ
        if (tipVista == 2)// this indicate is in YZ plans
        {
            GL.PushMatrix();
            GL.ClipPlane(ClipPlaneName.ClipPlane2, Elevyz);
            GL.Enable(EnableCap.ClipPlane2);
        }
        ...
        GL.Disable(EnableCap.ClipDistance2);
        GL.PopMatrix();// Cierre de la funcion de plano de corte

标签: c#openglopentk

解决方案


如果您只想查看几何的一部分,则必须定义两个剪切平面。一个在该部分的开头,一个在该部分的末尾。在下文中startto定义了该部分的范围。start必须小于end

double[] Elevyz_start = new double[] {  1, 0, 0, -start };
double[] Elevyz_end   = new double[] { -1, 0, 0, end };

GL.ClipPlane(ClipPlaneName.ClipPlane2, Elevyz_end);
GL.Enable(EnableCap.ClipPlane2);

GL.ClipPlane(ClipPlaneName.ClipPlane5, Elevyz_start);
GL.Enable(EnableCap.ClipPlane5);

剪切平面的最大数量保证至少为 6 个。GL_MAX_CLIP_PLANES分别参见glClipPlane
剪裁平面的参数被解释为平面方程。平面方程的前 3 个分量是剪切平面的法向量。第 4 个分量是到原点的距离。因此,距离的符号取决于法向量上的方向。因此,start在建立平面方程时是倒置的。


推荐阅读