Я работаю с cocos2d-x 2.0.4. Я иллюстрирую то, что я пытаюсь сделать с помощью этих двух изображений.OpenGL - создать границу над текстурированным полигоном
convex_poly http://img542.imageshack.us/img542/2554/convexpoly.png convex_poly_with_border http://img40.imageshack.us/img40/8007/convexpolywithborder.png
Что я хочу сделать, это создать размытую границу или рамку с градиентом на нем программным способом. У меня есть две идеи, но я не уверен, что это правильный способ. Первое решение заключалось бы в триангуляции многоугольника, содержащего только размытый цвет (вогнутый многоугольник с отверстием в этом случае) и рендеринг цвета на нем с градиентом, вершины на внешней стороне многоугольника были бы полными альфа и вершинами с нуля -альфа. Тогда интерполяция выполнила бы задачу градиента. Второе решение - сделать это внутри самого шейдера. Все, что мне нужно, это вычислить расстояние от пикселя и ближайший к нему край многоугольника. Затем под определенным порогом я влияю на пиксельный белый цвет с определенным значением альфа в зависимости от этого расстояния (самое короткое расстояние, самая большая альфа).
В любом случае, я очень новичок в openGL, и я боюсь, что второе решение закончится большим временем обработки, так как я должен рассчитать расстояние для каждого пикселя многоугольника. Что вы думаете об этих парнях? Любые идеи, как правило, подтверждают мои догадки, или я совершенно не прав по этому поводу?
EDIT: Решение, которое я, наконец, выбрал, состоял в том, чтобы использовать биссектрису каждого угла (легко рассчитать с помощью трех последовательных вершин) в полигоне и взять точку на этом биссектрере, которая станет вершиной для внутреннего многоугольника. Затем я беру либо внешнюю многоугольную вершину, либо внутреннюю многоугольную вершину, чтобы построить массив вершин, который может соответствовать параметру GL_TRIANGLE_STRIP. Я поставил изображение ниже, чтобы понять лучше.
expl http://img571.imageshack.us/img571/892/convexpolyexplanation.png
Просто замечание общего, но вы должны думать в терминах треугольников, а не произвольные многоугольники. – JasonD