fixed build errors
This commit is contained in:
@@ -1,12 +1,15 @@
|
||||
"use client";
|
||||
|
||||
import * as THREE from "three";
|
||||
import { Canvas, useFrame } from "@react-three/fiber";
|
||||
import { OrbitControls, useTexture } from "@react-three/drei";
|
||||
import { useRef } from "react";
|
||||
import { Line, OrbitControls, useTexture } from "@react-three/drei";
|
||||
import { useMemo, useRef } from "react";
|
||||
|
||||
type RotatableGroup = {
|
||||
rotation: { y: number };
|
||||
};
|
||||
|
||||
function Globe() {
|
||||
const groupRef = useRef<THREE.Group>(null);
|
||||
const groupRef = useRef<RotatableGroup | null>(null);
|
||||
const cloudTexture = useTexture("/images/cloud1.png");
|
||||
|
||||
// Rotate the globe slowly
|
||||
@@ -17,7 +20,7 @@ function Globe() {
|
||||
});
|
||||
|
||||
// Coordinates for markers (half-globe)
|
||||
const points = [
|
||||
const markers = [
|
||||
[0, 1, 0],
|
||||
[0.7, 0.5, 0.2],
|
||||
[-0.5, 0.4, 0.5],
|
||||
@@ -25,42 +28,47 @@ function Globe() {
|
||||
[-0.6, -0.1, 0.3],
|
||||
[0.3, -0.2, 0.8],
|
||||
];
|
||||
const arcPoints = useMemo(() => {
|
||||
const radius = 2.5;
|
||||
const verticalRadius = radius / 2;
|
||||
const segments = 120;
|
||||
|
||||
return Array.from({ length: 8 }, () => {
|
||||
const points: number[] = [];
|
||||
for (let i = 0; i < segments; i++) {
|
||||
const t = (i / (segments - 1)) * Math.PI;
|
||||
const x = Math.cos(t) * radius;
|
||||
const z = Math.sin(t) * verticalRadius;
|
||||
const y = Math.sin(x / radius) * 0.5;
|
||||
points.push(x, y, z);
|
||||
}
|
||||
return points;
|
||||
});
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<group ref={groupRef}>
|
||||
{/* Cyan arcs */}
|
||||
{Array.from({ length: 8 }).map((_, i) => {
|
||||
const radius = 2.5;
|
||||
const curve = new THREE.EllipseCurve(
|
||||
0,
|
||||
0,
|
||||
radius,
|
||||
radius / 2,
|
||||
0,
|
||||
Math.PI,
|
||||
false,
|
||||
0
|
||||
);
|
||||
const points = curve.getPoints(100);
|
||||
const geometry = new THREE.BufferGeometry().setFromPoints(
|
||||
points.map((p) => new THREE.Vector3(p.x, Math.sin(p.x / radius) * 0.5, p.y))
|
||||
);
|
||||
return (
|
||||
<line key={i} geometry={geometry}>
|
||||
<lineBasicMaterial color="#00e5ff" linewidth={1} transparent opacity={0.5} />
|
||||
</line>
|
||||
);
|
||||
})}
|
||||
{arcPoints.map((points, i) => (
|
||||
<Line
|
||||
key={i}
|
||||
points={points}
|
||||
color="#00e5ff"
|
||||
lineWidth={1}
|
||||
transparent
|
||||
opacity={0.5}
|
||||
/>
|
||||
))}
|
||||
|
||||
{/* Cloud markers */}
|
||||
{points.map(([x, y, z], i) => (
|
||||
{markers.map(([x, y, z], i) => (
|
||||
<mesh key={i} position={[x * 2.5, y * 2.5, z * 2.5]}>
|
||||
<planeGeometry args={[0.3, 0.3]} />
|
||||
<meshBasicMaterial
|
||||
map={cloudTexture}
|
||||
transparent
|
||||
opacity={1}
|
||||
side={THREE.DoubleSide}
|
||||
side={2 /* DoubleSide */}
|
||||
/>
|
||||
</mesh>
|
||||
))}
|
||||
|
||||
Reference in New Issue
Block a user