glre 0.41.0 → 0.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/dist/addons.cjs +1 -1
  2. package/dist/addons.cjs.map +1 -1
  3. package/dist/addons.d.ts +379 -7
  4. package/dist/addons.js +1 -1
  5. package/dist/addons.js.map +1 -1
  6. package/dist/index.cjs +3 -3
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.d.ts +2 -0
  9. package/dist/index.js +3 -3
  10. package/dist/index.js.map +1 -1
  11. package/dist/native.d.ts +3 -0
  12. package/dist/node.cjs +12 -12
  13. package/dist/node.cjs.map +1 -1
  14. package/dist/node.d.ts +2 -1
  15. package/dist/node.js +12 -12
  16. package/dist/node.js.map +1 -1
  17. package/dist/react.d.ts +2 -0
  18. package/dist/solid.d.ts +2 -0
  19. package/package.json +1 -1
  20. package/src/addons/color/blend/add.ts +35 -0
  21. package/src/addons/color/blend/average.ts +35 -0
  22. package/src/addons/color/blend/color.ts +28 -0
  23. package/src/addons/color/blend/colorBurn.ts +35 -0
  24. package/src/addons/color/blend/colorDodge.ts +39 -0
  25. package/src/addons/color/blend/darken.ts +35 -0
  26. package/src/addons/color/blend/difference.ts +35 -0
  27. package/src/addons/color/blend/exclusion.ts +35 -0
  28. package/src/addons/color/blend/glow.ts +36 -0
  29. package/src/addons/color/blend/hardLight.ts +36 -0
  30. package/src/addons/color/blend/hardMix.ts +39 -0
  31. package/src/addons/color/blend/hue.ts +29 -0
  32. package/src/addons/color/blend/index.ts +28 -0
  33. package/src/addons/color/blend/lighten.ts +35 -0
  34. package/src/addons/color/blend/linearBurn.ts +39 -0
  35. package/src/addons/color/blend/linearDodge.ts +39 -0
  36. package/src/addons/color/blend/linearLight.ts +44 -0
  37. package/src/addons/color/blend/luminosity.ts +28 -0
  38. package/src/addons/color/blend/multiply.ts +35 -0
  39. package/src/addons/color/blend/negation.ts +35 -0
  40. package/src/addons/color/blend/overlay.ts +38 -0
  41. package/src/addons/color/blend/phoenix.ts +35 -0
  42. package/src/addons/color/blend/pinLight.ts +40 -0
  43. package/src/addons/color/blend/reflect.ts +35 -0
  44. package/src/addons/color/blend/saturation.ts +28 -0
  45. package/src/addons/color/blend/screen.ts +39 -0
  46. package/src/addons/color/blend/softLight.ts +63 -0
  47. package/src/addons/color/blend/subtract.ts +37 -0
  48. package/src/addons/color/blend/vividLight.ts +44 -0
  49. package/src/addons/color/composite/compositeXor.ts +40 -0
  50. package/src/addons/color/composite/destinationAtop.ts +42 -0
  51. package/src/addons/color/composite/destinationIn.ts +42 -0
  52. package/src/addons/color/composite/destinationOut.ts +42 -0
  53. package/src/addons/color/composite/destinationOver.ts +42 -0
  54. package/src/addons/color/composite/index.ts +9 -0
  55. package/src/addons/color/composite/sourceAtop.ts +42 -0
  56. package/src/addons/color/composite/sourceIn.ts +40 -0
  57. package/src/addons/color/composite/sourceOut.ts +40 -0
  58. package/src/addons/color/composite/sourceOver.ts +40 -0
  59. package/src/addons/color/palette/macbeth.ts +31 -33
  60. package/src/addons/draw/arrows.ts +34 -48
  61. package/src/addons/draw/axis.ts +24 -42
  62. package/src/addons/draw/bridge.ts +4 -4
  63. package/src/addons/draw/char.ts +235 -18
  64. package/src/addons/draw/circle.ts +22 -1
  65. package/src/addons/draw/colorChecker.ts +42 -0
  66. package/src/addons/draw/colorPicker.ts +66 -0
  67. package/src/addons/draw/digits.ts +334 -0
  68. package/src/addons/draw/index.ts +4 -0
  69. package/src/addons/draw/matrix.ts +26 -0
  70. package/src/addons/draw/point.ts +24 -11
  71. package/src/addons/geometry/triangle/closestPoint.ts +7 -7
  72. package/src/addons/index.ts +3 -0
  73. package/src/addons/math/const.ts +4 -4
  74. package/src/addons/math/mod289.ts +1 -6
  75. package/src/addons/math/powFast.ts +4 -10
  76. package/src/addons/math/quartic.ts +6 -11
  77. package/src/addons/math/quat/quatLerp.ts +3 -3
  78. package/src/addons/math/quintic.ts +7 -12
  79. package/src/addons/math/rotate2d.ts +1 -6
  80. package/src/addons/math/rotate3d.ts +4 -10
  81. package/src/addons/math/rotate3dX.ts +3 -12
  82. package/src/addons/math/rotate3dY.ts +3 -12
  83. package/src/addons/math/rotate3dZ.ts +3 -12
  84. package/src/addons/math/rotate4d.ts +4 -10
  85. package/src/addons/math/rotate4dX.ts +3 -13
  86. package/src/addons/math/rotate4dY.ts +1 -6
  87. package/src/addons/math/rotate4dZ.ts +3 -13
  88. package/src/addons/math/scale2d.ts +16 -32
  89. package/src/addons/math/toMat3.ts +1 -6
  90. package/src/addons/math/toMat4.ts +1 -6
  91. package/src/addons/sdf/arrowSDF.ts +61 -0
  92. package/src/addons/sdf/boxFrameSDF.ts +31 -0
  93. package/src/addons/sdf/boxSDF.ts +4 -6
  94. package/src/addons/sdf/capsuleSDF.ts +17 -0
  95. package/src/addons/sdf/coneSDF.ts +60 -0
  96. package/src/addons/sdf/crossSDF.ts +4 -7
  97. package/src/addons/sdf/cubeSDF.ts +13 -0
  98. package/src/addons/sdf/cylinderSDF.ts +65 -0
  99. package/src/addons/sdf/dodecahedronSDF.ts +32 -0
  100. package/src/addons/sdf/ellipsoidSDF.ts +14 -0
  101. package/src/addons/sdf/flowerSDF.ts +16 -0
  102. package/src/addons/sdf/gearSDF.ts +22 -0
  103. package/src/addons/sdf/heartSDF.ts +17 -0
  104. package/src/addons/sdf/hexPrismSDF.ts +15 -0
  105. package/src/addons/sdf/hexSDF.ts +8 -15
  106. package/src/addons/sdf/icosahedronSDF.ts +23 -0
  107. package/src/addons/sdf/index.ts +41 -0
  108. package/src/addons/sdf/juliaSDF.ts +39 -0
  109. package/src/addons/sdf/kochSDF.ts +49 -0
  110. package/src/addons/sdf/linkSDF.ts +15 -0
  111. package/src/addons/sdf/mandelbulbSDF.ts +41 -0
  112. package/src/addons/sdf/octahedronSDF.ts +30 -0
  113. package/src/addons/sdf/octogonPrismSDF.ts +19 -0
  114. package/src/addons/sdf/opElongate.ts +35 -0
  115. package/src/addons/sdf/opExtrude.ts +14 -0
  116. package/src/addons/sdf/opIntersection.ts +25 -0
  117. package/src/addons/sdf/opOnion.ts +12 -0
  118. package/src/addons/sdf/opRepeat.ts +49 -0
  119. package/src/addons/sdf/opRevolve.ts +12 -0
  120. package/src/addons/sdf/opRound.ts +12 -0
  121. package/src/addons/sdf/opSubtraction.ts +50 -0
  122. package/src/addons/sdf/opUnion.ts +39 -0
  123. package/src/addons/sdf/planeSDF.ts +21 -0
  124. package/src/addons/sdf/polySDF.ts +32 -0
  125. package/src/addons/sdf/pyramidSDF.ts +29 -0
  126. package/src/addons/sdf/raysSDF.ts +14 -0
  127. package/src/addons/sdf/rhombSDF.ts +10 -0
  128. package/src/addons/sdf/spiralSDF.ts +15 -0
  129. package/src/addons/sdf/starSDF.ts +47 -0
  130. package/src/addons/sdf/superShapeSDF.ts +73 -0
  131. package/src/addons/sdf/tetrahedronSDF.ts +21 -0
  132. package/src/addons/sdf/torusSDF.ts +27 -0
  133. package/src/addons/sdf/triPrismSDF.ts +13 -0
  134. package/src/addons/sdf/triSDF.ts +19 -11
  135. package/src/addons/sdf/vesicaSDF.ts +23 -0
  136. package/src/addons/space/bracketing.ts +1 -2
  137. package/src/addons/space/kaleidoscope.ts +1 -2
  138. package/src/addons/space/scale.ts +42 -7
  139. package/src/addons/space/windmillTile.ts +2 -1
  140. package/src/index.ts +1 -0
  141. package/src/node/create.ts +2 -3
  142. package/src/node/utils/index.ts +2 -2
  143. package/src/types.ts +1 -0
  144. package/src/utils/webgl.ts +7 -0
