/
daria_bel
/
VRLabs
Обзор
Документация
Войти
/
daria_bel
/
VRLabs
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Lab6_SolarSys/fcGlobus.cpp
150 строк
6 KB
Daria Bel
Лабораторные работы для daria_bel
14 май 2026, 09:22
14 май 2026, 09:22
e507b0f
Код
Авторство
О чём код?
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "fcGlobus.h" #include <Vcl.Imaging.jpeg.hpp> #include "GLS.Material.hpp" #include "GLS.Color.hpp" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "GLS.BaseClasses" #pragma link "GLS.Coordinates" #pragma link "GLS.Objects" #pragma link "GLS.Scene" #pragma link "GLS.SceneViewer" #pragma link "GLS.SimpleNavigation" #pragma link "GLS.GeomObjects" #pragma link "GLS.Material" #pragma link "GLS.Cadencer" #pragma resource "*.dfm" TFormGlobe *FormGlobe; //--------------------------------------------------------------------------- __fastcall TFormGlobe::TFormGlobe(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TFormGlobe::FormCreate(TObject *Sender) { // Звёздное небо SkySphere = new TGLSphere(GLScene1); SkySphere->Parent = GLDummyCube1; SkySphere->Radius = 500.0f; SkySphere->Slices = 32; SkySphere->Stacks = 32; SkySphere->Material->Texture->Enabled = true; SkySphere->Material->Texture->Image->LoadFromFile("assets\\maps\\stars.jpg"); SkySphere->Material->FaceCulling = fcNoCull; SkySphere->Material->FrontProperties->Ambient->Color = clrWhite; SkySphere->Material->FrontProperties->Diffuse->Color = clrWhite; // Земля sfPlanet->Material->Texture->Enabled = true; sfPlanet->Material->Texture->Image->LoadFromFile("assets\\maps\\topography.jpg"); // **СОЛНЦЕ С ТЕКСТУРОЙ** Sun->Material->Texture->Enabled = true; Sun->Material->Texture->Image->LoadFromFile("assets\\maps\\sun.jpg"); Sun->Material->FrontProperties->Emission->Color = clrYellow; Sun->Scale->X = 4; Sun->Scale->Y = 4; Sun->Scale->Z = 4; // Луна Moon->Material->Texture->Enabled = true; Moon->Material->Texture->Image->LoadFromFile("assets\\maps\\Moon.jpg"); Moon->Material->FrontProperties->Diffuse->Color = clrWhite; Moon->Scale->X = 0.4f; Moon->Scale->Y = 0.4f; Moon->Scale->Z = 0.4f; // Меркурий Mercury->Material->Texture->Enabled = true; Mercury->Material->Texture->Image->LoadFromFile("assets\\maps\\mercury.jpg"); Mercury->Scale->X = 0.38f; Mercury->Scale->Y = 0.38f; Mercury->Scale->Z = 0.38f; // Венера Venus->Material->Texture->Enabled = true; Venus->Material->Texture->Image->LoadFromFile("assets\\maps\\venus.jpg"); Venus->Scale->X = 0.95f; Venus->Scale->Y = 0.95f; Venus->Scale->Z = 0.95f; // Марс Mars->Material->Texture->Enabled = true; Mars->Material->Texture->Image->LoadFromFile("assets\\maps\\mars.jpg"); Mars->Scale->X = 0.53f; Mars->Scale->Y = 0.53f; Mars->Scale->Z = 0.53f; // Юпитер Jupiter->Material->Texture->Enabled = true; Jupiter->Material->Texture->Image->LoadFromFile("assets\\maps\\jupiter.jpg"); Jupiter->Scale->X = 11.2f; Jupiter->Scale->Y = 11.2f; Jupiter->Scale->Z = 11.2f; // Сатурн Saturn->Material->Texture->Enabled = true; Saturn->Material->Texture->Image->LoadFromFile("assets\\maps\\saturn.jpg"); Saturn->Scale->X = 9.45f; Saturn->Scale->Y = 9.45f; Saturn->Scale->Z = 9.45f; SaturnRings->Material->Texture->Enabled = true; SaturnRings->Material->Texture->Image->LoadFromFile("assets\\maps\\saturn_rings.jpg"); SaturnRings->Material->BlendingMode = bmTransparency; SaturnRings->Material->FrontProperties->Diffuse->Alpha = 0.8f; SaturnRings->InnerRadius = 10.0f; SaturnRings->OuterRadius = 16.0f; SaturnRings->PitchAngle = DegToRad(27.0f); // Уран Uranus->Material->Texture->Enabled = true; Uranus->Material->Texture->Image->LoadFromFile("assets\\maps\\uranus.jpg"); Uranus->Scale->X = 4.0f; Uranus->Scale->Y = 4.0f; Uranus->Scale->Z = 4.0f; // Нептун Neptune->Material->Texture->Enabled = true; Neptune->Material->Texture->Image->LoadFromFile("assets\\maps\\neptune.jpg"); Neptune->Scale->X = 3.88f; Neptune->Scale->Y = 3.88f; Neptune->Scale->Z = 3.88f; EarthOrbit->Position->X = 12.0f; GLCamera1->Position->Z = 35; } //--------------------------------------------------------------------------- void __fastcall TFormGlobe::GLCadencer1Progress(TObject *Sender, const double DeltaTime, const double NewTime) { // Солнце Sun->RollAngle = DegToRad(NewTime * 100); // Земля орбита float earthAngle = DegToRad(NewTime * 2); EarthOrbit->Position->X = 12 * cos(earthAngle); EarthOrbit->Position->Z = 12 * sin(earthAngle); // Земля вращение sfPlanet->RollAngle = DegToRad(NewTime * 200); // Луна орбита (вокруг Земли) float moonAngle = DegToRad(NewTime * 8); Moon->Position->X = 2.5f * cos(moonAngle); Moon->Position->Z = 2.5f * sin(moonAngle); Moon->RollAngle = DegToRad(NewTime * 300); // Орбиты (относительные угловые скорости) float mercuryOrbit = DegToRad(NewTime * 9.5f); dcMercuryOrbit->Position->X = 4 * cos(mercuryOrbit); dcMercuryOrbit->Position->Z = 4 * sin(mercuryOrbit); float venusOrbit = DegToRad(NewTime * 3.5f); dcVenusOrbit->Position->X = 6 * cos(venusOrbit); dcVenusOrbit->Position->Z = 6 * sin(venusOrbit); float marsOrbit = DegToRad(NewTime * 1.9f); dcMarsOrbit->Position->X = 15 * cos(marsOrbit); dcMarsOrbit->Position->Z = 15 * sin(marsOrbit); float jupiterOrbit = DegToRad(NewTime * 0.3f); dcJupiterOrbit->Position->X = 45 * cos(jupiterOrbit); dcJupiterOrbit->Position->Z = 45 * sin(jupiterOrbit); float saturnOrbit = DegToRad(NewTime * 0.15f); dcSaturnOrbit->Position->X = 70 * cos(saturnOrbit); dcSaturnOrbit->Position->Z = 70 * sin(saturnOrbit); float uranusOrbit = DegToRad(NewTime * 0.07f); dcUranusOrbit->Position->X = 110 * cos(uranusOrbit); dcUranusOrbit->Position->Z = 110 * sin(uranusOrbit); float neptuneOrbit = DegToRad(NewTime * 0.04f); dcNeptuneOrbit->Position->X = 140 * cos(neptuneOrbit); dcNeptuneOrbit->Position->Z = 140 * sin(neptuneOrbit); // Вращение планет Mercury->RollAngle = DegToRad(NewTime * 1000); // Быстрое Venus->RollAngle = DegToRad(NewTime * -500); // Ретроградное Mars->RollAngle = DegToRad(NewTime * 400); Jupiter->RollAngle = DegToRad(NewTime * 80); Saturn->RollAngle = DegToRad(NewTime * 100); Uranus->RollAngle = DegToRad(NewTime * 120); Neptune->RollAngle = DegToRad(NewTime * 90); SaturnRings->RollAngle = DegToRad(NewTime * 100); // То же вращение, что и Saturn }