Unit1.cpp 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include <tchar.h>
  4. #pragma hdrstop
  5. #include "Unit1.h"
  6. //---------------------------------------------------------------------------
  7. #pragma package(smart_init)
  8. #pragma link "GLBaseClasses"
  9. #pragma link "GLCadencer"
  10. #pragma link "GLCoordinates"
  11. #pragma link "GLCrossPlatform"
  12. #pragma link "GLGraph"
  13. #pragma link "GLMaterial"
  14. #pragma link "GLObjects"
  15. #pragma link "GLScene"
  16. #pragma link "GLWin32Viewer"
  17. #pragma link "GLVectorFileObjects"
  18. #pragma resource "*.dfm"
  19. TForm1 *Form1;
  20. //---------------------------------------------------------------------------
  21. __fastcall TForm1::TForm1(TComponent* Owner)
  22. : TForm(Owner)
  23. {
  24. }
  25. //---------------------------------------------------------------------------
  26. void __fastcall TForm1::FormCreate(TObject *Sender)
  27. {
  28. SetGLSceneMediaDir();
  29. // load Cg proggy from project directory
  30. CgShader1->VertexProgram->LoadFromFile("Shaders\\cg_texture_vp.cg");
  31. MemoVertCode->Lines->Assign(CgShader1->VertexProgram->Code);
  32. CgShader1->FragmentProgram->LoadFromFile("Shaders\\cg_texture_fp.cg");
  33. MemoFragCode->Lines->Assign(CgShader1->FragmentProgram->Code);
  34. // Load images from media dir
  35. GLMatLib->Materials->Items[0]->Material->Texture->Image->LoadFromFile("moon.bmp");
  36. GLMatLib->Materials->Items[1]->Material->Texture->Image->LoadFromFile("clover.jpg");
  37. GLMatLib->Materials->Items[2]->Material->Texture->Image->LoadFromFile("marbletiles.jpg");
  38. GLMatLib->Materials->Items[3]->Material->Texture->Image->LoadFromFile("chrome_buckle.bmp");
  39. }
  40. //---------------------------------------------------------------------------
  41. void __fastcall TForm1::CgShader1Initialize(TCustomCgShader *CgShader)
  42. {
  43. // Due to parameter shadowing (ref. Cg Manual), parameters that doesn't change
  44. // once set can be assigned for once in the OnInitialize event.
  45. // with do begin
  46. CgShader1->FragmentProgram->ParamByName("Map0")->SetToTextureOf(GLMatLib->Materials->Items[0]);
  47. CgShader1->FragmentProgram->ParamByName("Map1")->SetToTextureOf(GLMatLib->Materials->Items[1]);
  48. CgShader1->FragmentProgram->ParamByName("Map2")->SetToTextureOf(GLMatLib->Materials->Items[2]);
  49. CgShader1->FragmentProgram->ParamByName("Map3")->SetToTextureOf(GLMatLib->Materials->Items[3]);
  50. // Alternatively, you can set texture parameters using two other methods:
  51. //CgShader1->FragmentProgram->SetTexture("Map0", GLMatLib->Materials->Items[0]->Material->Texture->Handle);
  52. //or
  53. //CgShader1->FragmentProgram->ParamByName("Map0")->SetAsTexture2D(Materials->Items[0]->Material->Texture->Handle);
  54. // Display profiles used
  55. LabelVertProfile->Caption = "Using profile: " +
  56. CgShader1->VertexProgram->GetProfileStringA();
  57. LabelFragProfile->Caption = "Using profile: " +
  58. CgShader1->FragmentProgram->GetProfileStringA();
  59. }
  60. //---------------------------------------------------------------------------
  61. float conv1(TTrackBar *TrackBar)
  62. {
  63. int half;
  64. half = TrackBar->Max/2;
  65. return (TrackBar->Position-half) / half;
  66. }
  67. void __fastcall TForm1::CgShader1ApplyVP(TCgProgram *CgProgram, TObject *Sender)
  68. {
  69. Glvectorgeometry::TVector v;
  70. CgProgram->ParamByName("ModelViewProj")->SetAsStateMatrix(CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
  71. // Alternatively, you can set it using:
  72. // CgProgram->SetStateMatrix("ModelViewProj", CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
  73. v = VectorMake(conv1(TrackBar1), conv1(TrackBar2), conv1(TrackBar3), conv1(TrackBar4) );
  74. CgProgram->ParamByName("shifts")->SetAsVector(v);
  75. }
  76. //---------------------------------------------------------------------------
  77. float conv2(TTrackBar *TrackBar)
  78. {
  79. int half;
  80. half = TrackBar->Max/2;
  81. return (TrackBar->Position-half) / half;
  82. }
  83. void __fastcall TForm1::CgShader1ApplyFP(TCgProgram *CgProgram, TObject *Sender)
  84. {
  85. Glvectorgeometry::TVector v;
  86. CgProgram->ParamByName("Map0")->EnableTexture();
  87. CgProgram->ParamByName("Map1")->EnableTexture();
  88. CgProgram->ParamByName("Map2")->EnableTexture();
  89. CgProgram->ParamByName("Map3")->EnableTexture();
  90. v = VectorMake(conv2(TrackBar5), conv2(TrackBar6), conv2(TrackBar7), conv2(TrackBar8));
  91. CgProgram->ParamByName("weights")->SetAsVector(v);
  92. }
  93. //---------------------------------------------------------------------------
  94. void __fastcall TForm1::CgShader1UnApplyFP(TCgProgram *CgProgram)
  95. {
  96. CgProgram->ParamByName("Map0")->DisableTexture();
  97. CgProgram->ParamByName("Map1")->DisableTexture();
  98. CgProgram->ParamByName("Map2")->DisableTexture();
  99. CgProgram->ParamByName("Map3")->DisableTexture();
  100. }
  101. //---------------------------------------------------------------------------
  102. void __fastcall TForm1::CBVertexProgramClick(TObject *Sender)
  103. {
  104. CgShader1->VertexProgram->Enabled = !CBVertexProgram->Checked;
  105. }
  106. //---------------------------------------------------------------------------
  107. void __fastcall TForm1::CBFragmentProgramClick(TObject *Sender)
  108. {
  109. CgShader1->FragmentProgram->Enabled = !CBFragmentProgram->Checked;
  110. }
  111. //---------------------------------------------------------------------------
  112. void __fastcall TForm1::ButtonApplyFPClick(TObject *Sender)
  113. {
  114. CgShader1->FragmentProgram->Code = MemoFragCode->Lines;
  115. ButtonApplyFP->Enabled = false;
  116. }
  117. //---------------------------------------------------------------------------
  118. void __fastcall TForm1::ButtonApplyVPClick(TObject *Sender)
  119. {
  120. CgShader1->VertexProgram->Code = MemoVertCode->Lines;
  121. ButtonApplyVP->Enabled = false;
  122. }
  123. //---------------------------------------------------------------------------
  124. void __fastcall TForm1::MemoFragCodeChange(TObject *Sender)
  125. {
  126. ButtonApplyFP->Enabled = true;
  127. }
  128. //---------------------------------------------------------------------------
  129. void __fastcall TForm1::MemoVertCodeChange(TObject *Sender)
  130. {
  131. ButtonApplyVP->Enabled = true;
  132. }
  133. //---------------------------------------------------------------------------
  134. void __fastcall TForm1::Button1Click(TObject *Sender)
  135. {
  136. CgShader1->VertexProgram->ListParameters(Memo1->Lines);
  137. }
  138. //---------------------------------------------------------------------------
  139. void __fastcall TForm1::Button2Click(TObject *Sender)
  140. {
  141. CgShader1->FragmentProgram->ListParameters(Memo3->Lines);
  142. }
  143. //---------------------------------------------------------------------------
  144. void __fastcall TForm1::Button3Click(TObject *Sender)
  145. {
  146. CgShader1->FragmentProgram->ListCompilation(Memo3->Lines);
  147. }
  148. //---------------------------------------------------------------------------
  149. void __fastcall TForm1::Button4Click(TObject *Sender)
  150. {
  151. CgShader1->VertexProgram->ListCompilation(Memo1->Lines);
  152. }
  153. //---------------------------------------------------------------------------
  154. void __fastcall TForm1::GLSceneViewer1MouseDown(TObject *Sender, TMouseButton Button,
  155. TShiftState Shift, int X, int Y)
  156. {
  157. mx = X;
  158. my = Y;
  159. }
  160. //---------------------------------------------------------------------------
  161. void __fastcall TForm1::GLSceneViewer1MouseMove(TObject *Sender, TShiftState Shift,
  162. int X, int Y)
  163. {
  164. if (Shift.Contains(ssLeft) || Shift.Contains(ssRight))
  165. {
  166. GLCamera1->MoveAroundTarget(my-Y, mx-X);
  167. mx = X;
  168. my = Y;
  169. }
  170. }
  171. //---------------------------------------------------------------------------
  172. void __fastcall TForm1::GLCadencer1Progress(TObject *Sender, const double deltaTime,
  173. const double newTime)
  174. {
  175. GLSceneViewer1->Invalidate();
  176. }
  177. //---------------------------------------------------------------------------
  178. void __fastcall TForm1::FormMouseWheel(TObject *Sender, TShiftState Shift, int WheelDelta,
  179. TPoint &MousePos, bool &Handled)
  180. {
  181. if (Glcrossplatform::PtInRect(ClientRect, ScreenToClient(MousePos)))
  182. {
  183. GLCamera1->SceneScale = GLCamera1->SceneScale * (1000 - WheelDelta) / 1000;
  184. Handled = true;
  185. }
  186. }
  187. //---------------------------------------------------------------------------
  188. void __fastcall TForm1::Timer1Timer(TObject *Sender)
  189. {
  190. PanelFPS->Caption = Format("%.1f fps",
  191. ARRAYOFCONST ((GLSceneViewer1->FramesPerSecond())));
  192. GLSceneViewer1->ResetPerformanceMonitor();
  193. }
  194. //---------------------------------------------------------------------------
  195. void __fastcall TForm1::FormKeyPress(TObject *Sender, System::WideChar &Key)
  196. {
  197. if (Key == 0x27) Close();
  198. }
  199. //---------------------------------------------------------------------------
  200. void __fastcall TForm1::CheckBox2Click(TObject *Sender)
  201. {
  202. CgShader1->Enabled = CheckBox2->Checked;
  203. }
  204. //---------------------------------------------------------------------------