Я немного растерялся, и это в некоторой степени связано с другим вопросом Я задал вопрос о фрагментных шейдерах, но выходит за рамки этого.
У меня есть орфографическая сцена (хотя это может и не относиться), где сцена нарисована здесь черным, и у меня есть один спрайт с билбордом, который я рисую с помощью шейдера, который я показываю красным.У меня есть точка, которую я знаю и определяю сама, A , представленная синей точкой, в некоторой координате x, y в 2d координатном пространстве.(Нижний левый угол экрана - оригинал).Мне нужно замаскировать красный рекламный щит программным способом, где я указываю от 0% до 100%, при этом 0% полностью не повреждены, а 100% полностью замаскированы.Я могу либо передать 0-100% (от 0 до 1,0) в шейдер, либо я могу предварительно вычислить угол, любое из решений будет хорошим.
(Здесь вы можете увидеть сцену, нарисованную с помощью '0% 'masking)
Поэтому, когда я установил "15%", я хочу, чтобы появилось следующее:
(Здесь вы можете увидеть сцену, нарисованную с маскированием '15%')
И когда я устанавливаю «45%», я хочу, чтобы появилось следующее:
(Здесь вы можете увидеть сцену, нарисованную с маскировкой «45%»)
А вот пример "80%":
Общая идея, я думаю, состоит в том, чтобы передать в единообразном vec2d "A" и внутри фрагменташейдер Я определяю, находится ли фрагмент в пределах области от 'A' до нижней части экрана, до линии, которая является правильным углом, смещенным по часовой стрелке оттуда.Если в этой области, откажитесь от фрагмента.(Отбрасывание имеет больше смысла, чем установка альфа на 0.0 или 1.0, если вы сохраняете, верно?)
Но как я могу на самом деле добиться этого ??Я не понимаю, как реализовать этот алгоритм с точки зрения шейдера.(Я использую OpenGL ES 2.0)