Я хочу нарисовать линию, где объект пересекает плоскость, в шейдере фрагмента.провести пересечение между объектом и плоскостью в фрагменте шейдера
Я передаю уравнение плоскости в шейдер фрагмента (a, b, c, d) и хочу нарисовать красным пересечение между моим объектом и этой однородной плоскостью.
Я хочу, чтобы ширина пересечения не будет всегда одинаково, независимо от того, сколько мы приближать
Сейчас я получаю расстояние от моего объекта на плоскости в пиксельный шейдер, как:.
// uPlane: vec4 where values are a.b.c.d (plane equation)
// vPos: wodlPosition of the fragment
vec4 prod = uPlane*vPos;
float distance = (prod.r + prod.g + prod.g + prod.a)/length(uPlane.xyz);
if(abs(distance) < 1.) {
gl_FragColor = vec4(1., 0., 0., .5);
} else {
gl_FragColor = vec4(0., 1., 0., .5);
}
Проблема с этим подходом заключается в том, что при увеличении/уменьшении масштаба «ширина» пересечения изменяется (см. Скриншоты ниже).
Какой был бы лучший способ нарисовать линию «2px width» на пересечении между моим объектом и плоскостью?
Одним из решений может быть каким-то образом проецировать положение фрагмента на плоскость, затем как-то вычислить координаты экрана проекции, затем сравнить координату экрана проекции с координатой экрана фрагмента и использовать эту информацию для рисования линии – Nicolas