diff --git a/packages/website/src/components/Tankopedia/HeroSection/components/TankSandbox/components/SceneProps/index.tsx b/packages/website/src/components/Tankopedia/HeroSection/components/TankSandbox/components/SceneProps/index.tsx index f306c6eb1..87736566b 100644 --- a/packages/website/src/components/Tankopedia/HeroSection/components/TankSandbox/components/SceneProps/index.tsx +++ b/packages/website/src/components/Tankopedia/HeroSection/components/TankSandbox/components/SceneProps/index.tsx @@ -1,7 +1,9 @@ import { invalidate } from "@react-three/fiber"; import { Quicklime, type QuicklimeEvent } from "quicklime"; import { useEffect, useRef } from "react"; -import { Mesh, MeshStandardMaterial } from "three"; +import { Mesh, MeshStandardMaterial, Vector3 } from "three"; +import fragmentShader from "./shaders/fragment.glsl?raw"; +import vertexShader from "./shaders/vertex.glsl?raw"; const SIZE = 2 ** 5; @@ -33,11 +35,15 @@ export function SceneProps() { ref={mesh} > - ); diff --git a/packages/website/src/components/Tankopedia/HeroSection/components/TankSandbox/components/SceneProps/shaders/fragment.glsl b/packages/website/src/components/Tankopedia/HeroSection/components/TankSandbox/components/SceneProps/shaders/fragment.glsl new file mode 100644 index 000000000..7f83b2e0d --- /dev/null +++ b/packages/website/src/components/Tankopedia/HeroSection/components/TankSandbox/components/SceneProps/shaders/fragment.glsl @@ -0,0 +1,16 @@ +varying vec3 vWorldPosition; +uniform float size; +uniform vec3 color; + +void main() { + vec3 scaled = vWorldPosition / size; + float radius = length(scaled.xz); + + if(radius >= 1.0) { + discard; + } + + float a = 1.0 - radius; + + gl_FragColor = vec4(color, a); +} \ No newline at end of file diff --git a/packages/website/src/components/Tankopedia/HeroSection/components/TankSandbox/components/SceneProps/shaders/vertex.glsl b/packages/website/src/components/Tankopedia/HeroSection/components/TankSandbox/components/SceneProps/shaders/vertex.glsl new file mode 100644 index 000000000..eb9f48934 --- /dev/null +++ b/packages/website/src/components/Tankopedia/HeroSection/components/TankSandbox/components/SceneProps/shaders/vertex.glsl @@ -0,0 +1,8 @@ +varying vec3 vWorldPosition; + +void main() { + vec4 worldPos = modelMatrix * vec4(position, 1.0); + vWorldPosition = worldPos.xyz; + + gl_Position = projectionMatrix * viewMatrix * worldPos; +} \ No newline at end of file