Main.cpp 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <fstream>
  4. #ifdef ANKI_BUILD
  5. #undef ANKI_BUILD
  6. #endif
  7. #include "anki/AnKi.h"
  8. using namespace anki;
  9. #define PLAYER 1
  10. #define MOUSE 1
  11. class MyApp : public App
  12. {
  13. public:
  14. PerspectiveCamera* m_cam = nullptr;
  15. Bool m_profile = false;
  16. Error init();
  17. Error userMainLoop(Bool& quit) override;
  18. };
  19. MyApp* app = nullptr;
  20. //==============================================================================
  21. Error MyApp::init()
  22. {
  23. Error err = ErrorCode::NONE;
  24. ANKI_LOGI("Other init...");
  25. SceneGraph& scene = app->getSceneGraph();
  26. MainRenderer& renderer = app->getMainRenderer();
  27. ResourceManager& resources = app->getResourceManager();
  28. renderer.getOffscreenRenderer().getVolumetric().setFog(
  29. Vec3(1.0, 0.9, 0.9), 0.7);
  30. if(getenv("PROFILE"))
  31. {
  32. m_profile = true;
  33. app->setTimerTick(0.0);
  34. }
  35. // camera
  36. err = scene.newSceneNode<PerspectiveCamera>("main-camera", m_cam);
  37. if(err)
  38. return err;
  39. const F32 ang = 55.0;
  40. m_cam->setAll(
  41. renderer.getAspectRatio() * toRad(ang), toRad(ang), 0.2, 300.0);
  42. scene.setActiveCamera(m_cam);
  43. m_cam->getComponent<MoveComponent>().setLocalTransform(Transform(
  44. Vec4(0.0), Mat3x4(Euler(toRad(0.0), toRad(180.0), toRad(0.0))), 1.0));
  45. #if !PLAYER
  46. m_cam->getComponent<MoveComponent>().setLocalTransform(Transform(
  47. // Vec4(147.392776, -10.132728, 16.607138, 0.0),
  48. Vec4(98.994728, -10.601542, 16.376123, 0),
  49. Mat3x4(Euler(toRad(0.0), toRad(-90.0), toRad(0.0))),
  50. // Mat3x4::getIdentity(),
  51. 1.0));
  52. #endif
  53. {
  54. ScriptResourcePtr script;
  55. ANKI_CHECK(resources.loadResource("maps/hell/scene.lua", script));
  56. if(err)
  57. return err;
  58. err = app->getScriptManager().evalString(script->getSource());
  59. if(err)
  60. return err;
  61. app->getMainRenderer()
  62. .getOffscreenRenderer()
  63. .getPps()
  64. .loadColorGradingTexture("textures/adis/dungeon.ankitex");
  65. }
  66. #if PLAYER
  67. PlayerNode* pnode;
  68. scene.newSceneNode<PlayerNode>(
  69. "player", pnode, Vec4(147.392776, -11.132728, 16.607138, 0.0));
  70. pnode->addChild(m_cam);
  71. #endif
  72. return ErrorCode::NONE;
  73. }
  74. //==============================================================================
  75. Error MyApp::userMainLoop(Bool& quit)
  76. {
  77. Error err = ErrorCode::NONE;
  78. F32 dist = 0.1;
  79. F32 ang = toRad(2.5);
  80. F32 scale = 0.01;
  81. F32 mouseSensivity = 9.0;
  82. quit = false;
  83. SceneGraph& scene = getSceneGraph();
  84. Input& in = getInput();
  85. MainRenderer& renderer = getMainRenderer();
  86. if(in.getKey(KeyCode::ESCAPE))
  87. {
  88. quit = true;
  89. return err;
  90. }
  91. // move the camera
  92. static MoveComponent* mover =
  93. &scene.getActiveCamera().getComponent<MoveComponent>();
  94. if(in.getKey(KeyCode::_1))
  95. {
  96. mover = scene.getActiveCamera().tryGetComponent<MoveComponent>();
  97. }
  98. if(in.getKey(KeyCode::_2))
  99. {
  100. mover = &scene.findSceneNode("proxy").getComponent<MoveComponent>();
  101. }
  102. if(in.getKey(KeyCode::_3))
  103. {
  104. mover = &scene.findSceneNode("spot0").getComponent<MoveComponent>();
  105. }
  106. if(in.getKey(KeyCode::_4))
  107. {
  108. mover = &scene.findSceneNode("spot1").getComponent<MoveComponent>();
  109. }
  110. if(in.getKey(KeyCode::_5))
  111. {
  112. mover = &scene.findSceneNode("pe").getComponent<MoveComponent>();
  113. }
  114. if(in.getKey(KeyCode::_6))
  115. {
  116. mover = &scene.findSceneNode("shape0").getComponent<MoveComponent>();
  117. }
  118. if(in.getKey(KeyCode::_7))
  119. {
  120. mover = &scene.findSceneNode("shape1").getComponent<MoveComponent>();
  121. }
  122. if(in.getKey(KeyCode::L) == 1)
  123. {
  124. Vec3 origin = mover->getWorldTransform().getOrigin().xyz();
  125. printf("%f %f %f\n", origin.x(), origin.y(), origin.z());
  126. }
  127. if(in.getKey(KeyCode::F1) == 1)
  128. {
  129. renderer.getDbg().setEnabled(!renderer.getDbg().getEnabled());
  130. }
  131. if(in.getKey(KeyCode::F2) == 1)
  132. {
  133. renderer.getDbg().switchBits(Dbg::Flag::SPATIAL);
  134. }
  135. if(in.getKey(KeyCode::F3) == 1)
  136. {
  137. renderer.getDbg().switchBits(Dbg::Flag::PHYSICS);
  138. }
  139. if(in.getKey(KeyCode::F4) == 1)
  140. {
  141. renderer.getDbg().switchBits(Dbg::Flag::SECTOR);
  142. }
  143. if(in.getKey(KeyCode::F5) == 1)
  144. {
  145. renderer.getDbg().switchBits(Dbg::Flag::OCTREE);
  146. }
  147. if(in.getKey(KeyCode::F6) == 1)
  148. {
  149. renderer.getDbg().switchDepthTestEnabled();
  150. }
  151. if(in.getKey(KeyCode::F12) == 1)
  152. {
  153. printf("F12\n");
  154. scene.getActiveCamera()
  155. .getComponent<FrustumComponent>()
  156. .markShapeForUpdate();
  157. scene.getActiveCamera()
  158. .getComponent<FrustumComponent>()
  159. .markTransformForUpdate();
  160. }
  161. #if !PLAYER
  162. if(in.getKey(KeyCode::UP))
  163. mover->rotateLocalX(ang);
  164. if(in.getKey(KeyCode::DOWN))
  165. mover->rotateLocalX(-ang);
  166. if(in.getKey(KeyCode::LEFT))
  167. mover->rotateLocalY(ang);
  168. if(in.getKey(KeyCode::RIGHT))
  169. mover->rotateLocalY(-ang);
  170. if(in.getKey(KeyCode::A))
  171. {
  172. mover->moveLocalX(-dist);
  173. }
  174. if(in.getKey(KeyCode::D))
  175. mover->moveLocalX(dist);
  176. if(in.getKey(KeyCode::Z))
  177. mover->moveLocalY(dist);
  178. if(in.getKey(KeyCode::SPACE))
  179. mover->moveLocalY(-dist);
  180. if(in.getKey(KeyCode::W))
  181. mover->moveLocalZ(-dist);
  182. if(in.getKey(KeyCode::S))
  183. mover->moveLocalZ(dist);
  184. if(in.getKey(KeyCode::Q))
  185. mover->rotateLocalZ(ang);
  186. if(in.getKey(KeyCode::E))
  187. mover->rotateLocalZ(-ang);
  188. if(in.getKey(KeyCode::PAGEUP))
  189. {
  190. mover->scale(scale);
  191. }
  192. if(in.getKey(KeyCode::PAGEDOWN))
  193. {
  194. mover->scale(-scale);
  195. }
  196. #endif
  197. #if !PLAYER && MOUSE
  198. if(in.getMousePosition() != Vec2(0.0) && !m_profile)
  199. {
  200. // printf("%f %f\n", in.getMousePosition().x(),
  201. // in.getMousePosition().y());
  202. F32 angY = -ang * in.getMousePosition().x() * mouseSensivity
  203. * renderer.getAspectRatio();
  204. mover->rotateLocalY(angY);
  205. mover->rotateLocalX(ang * in.getMousePosition().y() * mouseSensivity);
  206. }
  207. #endif
  208. if(m_profile && getGlobalTimestamp() == 500)
  209. {
  210. quit = true;
  211. return err;
  212. }
  213. return err;
  214. }
  215. //==============================================================================
  216. Error init(int argc, char* argv[])
  217. {
  218. Error err = ErrorCode::NONE;
  219. // Config
  220. Config config;
  221. config.set("dbg.enabled", false);
  222. config.set("sm.bilinearEnabled", true);
  223. config.set("is.groundLightEnabled", false);
  224. config.set("sm.enabled", true);
  225. config.set("sm.maxLights", 16);
  226. config.set("sm.poissonEnabled", false);
  227. config.set("sm.resolution", 512);
  228. config.set("lf.maxFlares", 32);
  229. config.set("pps.enabled", true);
  230. config.set("bloom.enabled", true);
  231. config.set("bloom.renderingQuality", 0.5);
  232. config.set("bloom.blurringDist", 1.0);
  233. config.set("bloom.blurringIterationsCount", 1);
  234. config.set("bloom.threshold", 2.0);
  235. config.set("bloom.scale", 2.0);
  236. config.set("bloom.samples", 17);
  237. config.set("ssao.blurringIterationsCount", 1);
  238. config.set("ssao.enabled", true);
  239. config.set("ssao.renderingQuality", 0.25);
  240. config.set("sslf.enabled", true);
  241. config.set("pps.sharpen", false);
  242. config.set("renderingQuality", 1.0);
  243. config.set("width", 1920);
  244. config.set("height", 1088);
  245. config.set("lodDistance", 20.0);
  246. config.set("samples", 1);
  247. config.set("tessellation", true);
  248. // config.set("maxTextureSize", 256);
  249. config.set("ir.enabled", true);
  250. // config.set("ir.clusterSizeZ", 32);
  251. config.set("sslr.enabled", false);
  252. config.set("ir.rendererSize", 64);
  253. config.set("fullscreenDesktopResolution", true);
  254. // config.set("clusterSizeZ", 16);
  255. config.set("debugContext", false);
  256. if(getenv("ANKI_DATA_PATH"))
  257. {
  258. config.set("dataPaths", getenv("ANKI_DATA_PATH"));
  259. }
  260. else
  261. {
  262. config.set("dataPaths", "assets");
  263. }
  264. // config.set("maxTextureSize", 256);
  265. // config.set("lodDistance", 3.0);
  266. // config.saveToFile("./config.xml");
  267. // config.loadFromFile("./config.xml");
  268. app = new MyApp;
  269. ANKI_CHECK(app->create(config, allocAligned, nullptr));
  270. ANKI_CHECK(app->init());
  271. // Input
  272. #if MOUSE
  273. app->getInput().lockCursor(true);
  274. app->getInput().hideCursor(true);
  275. app->getInput().moveCursor(Vec2(0.0));
  276. #endif
  277. return err;
  278. }
  279. //==============================================================================
  280. int main(int argc, char* argv[])
  281. {
  282. Error err = ErrorCode::NONE;
  283. err = init(argc, argv);
  284. if(!err)
  285. {
  286. err = app->mainLoop();
  287. }
  288. if(err)
  289. {
  290. ANKI_LOGE("Error reported. See previous messages");
  291. }
  292. else
  293. {
  294. delete app;
  295. ANKI_LOGI("Bye!!");
  296. }
  297. return 0;
  298. }