texturing.cpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. #include "Crown.h"
  2. #include <cstdlib>
  3. using namespace Crown;
  4. class WndCtrl: public KeyboardListener
  5. {
  6. public:
  7. WndCtrl()
  8. {
  9. GetDevice()->GetInputManager()->RegisterKeyboardListener(this);
  10. }
  11. virtual void KeyReleased(const KeyboardEvent& event)
  12. {
  13. if (event.key == KC_ESCAPE)
  14. {
  15. GetDevice()->StopRunning();
  16. }
  17. }
  18. };
  19. class MainScene: public Scene, public KeyboardListener
  20. {
  21. public:
  22. MainScene() :
  23. optShowSkybox(true),
  24. optShowCrate(true),
  25. optShowTerrain(true)
  26. {
  27. GetDevice()->GetInputManager()->RegisterKeyboardListener(this);
  28. }
  29. virtual ~MainScene()
  30. {
  31. }
  32. virtual void KeyReleased(const KeyboardEvent& event)
  33. {
  34. if (event.key == '1')
  35. {
  36. optShowSkybox = !optShowSkybox;
  37. }
  38. if (event.key == '2')
  39. {
  40. optShowCrate = !optShowCrate;
  41. }
  42. if (event.key == '3')
  43. {
  44. optShowTerrain = !optShowTerrain;
  45. }
  46. if (event.key == KC_F5)
  47. {
  48. GetTextureManager()->Unload("res/grass.tga", false);
  49. }
  50. if (event.key == KC_SPACE)
  51. {
  52. if (cam)
  53. {
  54. cam->SetActive(!cam->IsActive());
  55. }
  56. }
  57. }
  58. virtual void OnLoad()
  59. {
  60. Crown::Renderer* renderer = Crown::GetDevice()->GetRenderer();
  61. renderer->SetClearColor(Crown::Color4(0.0f, 0.0f, 0.0f, 1.0f));
  62. // Add a movable camera
  63. cam = AddMovableCamera();
  64. if (cam)
  65. {
  66. cam->SetActive(true);
  67. cam->SetSpeed(0.1);
  68. cam->SetFarClipDistance(1000.0f);
  69. }
  70. // Add a skybox
  71. skybox = AddSkybox();
  72. if (skybox)
  73. {
  74. skybox->SetFace(SF_NORTH, GetTextureManager()->Load("res/red_north.tga"));
  75. skybox->SetFace(SF_SOUTH, GetTextureManager()->Load("res/red_south.tga"));
  76. skybox->SetFace(SF_EAST, GetTextureManager()->Load("res/red_east.tga"));
  77. skybox->SetFace(SF_WEST, GetTextureManager()->Load("res/red_west.tga"));
  78. skybox->SetFace(SF_UP, GetTextureManager()->Load("res/red_up.tga"));
  79. skybox->SetFace(SF_DOWN, GetTextureManager()->Load("res/red_down.tga"));
  80. }
  81. crate = GetTextureManager()->Load("res/crate.tga");
  82. grass = GetTextureManager()->Load("res/grass.tga");
  83. crate->SetFilter(TF_BILINEAR);
  84. grass->SetFilter(TF_BILINEAR);
  85. cube = GetMeshManager()->LoadCube("cube", 1.0f);
  86. grid = GetMeshManager()->LoadGrid("grid", 32);
  87. font = GetFontManager()->Load("arial", "res/arialbd.ttf", 12);
  88. renderer->GetTextRenderer()->SetFont(font);
  89. renderer->GetTextRenderer()->SetColor(Color4::WHITE);
  90. ortho.BuildProjectionOrtho2dRH(1000, 625, -1, 1);
  91. crateModel.LoadIdentity();
  92. crateModel.SetTranslation(Vec3(0, 2, 0));
  93. }
  94. virtual void RenderScene()
  95. {
  96. Renderer* renderer = GetDevice()->GetRenderer();
  97. if (skybox)
  98. {
  99. skybox->SetVisible(optShowSkybox);
  100. }
  101. Scene::RenderScene();
  102. renderer->_SetLighting(false);
  103. renderer->_SetBlending(false);
  104. renderer->_SetAlphaTest(false);
  105. renderer->SetMatrix(MT_MODEL, Mat4::IDENTITY);
  106. renderer->_SetTexturing(0, false);
  107. renderer->_SetTexturing(1, false);
  108. renderer->_SetTexturing(2, false);
  109. // Render crate
  110. if (optShowCrate)
  111. {
  112. renderer->_SetTexture(0, crate);
  113. renderer->_SetTexturing(0, true);
  114. renderer->_SetTextureMode(0, crate->GetMode(), crate->GetBlendColor());
  115. renderer->_SetTextureFilter(0, crate->GetFilter());
  116. renderer->SetMatrix(MT_MODEL, crateModel);
  117. renderer->RenderVertexIndexBuffer(cube->GetVertexBuffer(), cube->GetIndexBuffer());
  118. }
  119. // Render terrain
  120. if (optShowTerrain)
  121. {
  122. renderer->_SetTexture(0, grass);
  123. renderer->_SetTexturing(0, true);
  124. renderer->_SetTextureMode(0, grass->GetMode(), grass->GetBlendColor());
  125. renderer->_SetTextureFilter(0, grass->GetFilter());
  126. renderer->SetMatrix(MT_MODEL, Mat4::IDENTITY);
  127. renderer->RenderVertexIndexBuffer(grid->GetVertexBuffer(), grid->GetIndexBuffer());
  128. }
  129. /*
  130. renderer->SetMatrix(MT_MODEL, Mat4::IDENTITY);
  131. renderer->SetMatrix(MT_VIEW, Mat4::IDENTITY);
  132. renderer->SetMatrix(MT_PROJECTION, mOrtho2dRH);
  133. renderer->_SetDepthTest(false);
  134. renderer->SetMatrix(MT_PROJECTION, ortho);
  135. renderer->SetMatrix(MT_MODEL, Mat4::IDENTITY);
  136. renderer->SetMatrix(MT_VIEW, Mat4::IDENTITY);
  137. renderer->GetTextRenderer()->Draw("Show/Hide Skybox (1)", 10, 24);
  138. renderer->GetTextRenderer()->Draw("Show/Hide Crate (2)", 10, 38);
  139. renderer->GetTextRenderer()->Draw("Show/Hide Terrain (3)", 10, 52);
  140. renderer->_SetDepthTest(true);
  141. */
  142. }
  143. private:
  144. MovableCamera* cam;
  145. Skybox* skybox;
  146. Texture* crate;
  147. Texture* grass;
  148. Mesh* cube;
  149. Mesh* grid;
  150. Crown::Font* font;
  151. Mat4 ortho;
  152. Mat4 crateModel;
  153. bool optShowSkybox;
  154. bool optShowCrate;
  155. bool optShowTerrain;
  156. };
  157. int main(int argc, char** argv)
  158. {
  159. Device* mDevice = GetDevice();
  160. if (!mDevice->Init(argc, argv))
  161. {
  162. return 0;
  163. }
  164. WndCtrl ctrl;
  165. MainScene* mainScene = new MainScene();
  166. GetDevice()->GetSceneManager()->SelectNextScene(mainScene);
  167. mDevice->GetMainWindow()->SetTitle("Crown Engine v0.1 - Texturing Test");
  168. while (mDevice->IsRunning())
  169. {
  170. mDevice->Frame();
  171. }
  172. mDevice->Shutdown();
  173. return 0;
  174. }