@@ -0,0 +1,42 @@
1
+ import { Fn, Float, Vec3, Vec4, vec4 } from '../../../node'
2
+
3
+ const compositeDestinationOverFloat = Fn(([src, dst]: [Float, Float]): Float => {
4
+ return dst.add(src.mul(dst.oneMinus()))
5
+ }).setLayout({
6
+ name: 'compositeDestinationOver',
7
+ type: 'float',
8
+ inputs: [
9
+ { name: 'src', type: 'float' },
10
+ { name: 'dst', type: 'float' },
11
+ ],
12
+ })
13
+
14
+ export const compositeDestinationOver = compositeDestinationOverFloat
15
+
16
+ export const compositeDestinationOverVec3 = Fn(
17
+ ([srcColor, dstColor, srcAlpha, dstAlpha]: [Vec3, Vec3, Float, Float]): Vec3 => {
18
+ return dstColor.add(srcColor.mul(dstAlpha.oneMinus()))
19
+ }
20
+ ).setLayout({
21
+ name: 'compositeDestinationOverVec3',
22
+ type: 'vec3',
23
+ inputs: [
24
+ { name: 'srcColor', type: 'vec3' },
25
+ { name: 'dstColor', type: 'vec3' },
26
+ { name: 'srcAlpha', type: 'float' },
27
+ { name: 'dstAlpha', type: 'float' },
28
+ ],
29
+ })
30
+
31
+ export const compositeDestinationOverVec4 = Fn(([srcColor, dstColor]: [Vec4, Vec4]): Vec4 => {
32
+ const resultRgb = compositeDestinationOverVec3(srcColor.rgb, dstColor.rgb, srcColor.a, dstColor.a)
33
+ const resultA = compositeDestinationOverFloat(srcColor.a, dstColor.a)
34
+ return vec4(resultRgb, resultA)
35
+ }).setLayout({
36
+ name: 'compositeDestinationOverVec4',
37
+ type: 'vec4',
38
+ inputs: [
39
+ { name: 'srcColor', type: 'vec4' },
40
+ { name: 'dstColor', type: 'vec4' },
41
+ ],
42
+ })
@@ -0,0 +1,9 @@
1
+ export * from './compositeXor'
2
+ export * from './destinationAtop'
3
+ export * from './destinationIn'
4
+ export * from './destinationOut'
5
+ export * from './destinationOver'
6
+ export * from './sourceAtop'
7
+ export * from './sourceIn'
8
+ export * from './sourceOut'
9
+ export * from './sourceOver'
@@ -0,0 +1,42 @@
1
+ import { Fn, Float, Vec3, Vec4, vec4 } from '../../../node'
2
+
3
+ const compositeSourceAtopFloat = Fn(([src, dst]: [Float, Float]): Float => {
4
+ return src.mul(dst).add(dst.mul(src.oneMinus()))
5
+ }).setLayout({
6
+ name: 'compositeSourceAtop',
7
+ type: 'float',
8
+ inputs: [
9
+ { name: 'src', type: 'float' },
10
+ { name: 'dst', type: 'float' },
11
+ ],
12
+ })
13
+
14
+ export const compositeSourceAtop = compositeSourceAtopFloat
15
+
16
+ export const compositeSourceAtopVec3 = Fn(
17
+ ([srcColor, dstColor, srcAlpha, dstAlpha]: [Vec3, Vec3, Float, Float]): Vec3 => {
18
+ return srcColor.mul(dstAlpha).add(dstColor.mul(srcAlpha.oneMinus()))
19
+ }
20
+ ).setLayout({
21
+ name: 'compositeSourceAtopVec3',
22
+ type: 'vec3',
23
+ inputs: [
24
+ { name: 'srcColor', type: 'vec3' },
25
+ { name: 'dstColor', type: 'vec3' },
26
+ { name: 'srcAlpha', type: 'float' },
27
+ { name: 'dstAlpha', type: 'float' },
28
+ ],
29
+ })
30
+
31
+ export const compositeSourceAtopVec4 = Fn(([srcColor, dstColor]: [Vec4, Vec4]): Vec4 => {
32
+ const resultRgb = compositeSourceAtopVec3(srcColor.rgb, dstColor.rgb, srcColor.a, dstColor.a)
33
+ const resultA = compositeSourceAtopFloat(srcColor.a, dstColor.a)
34
+ return vec4(resultRgb, resultA)
35
+ }).setLayout({
36
+ name: 'compositeSourceAtopVec4',
37
+ type: 'vec4',
38
+ inputs: [
39
+ { name: 'srcColor', type: 'vec4' },
40
+ { name: 'dstColor', type: 'vec4' },
41
+ ],
42
+ })
@@ -0,0 +1,40 @@
1
+ import { Fn, Float, Vec3, Vec4, vec4 } from '../../../node'
2
+
3
+ const compositeSourceInFloat = Fn(([src, dst]: [Float, Float]): Float => {
4
+ return src.mul(dst)
5
+ }).setLayout({
6
+ name: 'compositeSourceIn',
7
+ type: 'float',
8
+ inputs: [
9
+ { name: 'src', type: 'float' },
10
+ { name: 'dst', type: 'float' }
11
+ ]
12
+ })
13
+
14
+ export const compositeSourceIn = compositeSourceInFloat
15
+
16
+ export const compositeSourceInVec3 = Fn(([srcColor, dstColor, srcAlpha, dstAlpha]: [Vec3, Vec3, Float, Float]): Vec3 => {
17
+ return srcColor.mul(dstAlpha)
18
+ }).setLayout({
19
+ name: 'compositeSourceInVec3',
20
+ type: 'vec3',
21
+ inputs: [
22
+ { name: 'srcColor', type: 'vec3' },
23
+ { name: 'dstColor', type: 'vec3' },
24
+ { name: 'srcAlpha', type: 'float' },
25
+ { name: 'dstAlpha', type: 'float' }
26
+ ]
27
+ })
28
+
29
+ export const compositeSourceInVec4 = Fn(([srcColor, dstColor]: [Vec4, Vec4]): Vec4 => {
30
+ const resultRgb = compositeSourceInVec3(srcColor.rgb, dstColor.rgb, srcColor.a, dstColor.a)
31
+ const resultA = compositeSourceInFloat(srcColor.a, dstColor.a)
32
+ return vec4(resultRgb, resultA)
33
+ }).setLayout({
34
+ name: 'compositeSourceInVec4',
35
+ type: 'vec4',
36
+ inputs: [
37
+ { name: 'srcColor', type: 'vec4' },
38
+ { name: 'dstColor', type: 'vec4' }
39
+ ]
40
+ })
@@ -0,0 +1,40 @@
1
+ import { Fn, Float, Vec3, Vec4, vec4 } from '../../../node'
2
+
3
+ const compositeSourceOutFloat = Fn(([src, dst]: [Float, Float]): Float => {
4
+ return src.mul(dst.oneMinus())
5
+ }).setLayout({
6
+ name: 'compositeSourceOut',
7
+ type: 'float',
8
+ inputs: [
9
+ { name: 'src', type: 'float' },
10
+ { name: 'dst', type: 'float' }
11
+ ]
12
+ })
13
+
14
+ export const compositeSourceOut = compositeSourceOutFloat
15
+
16
+ export const compositeSourceOutVec3 = Fn(([srcColor, dstColor, srcAlpha, dstAlpha]: [Vec3, Vec3, Float, Float]): Vec3 => {
17
+ return srcColor.mul(dstAlpha.oneMinus())
18
+ }).setLayout({
19
+ name: 'compositeSourceOutVec3',
20
+ type: 'vec3',
21
+ inputs: [
22
+ { name: 'srcColor', type: 'vec3' },
23
+ { name: 'dstColor', type: 'vec3' },
24
+ { name: 'srcAlpha', type: 'float' },
25
+ { name: 'dstAlpha', type: 'float' }
26
+ ]
27
+ })
28
+
29
+ export const compositeSourceOutVec4 = Fn(([srcColor, dstColor]: [Vec4, Vec4]): Vec4 => {
30
+ const resultRgb = compositeSourceOutVec3(srcColor.rgb, dstColor.rgb, srcColor.a, dstColor.a)
31
+ const resultA = compositeSourceOutFloat(srcColor.a, dstColor.a)
32
+ return vec4(resultRgb, resultA)
33
+ }).setLayout({
34
+ name: 'compositeSourceOutVec4',
35
+ type: 'vec4',
36
+ inputs: [
37
+ { name: 'srcColor', type: 'vec4' },
38
+ { name: 'dstColor', type: 'vec4' }
39
+ ]
40
+ })
@@ -0,0 +1,40 @@
1
+ import { Fn, Float, Vec3, Vec4, vec4 } from '../../../node'
2
+
3
+ const compositeSourceOverFloat = Fn(([src, dst]: [Float, Float]): Float => {
4
+ return src.add(dst.mul(src.oneMinus()))
5
+ }).setLayout({
6
+ name: 'compositeSourceOver',
7
+ type: 'float',
8
+ inputs: [
9
+ { name: 'src', type: 'float' },
10
+ { name: 'dst', type: 'float' }
11
+ ]
12
+ })
13
+
14
+ export const compositeSourceOver = compositeSourceOverFloat
15
+
16
+ export const compositeSourceOverVec3 = Fn(([srcColor, dstColor, srcAlpha, dstAlpha]: [Vec3, Vec3, Float, Float]): Vec3 => {
17
+ return srcColor.mul(srcAlpha).add(dstColor.mul(dstAlpha).mul(srcAlpha.oneMinus()))
18
+ }).setLayout({
19
+ name: 'compositeSourceOverVec3',
20
+ type: 'vec3',
21
+ inputs: [
22
+ { name: 'srcColor', type: 'vec3' },
23
+ { name: 'dstColor', type: 'vec3' },
24
+ { name: 'srcAlpha', type: 'float' },
25
+ { name: 'dstAlpha', type: 'float' }
26
+ ]
27
+ })
28
+
29
+ export const compositeSourceOverVec4 = Fn(([srcColor, dstColor]: [Vec4, Vec4]): Vec4 => {
30
+ const resultRgb = compositeSourceOverVec3(srcColor.rgb, dstColor.rgb, srcColor.a, dstColor.a)
31
+ const resultA = compositeSourceOverFloat(srcColor.a, dstColor.a)
32
+ return vec4(resultRgb, resultA)
33
+ }).setLayout({
34
+ name: 'compositeSourceOverVec4',
35
+ type: 'vec4',
36
+ inputs: [
37
+ { name: 'srcColor', type: 'vec4' },
38
+ { name: 'dstColor', type: 'vec4' }
39
+ ]
40
+ })
@@ -1,42 +1,40 @@
1
- import { Fn, vec3, Int, Vec3, If, select } from '../../../node'
1
+ import { Fn, vec3, Int, Vec3, If, int } from '../../../node'
2
2
 
