Отсечение модели в шейдере

Обычно на такие простые вещи "тратится" много математики. Реализовал "отсечение" вершин прямо в шейдере, как вам качество отсечения? :)

6161

Интересно. Реализацию подробнее опишешь?

2
Ответить

Я опишу
Передаешь в шейдер точку (центр площади отсечения) и нормализованный вектор (нормаль плоскости отсечения)
В вертексном шейдере находишь позицию точки в мировом пространстве, находишь ее позицию относительно секущей плоскости, и, если она пересекает ее - сплющиваешь о плоскость.

На примере 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); // домнажаем на проекционно-видовую матрицу, чтобы найти положение точки на экране.

2
Ответить

Возможно позже, после того как с работой разберусь :)

Ответить