mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-23 19:49:50 +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;
|
size2?: number;
|
||||||
color?: THREE.Color;
|
color?: THREE.Color;
|
||||||
distance?: number;
|
distance?: number;
|
||||||
axes?: string;
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Thanks, Fyrestar, for [THREE.InfiniteGridHelper](https://github.com/Fyrestar/THREE.InfiniteGridHelper/)!
|
* Thanks, Fyrestar, for [THREE.InfiniteGridHelper](https://github.com/Fyrestar/THREE.InfiniteGridHelper/)!
|
||||||
*/
|
*/
|
||||||
const InfiniteGridHelper = forwardRef<Mesh, InfiniteGridHelperProps>(
|
const InfiniteGridHelper = forwardRef<Mesh, InfiniteGridHelperProps>(
|
||||||
({ size1, size2, color, axes = 'xzy', distance, ...props }, ref) => {
|
({ size1, size2, color, distance, ...props }, ref) => {
|
||||||
const planeAxes = axes.slice(0, 2);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<mesh {...props} ref={ref} frustumCulled={false}>
|
<mesh {...props} ref={ref} frustumCulled={false}>
|
||||||
<shaderMaterial
|
<shaderMaterial
|
||||||
@@ -36,7 +33,7 @@ const InfiniteGridHelper = forwardRef<Mesh, InfiniteGridHelperProps>(
|
|||||||
uniform float uDistance;
|
uniform float uDistance;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
vec3 pos = position.${axes} * uDistance;
|
vec3 pos = position.xzy * uDistance;
|
||||||
worldPosition = pos;
|
worldPosition = pos;
|
||||||
gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);
|
gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);
|
||||||
}
|
}
|
||||||
@@ -51,15 +48,15 @@ const InfiniteGridHelper = forwardRef<Mesh, InfiniteGridHelperProps>(
|
|||||||
vec2 origin = vec2(0.0, 0.0);
|
vec2 origin = vec2(0.0, 0.0);
|
||||||
|
|
||||||
float getGrid(float size) {
|
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);
|
vec2 grid = abs(fract(r - 0.5) - 0.5) / fwidth(r);
|
||||||
float line = min(grid.x, grid.y);
|
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() {
|
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 g1 = getGrid(uSize1);
|
||||||
float g2 = getGrid(uSize2);
|
float g2 = getGrid(uSize2);
|
||||||
gl_FragColor = vec4(uColor.rgb, mix(g2, g1, g1) * pow(d, 10.0));
|
gl_FragColor = vec4(uColor.rgb, mix(g2, g1, g1) * pow(d, 10.0));
|
||||||
|
|||||||
Reference in new issue
Block a user