Skip to content

Commit

Permalink
fix(Grid): use bool glsl type (#1456)
Browse files Browse the repository at this point in the history
  • Loading branch information
CodyJasonBennett committed May 21, 2023
1 parent 0c0f7fd commit 21c93a4
Showing 1 changed file with 49 additions and 39 deletions.
88 changes: 49 additions & 39 deletions src/core/Grid.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -57,46 +57,56 @@ const GridMaterial = shaderMaterial(
sectionThickness: 1,
cellColor: new THREE.Color(),
sectionColor: new THREE.Color(),
infiniteGrid: 0,
followCamera: 0,
infiniteGrid: false,
followCamera: false,
},
`varying vec3 worldPosition;
uniform float fadeDistance;
uniform float infiniteGrid;
uniform float followCamera;
void main() {
vec3 pos = position.xzy * (1. + fadeDistance * infiniteGrid);
pos.xz += (cameraPosition.xz * followCamera);
worldPosition = pos;
gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);
}`,
`varying vec3 worldPosition;
uniform float cellSize;
uniform float sectionSize;
uniform vec3 cellColor;
uniform vec3 sectionColor;
uniform float fadeDistance;
uniform float fadeStrength;
uniform float cellThickness;
uniform float sectionThickness;
uniform float infiniteGrid;
float getGrid(float size, float thickness) {
vec2 r = worldPosition.xz / size;
vec2 grid = abs(fract(r - 0.5) - 0.5) / fwidth(r);
float line = min(grid.x, grid.y) + 1. - thickness;
return 1.0 - min(line, 1.);
}
void main() {
float g1 = getGrid(cellSize, cellThickness);
float g2 = getGrid(sectionSize, sectionThickness);
float d = 1.0 - min(distance(cameraPosition.xz, worldPosition.xz) / fadeDistance, 1.);
vec3 color = mix(cellColor, sectionColor, min(1.,sectionThickness * g2));
gl_FragColor = vec4(color, (g1 + g2) * pow(d,fadeStrength));
gl_FragColor.a = mix(0.75 * gl_FragColor.a, gl_FragColor.a, g2);
if (gl_FragColor.a <= 0.0) discard;
#include <tonemapping_fragment>
#include <encodings_fragment>
}`
/* glsl */ `
varying vec3 worldPosition;
uniform float fadeDistance;
uniform bool infiniteGrid;
uniform bool followCamera;
void main() {
worldPosition = position.xzy;
if (infiniteGrid) worldPosition *= 1.0 + fadeDistance;
if (followCamera) worldPosition.xz +=cameraPosition.xz;
gl_Position = projectionMatrix * modelViewMatrix * vec4(worldPosition, 1.0);
}
`,
/* glsl */ `
varying vec3 worldPosition;
uniform float cellSize;
uniform float sectionSize;
uniform vec3 cellColor;
uniform vec3 sectionColor;
uniform float fadeDistance;
uniform float fadeStrength;
uniform float cellThickness;
uniform float sectionThickness;
float getGrid(float size, float thickness) {
vec2 r = worldPosition.xz / size;
vec2 grid = abs(fract(r - 0.5) - 0.5) / fwidth(r);
float line = min(grid.x, grid.y) + 1. - thickness;
return 1.0 - min(line, 1.);
}
void main() {
float g1 = getGrid(cellSize, cellThickness);
float g2 = getGrid(sectionSize, sectionThickness);
float d = 1.0 - min(distance(cameraPosition.xz, worldPosition.xz) / fadeDistance, 1.);
vec3 color = mix(cellColor, sectionColor, min(1.,sectionThickness * g2));
gl_FragColor = vec4(color, (g1 + g2) * pow(d,fadeStrength));
gl_FragColor.a = mix(0.75 * gl_FragColor.a, gl_FragColor.a, g2);
if (gl_FragColor.a <= 0.0) discard;
#include <tonemapping_fragment>
#include <encodings_fragment>
}
`
)

export const Grid = React.forwardRef(
Expand Down

1 comment on commit 21c93a4

@vercel
Copy link

@vercel vercel bot commented on 21c93a4 May 21, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.