3
3
  const colors = [
4
- vec3(0.46017, 0.33059, 0.27477), // DARK_SKIN
5
- vec3(0.769, 0.576, 0.506), // LIGHT_SKIN
6
- vec3(0.356, 0.472, 0.609), // BLUE_SKY
7
- vec3(0.357, 0.427, 0.247), // FOLIAGE
8
- vec3(0.518, 0.506, 0.694), // BLUE_FLOWER
9
- vec3(0.384, 0.749, 0.675), // BLUISH_GREEN
10
- vec3(0.867, 0.487, 0.184), // ORANGE
11
- vec3(0.290, 0.357, 0.671), // PURPLISH_BLUE
12
- vec3(0.769, 0.333, 0.384), // MODERATE_RED
13
- vec3(0.365, 0.231, 0.420), // PURPLE
14
- vec3(0.624, 0.745, 0.227), // YELLOW_GREEN
15
- vec3(0.894, 0.635, 0.160), // ORANGE_YELLOW
16
- vec3(0.176, 0.247, 0.584), // BLUE
17
- vec3(0.239, 0.588, 0.290), // GREEN
18
- vec3(0.690, 0.224, 0.227), // RED
19
- vec3(0.925, 0.784, 0.094), // YELLOW
20
- vec3(0.749, 0.309, 0.598), // MAGENTA
21
- vec3(0.000, 0.537, 0.659), // CYAN
22
- vec3(0.956, 0.956, 0.945), // WHITE
23
- vec3(0.789, 0.797, 0.797), // NEUTRAL_80
24
- vec3(0.635, 0.643, 0.643), // NEUTRAL_65
25
- vec3(0.475, 0.478, 0.478), // NEUTRAL_50
26
- vec3(0.329, 0.333, 0.337), // NEUTRAL_35
27
- vec3(0.200, 0.200, 0.204) // BLACK
4
+ [0.46017, 0.33059, 0.27477], // DARK_SKIN
5
+ [0.769, 0.576, 0.506], // LIGHT_SKIN
6
+ [0.356, 0.472, 0.609], // BLUE_SKY
7
+ [0.357, 0.427, 0.247], // FOLIAGE
8
+ [0.518, 0.506, 0.694], // BLUE_FLOWER
9
+ [0.384, 0.749, 0.675], // BLUISH_GREEN
10
+ [0.867, 0.487, 0.184], // ORANGE
11
+ [0.29, 0.357, 0.671], // PURPLISH_BLUE
12
+ [0.769, 0.333, 0.384], // MODERATE_RED
13
+ [0.365, 0.231, 0.42], // PURPLE
14
+ [0.624, 0.745, 0.227], // YELLOW_GREEN
15
+ [0.894, 0.635, 0.16], // ORANGE_YELLOW
16
+ [0.176, 0.247, 0.584], // BLUE
17
+ [0.239, 0.588, 0.29], // GREEN
18
+ [0.69, 0.224, 0.227], // RED
19
+ [0.925, 0.784, 0.094], // YELLOW
20
+ [0.749, 0.309, 0.598], // MAGENTA
21
+ [0.0, 0.537, 0.659], // CYAN
22
+ [0.956, 0.956, 0.945], // WHITE
23
+ [0.789, 0.797, 0.797], // NEUTRAL_80
24
+ [0.635, 0.643, 0.643], // NEUTRAL_65
25
+ [0.475, 0.478, 0.478], // NEUTRAL_50
26
+ [0.329, 0.333, 0.337], // NEUTRAL_35
27
+ [0.2, 0.2, 0.204], // BLACK
28
28
  ]
