fSkyBoxC.cpp 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. // ---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include "fSkyBoxC.h"
  5. // ---------------------------------------------------------------------------
  6. #pragma package(smart_init)
  7. #pragma link "GLS.BaseClasses"
  8. #pragma link "GLS.Cadencer"
  9. #pragma link "GLS.Coordinates"
  10. #pragma link "GLS.LensFlare"
  11. #pragma link "GLS.Material"
  12. #pragma link "GLS.Navigator"
  13. #pragma link "GLS.Objects"
  14. #pragma link "GLS.Scene"
  15. #pragma link "GLS.SimpleNavigation"
  16. #pragma link "GLS.SkyDome"
  17. #pragma link "GLS.SceneViewer"
  18. #pragma link "GLS.Utils"
  19. #pragma resource "*.dfm"
  20. TForm1 *Form1;
  21. // ---------------------------------------------------------------------------
  22. __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) {
  23. }
  24. // ---------------------------------------------------------------------------
  25. TGLLibMaterial* __fastcall TForm1::LoadTexture(String Matname, String Filename)
  26. {
  27. GLMaterialLibrary1->AddTextureMaterial(Matname, Filename);
  28. GLMaterialLibrary1->Materials->Items[0]
  29. ->Material->Texture->Disabled = false;
  30. return GLMaterialLibrary1->Materials->GetLibMaterialByName(Matname);
  31. }
  32. void __fastcall TForm1::FormCreate(TObject *Sender) {
  33. SetGLSceneMediaDir();
  34. TFileName PathCM = GetCurrentDir() + "\\Cubemaps";
  35. SetCurrentDir(PathCM);
  36. // Skybox textures
  37. LoadTexture("Left", "icecraterlf.jpg");
  38. GLMaterialLibrary1->Materials->Items[0]->Material->Texture->TextureMode =
  39. tmDecal;
  40. LoadTexture("Right", "icecraterrt.jpg");
  41. GLMaterialLibrary1->Materials->Items[1]->Material->Texture->TextureMode =
  42. tmDecal;
  43. LoadTexture("Top", "icecraterup.jpg");
  44. GLMaterialLibrary1->Materials->Items[2]->Material->Texture->TextureMode =
  45. tmDecal;
  46. LoadTexture("Bottom", "icecraterdn.jpg");
  47. GLMaterialLibrary1->Materials->Items[3]->Material->Texture->TextureMode =
  48. tmDecal;
  49. LoadTexture("Front", "icecraterft.jpg");
  50. GLMaterialLibrary1->Materials->Items[4]->Material->Texture->TextureMode =
  51. tmDecal;
  52. LoadTexture("Back", "icecraterbk.jpg");
  53. GLMaterialLibrary1->Materials->Items[5]->Material->Texture->TextureMode =
  54. tmDecal;
  55. SetGLSceneMediaDir(); // back to madia dir with textures
  56. // Add transparency to clouds
  57. LoadTexture("Clouds", "Clouds.jpg")->Material->BlendingMode =
  58. bmTransparency;
  59. LoadTexture("Clouds", "Clouds.jpg")
  60. ->Material->FrontProperties->Diffuse->Alpha = 0.2;
  61. // scale the clouds texture
  62. LoadTexture("Clouds", "Clouds.jpg")->TextureScale->X = 8;
  63. LoadTexture("Clouds", "Clouds.jpg")->TextureScale->Y = 8;
  64. // bricks
  65. LoadTexture("Bricks", "rawwall.jpg")->TextureScale->X = 1;
  66. LoadTexture("Bricks", "rawwall.jpg")->TextureScale->Y = 32;
  67. LoadTexture("Bricks", "rawwall.jpg")->Material->Texture->TextureMode =
  68. tmModulate;
  69. LoadTexture("Bricks2", "marbletiles.jpg")->TextureScale->X = 6;
  70. LoadTexture("Bricks2", "marbletiles.jpg")->TextureScale->Y = 1;
  71. LoadTexture("Bricks2", "marbletiles.jpg")->Material->Texture->TextureMode =
  72. tmModulate;
  73. // Moon
  74. LoadTexture("Moon", "unwrapped moon.jpg")->Material->Texture->TextureMode =
  75. tmModulate;
  76. // -----------------------------------------
  77. // Assign materials to objects
  78. // -----------------------------------------
  79. GLCube1->Material->LibMaterialName = "Bricks";
  80. GLCube11->Material->LibMaterialName = "Bricks";
  81. GLCube111->Material->LibMaterialName = "Bricks";
  82. GLCube112->Material->LibMaterialName = "Bricks";
  83. GLCube2->Material->LibMaterialName = "Bricks2";
  84. GLCube21->Material->LibMaterialName = "Bricks2";
  85. GLCube21->Material->LibMaterialName = "Bricks2";
  86. GLCube211->Material->LibMaterialName = "Bricks2";
  87. GLCube212->Material->LibMaterialName = "Bricks2";
  88. GLSphere1->Material->LibMaterialName = "Moon";
  89. GLSphere2->Material->LibMaterialName = "Moon";
  90. GLUserInterface1->MouseLookActive = true;
  91. }
  92. // ---------------------------------------------------------------------------
  93. void __fastcall TForm1::GLCadencer1Progress(TObject *Sender,
  94. const double deltaTime, const double newTime) {
  95. // Make clouds Texture slide
  96. GLMaterialLibrary1->Materials->GetLibMaterialByName("Clouds")
  97. ->TextureOffset->X = GLMaterialLibrary1->Materials->GetLibMaterialByName
  98. ("Clouds")->TextureOffset->X + deltaTime * 0.02;
  99. GLMaterialLibrary1->Materials->GetLibMaterialByName("Clouds")
  100. ->TextureOffset->Y = GLMaterialLibrary1->Materials->GetLibMaterialByName
  101. ("Clouds")->TextureOffset->Y + deltaTime * 0.03;
  102. // Rotate moons
  103. GLSphere1->Turn(deltaTime * 7);
  104. GLSphere2->Turn(deltaTime * 10);
  105. HandleKeys(deltaTime);
  106. GLUserInterface1->MouseLook();
  107. GLUserInterface1->MouseUpdate();
  108. GLSceneViewer1->Invalidate();
  109. }
  110. // ---------------------------------------------------------------------------
  111. void __fastcall TForm1::HandleKeys(double d) {
  112. if (IsKeyDown('W') || IsKeyDown('Z'))
  113. GLCamera1->Move(d);
  114. if (IsKeyDown('S'))
  115. GLCamera1->Move(-d);
  116. if (IsKeyDown('A') || IsKeyDown('A'))
  117. GLCamera1->Slide(-d);
  118. if (IsKeyDown('D'))
  119. GLCamera1->Slide(d);
  120. if (IsKeyDown(VK_SPACE))
  121. Castle->Visible = !Castle->Visible;
  122. if (IsKeyDown(VK_ESCAPE))
  123. Close();
  124. }