triangle.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #include "Crown.h"
  2. #include "OS.h"
  3. #include <jni.h>
  4. #include <GLES/gl.h>
  5. #include "MovableCamera.h"
  6. namespace crown
  7. {
  8. MovableCamera* cam;
  9. extern "C"
  10. {
  11. JNIEXPORT void JNICALL Java_crown_android_CrownLib_frame(JNIEnv* env, jobject obj);
  12. };
  13. class MainScene : public AccelerometerListener, TouchListener
  14. {
  15. public:
  16. MainScene()
  17. {
  18. get_input_manager()->register_accelerometer_listener(this);
  19. get_input_manager()->register_touch_listener(this);
  20. cam = new MovableCamera(Vec3::ZERO, true, 90.0f, 1.6f, true, 0.1f, 2.5f);
  21. if (cam)
  22. {
  23. cam->SetActive(true);
  24. cam->SetSpeed(0.1);
  25. cam->SetFarClipDistance(1000.0f);
  26. }
  27. }
  28. void accelerometer_changed(const AccelerometerEvent& event)
  29. {
  30. cam->SetRotation(event.x, event.y);
  31. }
  32. void touch_down(const TouchEvent& event)
  33. {
  34. cam->MoveForward();
  35. }
  36. void touch_move(const TouchEvent& event)
  37. {
  38. cam->MoveForward();
  39. }
  40. void draw_triangle()
  41. {
  42. uint32_t width;
  43. uint32_t height;
  44. os::get_render_window_metrics(width, height);
  45. cam->Render();
  46. static GLfloat vertices[] = { -1.0f, -1.0f, -2.0f,
  47. 1.0f, -1.0f, -2.0f,
  48. 0.0f, 1.0f, -2.0f};
  49. GetDevice()->GetRenderer()->SetMatrix(MT_MODEL, Mat4::IDENTITY);
  50. Mat4 projection;
  51. projection.build_projection_perspective_rh(90.0f, (float) width/height, 0.1f, 100.0f);
  52. GetDevice()->GetRenderer()->SetMatrix(MT_PROJECTION, projection);
  53. GetDevice()->GetRenderer()->SetClearColor(Color4::LIGHTBLUE);
  54. glEnableClientState(GL_VERTEX_ARRAY);
  55. glVertexPointer(3, GL_FLOAT, 0, vertices);
  56. glDrawArrays(GL_TRIANGLES, 0, 9);
  57. glDisableClientState(GL_VERTEX_ARRAY);
  58. }
  59. void frame()
  60. {
  61. Device* mDevice = GetDevice();
  62. os::event_loop();
  63. get_input_manager()->event_loop();
  64. GetDevice()->GetRenderer()->_BeginFrame();
  65. draw_triangle();
  66. GetDevice()->GetRenderer()->_EndFrame();
  67. os::swap_buffers();
  68. }
  69. };
  70. MainScene* scene = new MainScene();
  71. JNIEXPORT void JNICALL Java_crown_android_CrownLib_frame(JNIEnv* env, jobject obj)
  72. {
  73. scene->frame();
  74. }
  75. } // namespace crown