import React,{useRef}from "react"; import{Canvas,useFrame}from "@react-three/fiber"; import * as THREE from "three"; function EnhancedWireframeDiamond(){const meshRef = useRef();const groupRef = useRef();// Создаем несколько слоев геометрии для объема const createDiamondGeometry = () =>{const baseGeo = new THREE.OctahedronGeometry(1,0);const wireframe = new THREE.WireframeGeometry(baseGeo);return{baseGeo,wireframe}}const{baseGeo,wireframe}= createDiamondGeometry();useFrame((state) => {if (groupRef.current) {const time = state.clock.elapsedTime; // Вращение с разной скоростью для каждой оси groupRef.current.rotation.x = time * .3; groupRef.current.rotation.y = time * .5; groupRef.current.rotation.z = time * .2; // Легкая пульсация const pulse = 1 + Math.sin(time * 1.5) * .05; groupRef.current.scale.setScalar(pulse);}});return (<group ref={groupRef}> {} <lineSegments geometry={wireframe}> <lineBasicMaterial color="#00ff88" linewidth={3} transparent={true} opacity={1} /> </lineSegments> {} <lineSegments geometry={wireframe}> <lineBasicMaterial color="#00ff88" linewidth={1} transparent={true} opacity={.3} /> </lineSegments> {} {baseGeo.vertices?.map((vertex,index) => (<mesh key={index} position={vertex}> <sphereGeometry args={[.03,8,8]} /> <meshBasicMaterial color="#00ff88" /> </mesh>))} </group>)}function RotatingDiamond(){return (<div style={{width: "100vw",height: "100vh",backgroundColor: "#000",overflow: "hidden"}}> <Canvas camera={{position: [0,0,4],fov: 50}} onCreated={({gl}) => {gl.setClearColor("#000000");}} > <EnhancedWireframeDiamond /> {} <ambientLight intensity={.1} /> <pointLight position={[10,10,10]} intensity={.3} color="#00ff88" /> </Canvas> {} <div style={{position: "absolute",top: "50%",left: "50%",transform: "translate(-50%, -50%)",color: "rgba(0, 255, 136, 0.1)",fontFamily: "Arial, sans-serif",fontSize: "48px",fontWeight: "bold",textAlign: "center",pointerEvents: "none",userSelect: "none"}}> ◊ </div> </div>)}export default RotatingDiamond;{}
