novatrix-background
eldoraui/novatrix-backgroundFreeComponent
A novatrix background component.
Live preview
live · rendered by the registry
Rendered by eldoraui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://eldoraui.site/r/novatrix-background.jsonSource
1"use client"23import { useEffect, useRef } from "react"4import { Color, Mesh, Program, Renderer, Triangle } from "ogl"56const vertexShader = `7attribute vec2 uv;8attribute vec2 position;910varying vec2 vUv;1112void main() {13 vUv = uv;14 gl_Position = vec4(position, 0, 1);15}16`1718const fragmentShader = `19precision highp float;2021uniform float uTime;22uniform vec3 uColor;23uniform vec3 uResolution;24uniform vec2 uMouse;25uniform float uAmplitude;26uniform float uSpeed;2728varying vec2 vUv;2930void main() {31 float mr = min(uResolution.x, uResolution.y);32 vec2 uv = (vUv.xy * 2.0 - 1.0) * uResolution.xy / mr;3334 uv += (uMouse - vec2(0.5)) * uAmplitude;3536 float d = -uTime * 0.5 * uSpeed;37 float a = 0.0;38 for (float i = 0.0; i < 8.0; ++i) {39 a += cos(i - d - a * uv.x);40 d += sin(uv.y * i + a);41 }42 d += uTime * 0.5 * uSpeed;43 vec3 col = vec3(cos(uv * vec2(d, a)) * 0.6 + 0.4, cos(a + d) * 0.5 + 0.5);44 col = cos(col * cos(vec3(d, a, 2.5)) * 0.5 + 0.5) * uColor;45 gl_FragColor = vec4(col, 1.0);46}47`4849interface NovatrixProps {50 color?: [number, number, number]51 speed?: number52 amplitude?: number53 mouseReact?: boolean54}5556export default function Novatrix({57 color = [1, 1, 1],58 speed = 1.0,59 amplitude = 0.1,60 mouseReact = false,61 ...rest62}: NovatrixProps) {63 const ctnDom = useRef<HTMLDivElement>(null)64 const mousePos = useRef({ x: 0.5, y: 0.5 })6566 useEffect(() => {67 if (!ctnDom.current) return68 const ctn = ctnDom.current69 const renderer = new Renderer()70 const gl = renderer.gl71 gl.clearColor(1, 1, 1, 1)7273 // eslint-disable-next-line prefer-const74 let program: Program7576 function resize() {77 const scale = 178 renderer.setSize(ctn.offsetWidth * scale, ctn.offsetHeight * scale)79 if (program) {80 program.uniforms.uResolution.value = new Color(81 gl.canvas.width,82 gl.canvas.height,83 gl.canvas.width / gl.canvas.height84 )85 }86 }87 window.addEventListener("resize", resize, false)88 resize()8990 const geometry = new Triangle(gl)91 program = new Program(gl, {92 vertex: vertexShader,93 fragment: fragmentShader,94 uniforms: {95 uTime: { value: 0 },96 uColor: { value: new Color(...color) },97 uResolution: {98 value: new Color(99 gl.canvas.width,100 gl.canvas.height,101 gl.canvas.width / gl.canvas.height102 ),103 },104 uMouse: {105// … truncated
What it pulls in
npm packages
Files it writes
More from eldoraui
All 115 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| animated-badgeanimated-badge | eldoraui | Components | Free | 2 deps | |
| animated-frameworksanimated-frameworks | eldoraui | Components | Free | 2 deps | |
| animated-grid-patternanimated-grid-pattern | eldoraui | Components | Free | 3 deps | |
| animated-listanimated-list | eldoraui | Components | Free | 1 dep | |
| animated-shiny-buttonanimated-shiny-button | eldoraui | Components | Free | 1 dep | |
| blur-in-textblur-in-text | eldoraui | Components | Free | 3 deps | |
| browserbrowser | eldoraui | Components | Free | 2 deps | |
| card-flip-hovercard-flip-hover | eldoraui | Components | Free | 1 dep |
