webgcode

Форк
0
/
polyborder.frag 
33 строки · 1.1 Кб
1
// expected #define: float pointCount
2
highp float encodingFactor = (exp2(24.0) - 1.0) / exp2(24.0);
3

4
uniform sampler2D points;
5
uniform vec2 gridSize;
6
uniform mat4 projectionMatrix2;
7
uniform mat4 viewMatrix2;
8

9
varying vec2 vUv;
10

11
vec2 getPoint(int index) {
12
    vec4 coords = vec4(texture2D(points, vec2((0.5 + float(index)) / float(pointCount), 0.5)).ra, 0.0, 1.0);
13
    // pass it though the camera matrix
14
    return vec2(0.5, 0.5) + vec2(0.5, 0.5) * (projectionMatrix2 * viewMatrix2 * coords).xy;
15
}
16

17
void main() {
18
    float intersectionCount = 0.0;
19
    for (int i = 1; i < pointCount; i++) {
20
        vec2 prev = getPoint(i - 1);
21
        vec2 curr = getPoint(i);
22
        float xi = curr.x, yi = curr.y;
23
        float xj = prev.x, yj = prev.y;
24
        //https://github.com/substack/point-in-polygon/blob/master/index.js
25
        //http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
26
        if ((yi > vUv.y != yj > vUv.y ) && (vUv.x < (xj - xi) * (vUv.y - yi) / (yj - yi) + xi))
27
            intersectionCount++;
28
    }
29
    bool inside = mod(intersectionCount, 2.0) == 1.0;
30
    if (!inside)
31
        discard;
32
    gl_FragColor = vec4(1.0, 0.0, 1.0, 1.0);
33
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.