Я опишу Передаешь в шейдер точку (центр площади отсечения) и нормализованный вектор (нормаль плоскости отсечения) В вертексном шейдере находишь позицию точки в мировом пространстве, находишь ее позицию относительно секущей плоскости, и, если она пересекает ее - сплющиваешь о плоскость.
На примере unity вместо o.vertex = UnityObjectToClipPos(v.vertex); делаем o.vertex = mul(UNITY_MATRIX_M, v.vertex); // находим точку в мировом пространстве if (o.vertex.y > 0) // если точка пересекает плоскость (простой пример) o.vertex.y = 0; // плющим ее o.vertex = mul(UNITY_MATRIX_VP, o.vertex); // домнажаем на проекционно-видовую матрицу, чтобы найти положение точки на экране.
Комментарий недоступен
Комментарий недоступен
Блин а чо без кода то
Интересно. Реализацию подробнее опишешь?
Я опишу
Передаешь в шейдер точку (центр площади отсечения) и нормализованный вектор (нормаль плоскости отсечения)
В вертексном шейдере находишь позицию точки в мировом пространстве, находишь ее позицию относительно секущей плоскости, и, если она пересекает ее - сплющиваешь о плоскость.
На примере unity
вместо
o.vertex = UnityObjectToClipPos(v.vertex);
делаем
o.vertex = mul(UNITY_MATRIX_M, v.vertex); // находим точку в мировом пространстве
if (o.vertex.y > 0) // если точка пересекает плоскость (простой пример)
o.vertex.y = 0; // плющим ее
o.vertex = mul(UNITY_MATRIX_VP, o.vertex); // домнажаем на проекционно-видовую матрицу, чтобы найти положение точки на экране.
Возможно позже, после того как с работой разберусь :)
Комментарий недоступен