omg all planets moving

This commit is contained in:
Denis Manherz 2023-05-11 19:30:22 +02:00
parent 8b502be774
commit 654c1ca1ca
12 changed files with 264 additions and 132 deletions

56
src/CameraControls.jsx Normal file
View file

@ -0,0 +1,56 @@
import { Canvas, useFrame, useThree } from "@react-three/fiber";
import { OrbitControls, PositionPoint } from "@react-three/drei";
import React, {
Suspense,
useRef,
createContext,
memo,
useState,
useContext,
} from "react";
import * as THREE from "three";
import { ScreenOverlay } from "./omnioverlay.jsx";
import { SharedPlanetState } from "./SharedPlanetState.jsx";
import { Skybox } from "./skybox.jsx";
import { MyContext } from "./Scene3.jsx";
export const CameraController = () => {
const { customData } = useContext(MyContext);
const [distance, setDistance] = useState(5);
const [lookAt, setLookAt] = useState(new THREE.Vector3(0, 0, 0));
const [position, setPosition] = useState(new THREE.Vector3(0, 0, 200));
const [animate, setAnimate] = useState(true);
const { camera } = useThree();
const state = useThree();
const relativePosition = new THREE.Vector3(0, 0, distance);
const handleLookAt = (pos) => {
setLookAt(pos);
};
customData.current["handleLookAt"] = handleLookAt;
const handlePosition = (pos) => {
const newPosition = pos.clone().add(relativePosition);
setPosition(newPosition);
setAnimate(true);
//console.log(newPosition);
};
customData.current["handlePosition"] = handlePosition;
useFrame(() => {
//console.log(state);
if (animate) {
camera.position.lerp(position, 0.1);
camera.lookAt(lookAt);
if (camera.position.distanceTo(position) < 0.1) {
setAnimate(false);
}
}
//cameraRef.current.position.addScalar(2);
//camera.position.addScalar(1);
//console.log(camera);
});
return <></>;
};

View file

@ -5,6 +5,7 @@ import React, { Suspense, useRef, createContext, memo } from "react";
import { ScreenOverlay } from "./omnioverlay.jsx"; import { ScreenOverlay } from "./omnioverlay.jsx";
import { SharedPlanetState } from "./SharedPlanetState.jsx"; import { SharedPlanetState } from "./SharedPlanetState.jsx";
import { Skybox } from "./skybox.jsx"; import { Skybox } from "./skybox.jsx";
import { CameraController } from "./CameraControls.jsx";
export const MyContext = createContext(); export const MyContext = createContext();
@ -25,6 +26,7 @@ const SolarSystemScene = () => {
position: [0, 100, 200], position: [0, 100, 200],
}} }}
> >
<CameraController />
<Skybox /> <Skybox />
<ambientLight intensity={0.5} /> <ambientLight intensity={0.5} />
<SharedPlanetState /> <SharedPlanetState />

View file