29
29
 
30
30
  export const macbeth = Fn(([index]: [Int]): Vec3 => {
31
- let result = vec3(0)
32
- for (let i = 0; i < colors.length; i++) {
33
- result = select(result, colors[i], index.equal(i))
34
- }
31
+ const result = vec3(0).toVar()
32
+ let ifChain = If(index.equal(int(0)), () => void result.assign(vec3(...colors[0])))
33
+ for (let i = 1; i < colors.length; i++)
34
+ ifChain = ifChain.ElseIf(index.equal(int(i)), () => void result.assign(vec3(...colors[i])))
35
35
  return result
36
36
  }).setLayout({
37
37
  name: 'macbeth',
38
38
  type: 'vec3',
39
- inputs: [
40
- { name: 'index', type: 'int' }
41
- ]
42
- })
39
+ inputs: [{ name: 'index', type: 'int' }],
40
+ })
@@ -1,59 +1,46 @@
1
- import { Fn, Vec2, Float, float, vec2, floor, length, clamp, min, dot, cos, normalize, If } from '../../node'
1
+ import { Fn, Float, Vec2, float, vec2, length, clamp, min, step, If } from '../../node'
2
+ import { lineSDF } from '../sdf/lineSDF'
2
3
 
3
- // Constants
4
- const ARROWS_TILE_SIZE = float(32)
5
- const ARROWS_HEAD_ANGLE = float(0.5)
4
+ const ARROWS_TILE_SIZE = float(32.0)
6
5
 
