c# - 查看距剖切面一定距离的剖面
问题描述
我正在尝试创建剪切平面以在 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
解决方案
如果您只想查看几何的一部分,则必须定义两个剪切平面。一个在该部分的开头,一个在该部分的末尾。在下文中start
并to
定义了该部分的范围。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
在建立平面方程时是倒置的。
推荐阅读
- javascript - 有什么区别,什么更好用:工厂函数与构造函数。请推理您的方法,以便我学习
- flutter - 无法从 sharedPrefrence 中获取数据列表
- java - 以最佳方式处理 api 响应
- typescript - Rollupjs 不会捆绑所有文件
- html - 如何设置输入类型=“范围”的样式
- c - 如何在两个远程主机上运行 UDP 客户端和服务器(用 C 语言)?
- ruby - 如何解决无法加载此类文件 openssl 错误?
- selenium - 页面刷新后要求逻辑避免“StaleElementReferenceException”
- symfony - Symfony Form CollectionType 数组验证
- latex - 为什么在背面我错过了表格中的垂直边缘?