@ -30,7 +30,6 @@ export const PlanetOverlayContext = createContext();
export const SharedPlanetState = () => { export const SharedPlanetState = () => {
const { customData } = useContext(MyContext); const { customData } = useContext(MyContext);
let fetchnum = useRef(0);
let [nameVis, setNameVis] = useState("visible"); let [nameVis, setNameVis] = useState("visible");
let [iconVis, setIconVis] = useState("visible"); let [iconVis, setIconVis] = useState("visible");
@ -59,7 +58,7 @@ export const SharedPlanetState = () => {
customData.current["handleReset"] = handleReset; customData.current["handleReset"] = handleReset;
//set speed (timeinterval between positions 60000ms*speed) //set speed (timeinterval between positions 60000ms*speed)
const [speed, setSpeed] = useState(1); const [speed, setSpeed] = useState(100);
const updateSpeed = (newSpeed) => { const updateSpeed = (newSpeed) => {
setSpeed(newSpeed); setSpeed(newSpeed);
setSpeedChanged(true); setSpeedChanged(true);

View file

@ -125,7 +125,7 @@ export const Earth = ({ speed, getPosition, speedChanged }) => {
linePos={lineArr.current} linePos={lineArr.current}
planet={group} planet={group}
color={"lightgreen"} color={"lightgreen"}
lineLength={20} lineLength={100}
/> />
<group ref={group}> <group ref={group}>
<PlanetOverlay planet={group} /> <PlanetOverlay planet={group} />

View file

@ -15,7 +15,7 @@ import { PlanetOverlay } from "./planetOverlay";
import { PlanetPath } from "./path"; import { PlanetPath } from "./path";
import { MyContext } from "./Scene3"; import { MyContext } from "./Scene3";
export const Jupiter = ({ getPosition, speed }) => { export const Jupiter = ({ getPosition, speed, speedChanged }) => {
const group = useRef(); const group = useRef();
const col = useLoader(TextureLoader, "../img/jupiter/jupiter2_4k.jpg"); const col = useLoader(TextureLoader, "../img/jupiter/jupiter2_4k.jpg");
@ -23,6 +23,7 @@ export const Jupiter = ({ getPosition, speed }) => {
const lineArr = useRef([]); const lineArr = useRef([]);
let planetPositionIndex = useRef(0); let planetPositionIndex = useRef(0);
const lastPositionUpdate = useRef(0);
let distanceScaleFactor = 1000000; let distanceScaleFactor = 1000000;
@ -32,13 +33,19 @@ export const Jupiter = ({ getPosition, speed }) => {
group.current.userData.scolor = "yellow"; group.current.userData.scolor = "yellow";
}); });
useFrame(() => { useFrame(({ clock }) => {
//getPosition("jupiter", setPosArr, posArr, planetPositionIndex.current); //getPosition("jupiter", setPosArr, posArr, planetPositionIndex.current);
const timeSinceLastUpdate = clock.elapsedTime - lastPositionUpdate.current;
if (timeSinceLastUpdate >= 2 || speedChanged) {
//console.log("gethis");
getPosition("jupiter", setPosArr, posArr, planetPositionIndex.current);
lastPositionUpdate.current = clock.elapsedTime;
}
//if speed is 0 set the date to current date get from posArr //if speed is 0 set the date to current date get from posArr
//search for current date in posArr an set planetPositionIndex //search for current date in posArr an set planetPositionIndex
if (speed == 0) planetPositionIndex.current = 0; if (speed == 0) planetPositionIndex.current = 0;
if (false && planetPositionIndex.current < posArr.length) { if (true && planetPositionIndex.current < posArr.length) {
group.current.position.set( group.current.position.set(
Number( Number(
posArr[planetPositionIndex.current].position.x / distanceScaleFactor posArr[planetPositionIndex.current].position.x / distanceScaleFactor
@ -75,7 +82,7 @@ export const Jupiter = ({ getPosition, speed }) => {
linePos={lineArr.current} linePos={lineArr.current}
planet={group} planet={group}
color={"yellow"} color={"yellow"}
lineLength={20} lineLength={400}
/> />
<group ref={group}> <group ref={group}>
<PlanetOverlay planet={group} /> <PlanetOverlay planet={group} />

View file

@ -82,7 +82,7 @@ export const Mars = ({ speed, getPosition, speedChanged }) => {
linePos={lineArr.current} linePos={lineArr.current}
planet={group} planet={group}
color={"orange"} color={"orange"}
lineLength={20} lineLength={150}
/> />
<group ref={group}> <group ref={group}>
<PlanetOverlay planet={group} /> <PlanetOverlay planet={group} />

View file

@ -19,12 +19,13 @@ import "./styles.css";
import { PlanetOverlay } from "./planetOverlay"; import { PlanetOverlay } from "./planetOverlay";
import { PlanetPath } from "./path"; import { PlanetPath } from "./path";
export const Mercury = ({ speed, getPosition }) => { export const Mercury = ({ speed, getPosition, speedChanged }) => {
const [posArr, setPosArr] = useState([]); const [posArr, setPosArr] = useState([]);
const lineArr = useRef([]); const lineArr = useRef([]);
let planetPositionIndex = useRef(0); let planetPositionIndex = useRef(0);
let distanceScaleFactor = 1000000; let distanceScaleFactor = 1000000;
const mercury = useRef(); const mercury = useRef();
const lastPositionUpdate = useRef(0);
const group = useRef(); const group = useRef();
useLayoutEffect(() => { useLayoutEffect(() => {
@ -33,13 +34,19 @@ export const Mercury = ({ speed, getPosition }) => {
group.current.userData.scolor = "#a34f5f"; group.current.userData.scolor = "#a34f5f";
}, []); }, []);
useFrame(() => { useFrame(({ clock }) => {
//getPosition("mercury", setPosArr, posArr, planetPositionIndex.current); //getPosition("mercury", setPosArr, posArr, planetPositionIndex.current);
const timeSinceLastUpdate = clock.elapsedTime - lastPositionUpdate.current;
if (timeSinceLastUpdate >= 2 || speedChanged) {
//console.log("gethis");
getPosition("mercury", setPosArr, posArr, planetPositionIndex.current);
lastPositionUpdate.current = clock.elapsedTime;
}
//if speed is 0 set the date to current date get from posArr //if speed is 0 set the date to current date get from posArr
//search for current date in posArr an set planetPositionIndex //search for current date in posArr an set planetPositionIndex
if (speed == 0) planetPositionIndex.current = 0; if (speed == 0) planetPositionIndex.current = 0;
if (false && planetPositionIndex.current < posArr.length) { if (true && planetPositionIndex.current < posArr.length) {
group.current.position.set( group.current.position.set(
Number( Number(
posArr[planetPositionIndex.current].position.x / distanceScaleFactor posArr[planetPositionIndex.current].position.x / distanceScaleFactor
@ -51,7 +58,7 @@ export const Mercury = ({ speed, getPosition }) => {
posArr[planetPositionIndex.current].position.z / distanceScaleFactor posArr[planetPositionIndex.current].position.z / distanceScaleFactor
) )
); );
planetPositionIndex.current += Number(speed); planetPositionIndex.current += Number(1);
lineArr.current.push( lineArr.current.push(
new THREE.Vector3( new THREE.Vector3(
Number( Number(
@ -75,7 +82,7 @@ export const Mercury = ({ speed, getPosition }) => {
linePos={lineArr.current} linePos={lineArr.current}
planet={group} planet={group}
color={"#a34f5f"} color={"#a34f5f"}
lineLength={20} lineLength={100}
/> />
<group ref={group}> <group ref={group}>
<PlanetOverlay planet={group} /> <PlanetOverlay planet={group} />

View file

@ -37,18 +37,19 @@ import { PlanetOverlay } from "./planetOverlay";
import { PlanetPath } from "./path"; import { PlanetPath } from "./path";
import { MyContext } from "./Scene3"; import { MyContext } from "./Scene3";
export const Neptune = ({ positions }) => { export const Neptune = ({ speedChanged, getPosition, speed }) => {
const [poss, setPos] = useState([]); const [poss, setPos] = useState([]);
const [lineposs, setLinePos] = useState([]);
const [getAgain, setGetAgain] = useState(false);
const [speed, setSpeed] = useState(60);
let distanceScaleFactor = 1000000; let distanceScaleFactor = 1000000;
const neptune = useRef(); const neptune = useRef();
const group = useRef(); const group = useRef();
const lineArr = useRef([]);
const [posArr, setPosArr] = useState([]);
let planetPositionIndex = useRef(0);
const firstRef = useRef(true);
let linePoss = [];
const { customData } = useContext(MyContext); const { customData } = useContext(MyContext);
const lastPositionUpdate = useRef(0);
useLayoutEffect(() => { useLayoutEffect(() => {
group.current.userData.counter = 0; group.current.userData.counter = 0;
@ -57,21 +58,44 @@ export const Neptune = ({ positions }) => {
group.current.userData.scolor = "darkblue"; group.current.userData.scolor = "darkblue";
}, []); }, []);
useFrame(() => { useFrame(({ clock }) => {
if (false && group.current.userData.counter < poss.length) { const timeSinceLastUpdate = clock.elapsedTime - lastPositionUpdate.current;
if (timeSinceLastUpdate >= 2 || speedChanged) {
//console.log("gethis");
getPosition("neptune", setPosArr, posArr, planetPositionIndex.current);
lastPositionUpdate.current = clock.elapsedTime;
}
if (speed == 0) planetPositionIndex.current = 0;
if (
true &&
planetPositionIndex.current < posArr.length &&
posArr.length > 0
) {
group.current.position.set( group.current.position.set(
Number( Number(
poss[group.current.userData.counter].position.x / distanceScaleFactor posArr[planetPositionIndex.current].position.x / distanceScaleFactor
), ),
Number( Number(
poss[group.current.userData.counter].position.y / distanceScaleFactor posArr[planetPositionIndex.current].position.y / distanceScaleFactor
), ),
Number( Number(
poss[group.current.userData.counter].position.z / distanceScaleFactor posArr[planetPositionIndex.current].position.z / distanceScaleFactor
)
);
planetPositionIndex.current += Number(1);
lineArr.current.push(
new THREE.Vector3(
Number(
posArr[planetPositionIndex.current].position.x / distanceScaleFactor
),
Number(
posArr[planetPositionIndex.current].position.y / distanceScaleFactor
),
Number(
posArr[planetPositionIndex.current].position.z / distanceScaleFactor
)
) )
); );
//console.log(group.current.userData.counter);
group.current.userData.counter++;
} }
}, []); }, []);
@ -86,6 +110,12 @@ export const Neptune = ({ positions }) => {
const col = useLoader(TextureLoader, "../img/neptune/neptunemap.jpg"); const col = useLoader(TextureLoader, "../img/neptune/neptunemap.jpg");
return ( return (
<> <>
<PlanetPath
linePos={lineArr.current}
planet={group}
color={"darkblue"}
lineLength={20}
/>
<group ref={group}> <group ref={group}>
<PlanetOverlay planet={group} /> <PlanetOverlay planet={group} />
<mesh ref={neptune}> <mesh ref={neptune}>

View file

@ -62,6 +62,8 @@ export const PlanetOverlay = ({ planet }) => {
case 0: case 0:
controls.current.target.copy(planet.current.position.clone()); controls.current.target.copy(planet.current.position.clone());
customData.current.showInfo(planet.current.userData); customData.current.showInfo(planet.current.userData);
customData.current.handlePosition(planet.current.position);
customData.current.handleLookAt(planet.current.position);
console.log(customData); console.log(customData);
//startFollow(); //startFollow();
break; break;

View file

@ -59,11 +59,12 @@ void main() {
extend({ SaturnRingMaterial }); extend({ SaturnRingMaterial });
export const Saturn = ({ positions }) => { export const Saturn = ({ speed, speedChanged, getPosition }) => {
const [poss, setPos] = useState([]); const [posArr, setPosArr] = useState([]);
const [lineposs, setLinePos] = useState([]); const lineArr = useRef([]);
const [getAgain, setGetAgain] = useState(false); const lastPositionUpdate = useRef(0);
const [speed, setSpeed] = useState(60);
let planetPositionIndex = useRef(0);
const saturn = useRef("saturn"); const saturn = useRef("saturn");
const group = useRef("group"); const group = useRef("group");
const col = useLoader(TextureLoader, "../img/saturn/saturnmap.jpg"); const col = useLoader(TextureLoader, "../img/saturn/saturnmap.jpg");
@ -74,10 +75,6 @@ export const Saturn = ({ positions }) => {
); );
let distanceScaleFactor = 1000000; let distanceScaleFactor = 1000000;
const firstRef = useRef(true);
let linePoss = [];
const { customData } = useContext(MyContext);
useLayoutEffect(() => { useLayoutEffect(() => {
group.current.userData.counter = 0; group.current.userData.counter = 0;
group.current.userData.name = "Saturn"; group.current.userData.name = "Saturn";
@ -85,34 +82,59 @@ export const Saturn = ({ positions }) => {
group.current.userData.scolor = "red"; group.current.userData.scolor = "red";
}, []); }, []);
useFrame(() => { useFrame(({ clock }) => {
if (true && group.current.userData.counter < poss.length) { const timeSinceLastUpdate = clock.elapsedTime - lastPositionUpdate.current;
if (timeSinceLastUpdate >= 2 || speedChanged) {
//console.log("gethis");
getPosition("saturn", setPosArr, posArr, planetPositionIndex.current);
lastPositionUpdate.current = clock.elapsedTime;
}
//console.log("arrlength" + posArr.length);
//if speed is 0 set the date to current date get from posArr
//search for current date in posArr an set planetPositionIndex
if (speed == 0) planetPositionIndex.current = 0;
if (
true &&
planetPositionIndex.current < posArr.length &&
posArr.length > 0
) {
group.current.position.set( group.current.position.set(
Number( Number(
poss[group.current.userData.counter].position.x / distanceScaleFactor posArr[planetPositionIndex.current].position.x / distanceScaleFactor
), ),
Number( Number(
poss[group.current.userData.counter].position.y / distanceScaleFactor posArr[planetPositionIndex.current].position.y / distanceScaleFactor
), ),
Number( Number(
poss[group.current.userData.counter].position.z / distanceScaleFactor posArr[planetPositionIndex.current].position.z / distanceScaleFactor
)
);
planetPositionIndex.current += Number(1);
lineArr.current.push(
new THREE.Vector3(
Number(
posArr[planetPositionIndex.current].position.x / distanceScaleFactor
),
Number(
posArr[planetPositionIndex.current].position.y / distanceScaleFactor
),
Number(
posArr[planetPositionIndex.current].position.z / distanceScaleFactor
)
) )
); );
//console.log(group.current.userData.counter);
group.current.userData.counter++;
} }
}, []); }, []);
const changeSpeed = (newSpeed) => {
setPos(poss.slice(0, group.current.userData.counter + 10));
setGetAgain(true);
console.log(poss);
setSpeed(newSpeed);
};
customData.current["changeSaturnSpeed"] = changeSpeed;
return ( return (
<> <>
<PlanetPath
linePos={lineArr.current}
planet={group}
color={"red"}
lineLength={300}
/>
<group ref={group}> <group ref={group}>
<PlanetOverlay planet={group} /> <PlanetOverlay planet={group} />
<mesh ref={saturn}> <mesh ref={saturn}>

View file

@ -36,20 +36,17 @@ import { PlanetOverlay } from "./planetOverlay";
import { PlanetPath } from "./path"; import { PlanetPath } from "./path";
import { MyContext } from "./Scene3"; import { MyContext } from "./Scene3";
export const Uranus = ({ positions }) => { export const Uranus = ({ speed, speedChanged, getPosition }) => {
let distanceScaleFactor = 1000000; let distanceScaleFactor = 1000000;
const [posArr, setPosArr] = useState([]);
const lineArr = useRef([]);
const lastPositionUpdate = useRef(0);
let planetPositionIndex = useRef(0);
const [poss, setPos] = useState([]);
const [lineposs, setLinePos] = useState([]);
const [getAgain, setGetAgain] = useState(false);
const [speed, setSpeed] = useState(60);
const uranus = useRef(); const uranus = useRef();
const group = useRef(); const group = useRef();
const firstRef = useRef(true);
let linePoss = [];
const { customData } = useContext(MyContext);
useLayoutEffect(() => { useLayoutEffect(() => {
group.current.userData.counter = 0; group.current.userData.counter = 0;
group.current.userData.name = "Uranus"; group.current.userData.name = "Uranus";
@ -57,63 +54,60 @@ export const Uranus = ({ positions }) => {
group.current.userData.scolor = "lightblue"; group.current.userData.scolor = "lightblue";
}, []); }, []);
useFrame(() => { useFrame(({ clock }) => {
if (poss.length % 1000 == 0) { const timeSinceLastUpdate = clock.elapsedTime - lastPositionUpdate.current;
setPos(poss.slice(0, 500)); if (timeSinceLastUpdate >= 2 || speedChanged) {
//console.log("gethis");
getPosition("uranus", setPosArr, posArr, planetPositionIndex.current);
lastPositionUpdate.current = clock.elapsedTime;
} }
let date; //console.log("arrlength" + posArr.length);
if (firstRef.current) {
date = new Date(Date.now());
date.setMilliseconds(0);
date.setSeconds(0);
}
//console.log(poss.length);
//console.log(group.current.userData.counter);
if (false && group.current.userData.counter % 250 == 0 && getAgain) {
if (!firstRef.current)
date = new Date(poss[poss.length - 1].date).toUTCString();
const fetchData = async () => {
let res = await fetch(
`http://127.0.0.1:8000/duration/uranus?date=${date}&speed=${speed}` //example and simple data
);
let response = await res.json();
setPos(poss.concat(response)); // parse json //if speed is 0 set the date to current date get from posArr
firstRef.current = false; //search for current date in posArr an set planetPositionIndex
setGetAgain(false); if (speed == 0) planetPositionIndex.current = 0;
//console.log(`psss : ${poss.length}`); if (
}; true &&
fetchData(); planetPositionIndex.current < posArr.length &&
} posArr.length > 0
if (true && group.current.userData.counter < poss.length) { ) {
group.current.position.set( group.current.position.set(
Number( Number(
poss[group.current.userData.counter].position.x / distanceScaleFactor posArr[planetPositionIndex.current].position.x / distanceScaleFactor
), ),
Number( Number(
poss[group.current.userData.counter].position.y / distanceScaleFactor posArr[planetPositionIndex.current].position.y / distanceScaleFactor
), ),
Number( Number(
poss[group.current.userData.counter].position.z / distanceScaleFactor posArr[planetPositionIndex.current].position.z / distanceScaleFactor
)
);
planetPositionIndex.current += Number(1);
lineArr.current.push(
new THREE.Vector3(
Number(
posArr[planetPositionIndex.current].position.x / distanceScaleFactor
),
Number(
posArr[planetPositionIndex.current].position.y / distanceScaleFactor
),
Number(
posArr[planetPositionIndex.current].position.z / distanceScaleFactor
)
) )
); );
//console.log(group.current.userData.counter);
group.current.userData.counter++;
} }
}, []); }, []);
const changeSpeed = (newSpeed) => {
setPos(poss.slice(0, group.current.userData.counter + 10));
setGetAgain(true);
console.log(poss);
setSpeed(newSpeed);
};
customData.current["changeUranusSpeed"] = changeSpeed;
const col = useLoader(TextureLoader, "../img/uranus/uranusmap.jpg"); const col = useLoader(TextureLoader, "../img/uranus/uranusmap.jpg");
return ( return (
<> <>
<PlanetPath
linePos={lineArr.current}
planet={group}
color={"lightblue"}
lineLength={200}
/>
<group ref={group}> <group ref={group}>
<PlanetOverlay planet={group} /> <PlanetOverlay planet={group} />
<mesh ref={uranus}> <mesh ref={uranus}>

View file

@ -36,15 +36,15 @@ import { PlanetOverlay } from "./planetOverlay";
import { PlanetPath } from "./path"; import { PlanetPath } from "./path";
import { MyContext } from "./Scene3"; import { MyContext } from "./Scene3";
export const Venus = ({ positions }) => { export const Venus = ({ speed, speedChanged, getPosition }) => {
let distanceScaleFactor = 1000000; let distanceScaleFactor = 1000000;
const [posArr, setPosArr] = useState([]);
const lineArr = useRef([]);
const lastPositionUpdate = useRef(0);
let planetPositionIndex = useRef(0);
const venus = useRef(); const venus = useRef();
const group = useRef(); const group = useRef();
const firstRef = useRef(true);
const [poss, setPos] = useState([]);
const [lineposs, setLinePos] = useState([]);
const [getAgain, setGetAgain] = useState(false);
const [speed, setSpeed] = useState(60);
const { customData } = useContext(MyContext); const { customData } = useContext(MyContext);
useLayoutEffect(() => { useLayoutEffect(() => {
@ -54,48 +54,61 @@ export const Venus = ({ positions }) => {
group.current.userData.scolor = "brown"; group.current.userData.scolor = "brown";
}, []); }, []);
useFrame(() => { useFrame(({ clock }) => {
if (poss.length % 1000 == 0) { const timeSinceLastUpdate = clock.elapsedTime - lastPositionUpdate.current;
setPos(poss.slice(0, 500)); if (timeSinceLastUpdate >= 2 || speedChanged) {
//console.log("gethis");
getPosition("venus", setPosArr, posArr, planetPositionIndex.current);
lastPositionUpdate.current = clock.elapsedTime;
} }
let date; //console.log("arrlength" + posArr.length);
if (firstRef.current) {
date = new Date(Date.now()); //if speed is 0 set the date to current date get from posArr
date.setMilliseconds(0); //search for current date in posArr an set planetPositionIndex
date.setSeconds(0); if (speed == 0) planetPositionIndex.current = 0;
} if (
//console.log(poss.length); true &&
//console.log(group.current.userData.counter); planetPositionIndex.current < posArr.length &&
if (false && group.current.userData.counter < poss.length) { posArr.length > 0
) {
group.current.position.set( group.current.position.set(
Number( Number(
poss[group.current.userData.counter].position.x / distanceScaleFactor posArr[planetPositionIndex.current].position.x / distanceScaleFactor
), ),
Number( Number(
poss[group.current.userData.counter].position.y / distanceScaleFactor posArr[planetPositionIndex.current].position.y / distanceScaleFactor
), ),
Number( Number(
poss[group.current.userData.counter].position.z / distanceScaleFactor posArr[planetPositionIndex.current].position.z / distanceScaleFactor
)
);
planetPositionIndex.current += Number(1);
lineArr.current.push(
new THREE.Vector3(
Number(
posArr[planetPositionIndex.current].position.x / distanceScaleFactor
),
Number(
posArr[planetPositionIndex.current].position.y / distanceScaleFactor
),
Number(
posArr[planetPositionIndex.current].position.z / distanceScaleFactor
)
) )
); );
//console.log(group.current.userData.counter);
group.current.userData.counter++;
} }
}, []); }, []);
const changeSpeed = (newSpeed) => {
setPos(poss.slice(0, group.current.userData.counter + 10));
setGetAgain(true);
console.log(poss);
setSpeed(newSpeed);
};
customData.current["changeVenusSpeed"] = changeSpeed;
const col = useLoader(TextureLoader, "../img/venus/venusmap.jpg"); const col = useLoader(TextureLoader, "../img/venus/venusmap.jpg");
const bump = useLoader(TextureLoader, "../img/venus/venusbump.jpg"); const bump = useLoader(TextureLoader, "../img/venus/venusbump.jpg");
return ( return (
<> <>
<PlanetPath
linePos={lineArr.current}
planet={group}
color={"brown"}
lineLength={100}
/>
<group ref={group}> <group ref={group}>
<PlanetOverlay planet={group} /> <PlanetOverlay planet={group} />
<mesh ref={venus}> <mesh ref={venus}>