7
- // Arrow tile center coordinate calculation
8
6
  export const arrowsTileCenterCoord = Fn(([pos]: [Vec2]): Vec2 => {
9
- return floor(pos.div(ARROWS_TILE_SIZE)).add(0.5).mul(ARROWS_TILE_SIZE)
7
+ const floored = pos.div(ARROWS_TILE_SIZE).floor()
8
+ return floored.add(0.5).mul(ARROWS_TILE_SIZE)
10
9
  }).setLayout({
11
10
  name: 'arrowsTileCenterCoord',
12
11
  type: 'vec2',
13
12
  inputs: [{ name: 'pos', type: 'vec2' }],
14
13
  })
15
14
 
16
- // Arrows with resolution parameter
17
- export const arrowsWithResolution = Fn(([p, v, resolution]: [Vec2, Vec2, Vec2]): Float => {
18
- const scaledP = p.mul(resolution).toVar()
19
- scaledP.subAssign(arrowsTileCenterCoord(scaledP))
20
- const mag_v = length(v).toVar()
21
-
22
- const result = float(0).toVar()
23
-
24
- If(mag_v.greaterThan(0), () => {
25
- const dir_v = v.div(mag_v).toVar()
26
- mag_v.assign(clamp(mag_v, 5, ARROWS_TILE_SIZE.div(2)))
27
- const vScaled = dir_v.mul(mag_v).toVar()
28
-
29
- // Simplified arrow implementation based on GLSL default style
30
- const arrow = float(1)
31
- .add(
32
- min(
33
- float(0),
34
- dot(normalize(vScaled.sub(scaledP)), dir_v).sub(cos(ARROWS_HEAD_ANGLE.div(2)))
35
- )
36
- .mul(2)
37
- .mul(length(vScaled.sub(scaledP)))
38
- .add(min(float(0), dot(scaledP, dir_v).add(1)))
39
- .add(
40
- min(
41
- float(0),
42
- cos(ARROWS_HEAD_ANGLE.div(2)).sub(
43
- dot(normalize(vScaled.mul(0.33).sub(scaledP)), dir_v)
44
- )
45
- )
46
- .mul(mag_v)
47
- .mul(0.8)
48
- )
49
- )
50
- .saturate()
51
- result.assign(arrow)
15
+ export const arrows = Fn(([p, v, resolution]: [Vec2, Vec2, Vec2]): Float => {
16
+ const pScaled = p.mul(resolution).toVar('pScaled')
17
+ pScaled.subAssign(arrowsTileCenterCoord(pScaled))
18
+ const mag_v = length(v).toVar('mag_v')
19
+
20
+ If(mag_v.greaterThan(0.0), () => {
21
+ const dir_v = v.div(mag_v).toVar('dir_v')
22
+ mag_v.assign(clamp(mag_v, float(5.0), ARROWS_TILE_SIZE.div(2.0)))
23
+ const vScaled = dir_v.mul(mag_v).toVar('vScaled')
24
+
25
+ const shaft = lineSDF(pScaled, vScaled, vScaled.negate()).toVar('shaft')
26
+ const head1 = lineSDF(
27
+ pScaled,
28
+ vScaled,
29
+ vScaled.mul(0.4).add(vec2(vScaled.y.negate(), vScaled.x).mul(0.2))
30
+ ).toVar('head1')
31
+ const head2 = lineSDF(
32
+ pScaled,
33
+ vScaled,
34
+ vScaled.mul(0.4).add(vec2(vScaled.y, vScaled.x.negate()).mul(0.2))
35
+ ).toVar('head2')
36
+ const head = min(head1, head2).toVar('head')
37
+
38
+ return step(min(shaft, head), float(1.0))
52
39
  })
53
40
 
54
- return result
41
+ return float(0.0)
55
42
  }).setLayout({
56
- name: 'arrowsWithResolution',
43
+ name: 'arrows',
57
44
  type: 'float',
58
45
  inputs: [
59
46
  { name: 'p', type: 'vec2' },
@@ -62,11 +49,10 @@ export const arrowsWithResolution = Fn(([p, v, resolution]: [Vec2, Vec2, Vec2]):
62
49
  ],
63
50
  })
64
51
 
65
- // Arrows with default resolution
66
- export const arrows = Fn(([p, v]: [Vec2, Vec2]): Float => {
67
- return arrowsWithResolution(p, v, vec2(1))
52
+ export const arrowsSimple = Fn(([p, v]: [Vec2, Vec2]): Float => {
53
+ return arrows(p, v, vec2(1.0))
68
54
  }).setLayout({
69
- name: 'arrows',
55
+ name: 'arrowsSimple',
70
56
  type: 'float',
71
57
  inputs: [
72
58
  { name: 'p', type: 'vec2' },
@@ -1,50 +1,32 @@
1
- import { Fn, Vec2, Vec3, Vec4, Mat4, Float, vec3, vec4, Loop, int } from '../../node'
1
+ import { Fn, Vec2, Vec3, Vec4, Mat4, Float, vec3, vec4 } from '../../node'
2
2
  import { line } from './line'
3
3
 
4
4
  export const axis = Fn(([st, M, pos, thickness]: [Vec2, Mat4, Vec3, Float]): Vec4 => {
5
- let result = vec4(0, 0, 0, 0).toVar()
5
+ const rta = vec4(0).toVar()
6
6
 
7
- // Transform center position
8
7
  const center = M.mul(vec4(pos, 1)).toVar()
9
- center.xy.assign(center.xy.div(center.w))
10
- center.xy.assign(center.xy.div(2).add(0.5))
11
-
12
- // Define axis colors (RGB for XYZ)
13
- const axisColors = [
14
- vec4(1, 0, 0, 1), // Red for X axis
15
- vec4(0, 1, 0, 1), // Green for Y axis
16
- vec4(0, 0, 1, 1), // Blue for Z axis
17
- ]
18
-
19
- const axisDirections = [
20
- vec3(1, 0, 0), // X direction
21
- vec3(0, 1, 0), // Y direction
22
- vec3(0, 0, 1), // Z direction
23
- ]
24
-
25
- // Draw each axis
26
- Loop(int(3), ({ i }) => {
27
- const axisColor = (i.equal(int(0)) as any).select(
28
- axisColors[0],
29
- (i.equal(int(1)) as any).select(axisColors[1], axisColors[2])
30
- )
31
-
32
- const axisDir = (i.equal(int(0)) as any).select(
33
- axisDirections[0],
34
- (i.equal(int(1)) as any).select(axisDirections[1], axisDirections[2])
35
- )
36
-
37
- // Transform axis endpoint
38
- const axisPoint = (M as any).mul(vec4((pos as any).add(axisDir as any), 1)).toVar()
39
- axisPoint.xy.assign(axisPoint.xy.div(axisPoint.w))
40
- axisPoint.xy.assign(axisPoint.xy.div(2).add(0.5))
41
-
42
- // Draw line from center to axis endpoint
43
- const axisLine = line(st, center.xy, axisPoint.xy, thickness)
44
- result.addAssign((axisColor as any).mul(axisLine as any))
45
- })
46
-
47
- return result
8
+ center.xy.divAssign(center.w)
9
+ center.xy.assign(center.xy.mul(0.5).add(0.5))
10
+
11
+ const axisX = vec4(1, 0, 0, 1)
12
+ const aX = M.mul(vec4(pos.add(vec3(1, 0, 0)), 1)).toVar()
13
+ aX.xy.divAssign(aX.w)
14
+ aX.xy.assign(aX.xy.mul(0.5).add(0.5))
15
+ rta.addAssign(axisX.mul(line(st, center.xy, aX.xy, thickness)))
16
+
17
+ const axisY = vec4(0, 1, 0, 1)
18
+ const aY = M.mul(vec4(pos.add(vec3(0, 1, 0)), 1)).toVar()
19
+ aY.xy.divAssign(aY.w)
20
+ aY.xy.assign(aY.xy.mul(0.5).add(0.5))
21
+ rta.addAssign(axisY.mul(line(st, center.xy, aY.xy, thickness)))
22
+
23
+ const axisZ = vec4(0, 0, 1, 1)
24
+ const aZ = M.mul(vec4(pos.add(vec3(0, 0, 1)), 1)).toVar()
25
+ aZ.xy.divAssign(aZ.w)
26
+ aZ.xy.assign(aZ.xy.mul(0.5).add(0.5))
27
+ rta.addAssign(axisZ.mul(line(st, center.xy, aZ.xy, thickness)))
28
+
29
+ return rta
48
30
  }).setLayout({
49
31
  name: 'axis',
50
32
  type: 'vec4',
@@ -20,7 +20,7 @@ export const bridgeFloat = Fn(([c, d, s, w]: [Float, Float, Float, Float]): Floa
20
20
  export const bridgeVec2 = Fn(([c, d, s, w]: [Vec2, Float, Float, Float]): Vec2 => {
21
21
  const strokeMask = stroke(d, s, w.mul(2))
22
22
  const maskedC = c.mul(float(1).sub(strokeMask))
23
- return maskedC.add(strokeMask)
23
+ return maskedC.add(stroke(d, s, w))
24
24
  }).setLayout({
25
25
  name: 'bridgeVec2',
26
26
  type: 'vec2',
@@ -36,7 +36,7 @@ export const bridgeVec2 = Fn(([c, d, s, w]: [Vec2, Float, Float, Float]): Vec2 =
36
36
  export const bridgeVec3 = Fn(([c, d, s, w]: [Vec3, Float, Float, Float]): Vec3 => {
37
37
  const strokeMask = stroke(d, s, w.mul(2))
38
38
  const maskedC = c.mul(float(1).sub(strokeMask))
39
- return maskedC.add(strokeMask)
39
+ return maskedC.add(stroke(d, s, w))
40
40
  }).setLayout({
41
41
  name: 'bridgeVec3',
42
42
  type: 'vec3',
@@ -52,7 +52,7 @@ export const bridgeVec3 = Fn(([c, d, s, w]: [Vec3, Float, Float, Float]): Vec3 =
52
52
  export const bridgeVec4 = Fn(([c, d, s, w]: [Vec4, Float, Float, Float]): Vec4 => {
53
53
  const strokeMask = stroke(d, s, w.mul(2))
54
54
  const maskedC = c.mul(float(1).sub(strokeMask))
55
- return maskedC.add(strokeMask)
55
+ return maskedC.add(stroke(d, s, w))
56
56
  }).setLayout({
57
57
  name: 'bridgeVec4',
58
58
  type: 'vec4',
@@ -68,7 +68,7 @@ export const bridgeVec4 = Fn(([c, d, s, w]: [Vec4, Float, Float, Float]): Vec4 =
68
68
  export const bridge = Fn(([c, d, s, w]: [X, Float, Float, Float]): X => {
69
69
  const strokeMask = stroke(d, s, (w as any).mul(2))
70
70
  const maskedC = (c as any).mul(float(1).sub(strokeMask))
71
- return maskedC.add(strokeMask)
71
+ return maskedC.add(stroke(d, s, w as any))
72
72
  }).setLayout({
73
73
  name: 'bridge',
74
74
  type: 'auto',