mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-21 10:47:04 +02:00
feat: hide grid when looking at bottom
This commit is contained in:
1 parent
b745ad2fa7
commit
39e4bce254
1 file changed
+5
-8
@@ -7,15 +7,12 @@ interface InfiniteGridHelperProps extends MeshProps {
|
||||
size2?: number;
|
||||
color?: THREE.Color;
|
||||
distance?: number;
|
||||
axes?: string;
|
||||
}
|
||||
/**
|
||||
* Thanks, Fyrestar, for [THREE.InfiniteGridHelper](https://github.com/Fyrestar/THREE.InfiniteGridHelper/)!
|
||||
*/
|
||||
const InfiniteGridHelper = forwardRef<Mesh, InfiniteGridHelperProps>(
|
||||
({ size1, size2, color, axes = 'xzy', distance, ...props }, ref) => {
|
||||
const planeAxes = axes.slice(0, 2);
|
||||
|
||||
({ size1, size2, color, distance, ...props }, ref) => {
|
||||
return (
|
||||
<mesh {...props} ref={ref} frustumCulled={false}>
|
||||
<shaderMaterial
|
||||
@@ -36,7 +33,7 @@ const InfiniteGridHelper = forwardRef<Mesh, InfiniteGridHelperProps>(
|
||||
uniform float uDistance;
|
||||
|
||||
void main() {
|
||||
vec3 pos = position.${axes} * uDistance;
|
||||
vec3 pos = position.xzy * uDistance;
|
||||
worldPosition = pos;
|
||||
gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);
|
||||
}
|
||||
@@ -51,15 +48,15 @@ const InfiniteGridHelper = forwardRef<Mesh, InfiniteGridHelperProps>(
|
||||
vec2 origin = vec2(0.0, 0.0);
|
||||
|
||||
float getGrid(float size) {
|
||||
vec2 r = worldPosition.${planeAxes} / size;
|
||||
vec2 r = worldPosition.xz / size;
|
||||
vec2 grid = abs(fract(r - 0.5) - 0.5) / fwidth(r);
|
||||
float line = min(grid.x, grid.y);
|
||||
|
||||
return 1.0 - min(line, 1.0);
|
||||
return (1.0 - min(line, 1.0)) * max(0.0, min(1.0, cameraPosition.y / 5.0));
|
||||
}
|
||||
|
||||
void main() {
|
||||
float d = 1.0 - min(distance(origin, worldPosition.${planeAxes}) / uDistance, 1.0);
|
||||
float d = 1.0 - min(distance(origin, worldPosition.xz) / uDistance, 1.0);
|
||||
float g1 = getGrid(uSize1);
|
||||
float g2 = getGrid(uSize2);
|
||||
gl_FragColor = vec4(uColor.rgb, mix(g2, g1, g1) * pow(d, 10.0));
|
||||
|
||||
Reference in new issue
Block a user