-
Esse projeto tem intuito de criar um exemplo de Three.Js em Vue 3 Script Setup (Composition API), já que não há exemplos na internet, então adaptei o modelo para tornar um modelo público para utilização. Além de ser um modelo, serve também como uma representação da órbita da terra em relação ao sol e da lua em relação a terra, na velocidade real.
-
Qualquer bug encontrado, gerar um Issue
-
Toda a lógica e funções você encontrará aqui
- A escala deste projeto será de 1/10000, neste momento a escala ainda não está 100% assertiva.
- A iluminação dos corpos selestes, está sendo feita pelo sol, existe uma fonte de emissão de luz dentro do modelo 3d do sol
-
A orbita da terra em relação ao sol está sendo definida nesta parte.
-
- Foi utilizada a biblioteca SunCalc para auxiliar na posição da terra e cálculo da velocidade.
-
const moonPhi = ((90 - (moonPos.altitude * 180) / Math.PI) * Math.PI) / 180; const moonTheta = (((moonPos.azimuth * 180) / Math.PI - 90) * Math.PI) / 180; const moonX = moonDist * Math.sin(moonPhi) * Math.cos(moonTheta); const moonY = moonDist * Math.sin(moonPhi) * Math.sin(moonTheta); const moonZ = moonDist * Math.cos(moonPhi);
A orbita da lua em relação a terra -
const pos = SunCalc.getPosition(date, 0, 0); const dist = 150; // Distância média da Terra ao Sol em milhões de km const phi = ((90 - (pos.altitude * 180) / Math.PI) * Math.PI) / 180; const theta = (((pos.azimuth * 180) / Math.PI - 90) * Math.PI) / 180; const x = dist * Math.sin(phi) * Math.cos(theta); const y = dist * Math.sin(phi) * Math.sin(theta); const z = dist * Math.cos(phi);
Posição heliocêntrica da terra
moon.position.set(130, 0, 0);
Ajusta a posição da Lua em relação à Terra (não a distância, a distância é dentro da função 'animate()' onde tem a variávelmoonDistance = 30;
earth.position.setFromSphericalCoords( distance, azimuth - Math.PI / 2, altitude );
Atualização da posição da terra em relação ao solearth.position.set(150, 0, 0);
Ajusta a posição da Terr em relação ao Sol
camera.position.set(50, 50, 50);
Posição da câmeracontrols.maxDistance = 10000;
Aumenta distância máxima da câmeracontrols.rotateSpeed = 0.5;
Velocidade de rotação da câmera
- Implementar todos os planetas
- Câmera livre
- Velocidade real de todos os astros
- Movimentos de translação
- Componentizar funções
- Comportamento gravitacional que um corpo celeste exerce pelo o outro
- https://github.com/MarioFBSantos/orbit/tree/master/public/images Em cada pasta, contém a licença de cada asset em 3D, não modelei nenhum asset e não pretendo utilizar os modelos 3d para intuitos financeiros.