You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

renderwidget.cpp 1.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "renderwidget.h"
  2. #include <QTimer>
  3. #include <math.h>
  4. RenderWidget::RenderWidget(QWidget *parent) :
  5. QGLWidget(QGLFormat(QGL::SampleBuffers), parent)
  6. , angle(0)
  7. {
  8. _device = new OpenGLRenderDevice(this);
  9. _engine = new UGameEngine(_device);
  10. }
  11. void RenderWidget::initializeGL()
  12. {
  13. makeCurrent();
  14. _device->setClearColor(Qt::gray);
  15. _device->initialize(70, width(), height());
  16. animate();
  17. }
  18. void RenderWidget::paintGL()
  19. {
  20. float rad = (float)angle / 180.0 * M_PI;
  21. float radius = 5.0f;
  22. _device->lookAt(Vector3D(radius * cos(rad), 5.0f, radius * sin(rad)),
  23. Vector3D(0.0f, 0.0f, 0.0f));
  24. _engine->draw();
  25. // device->preDraw();
  26. drawAxes();
  27. // device->postDraw();
  28. }
  29. void RenderWidget::resizeGL(int width, int height)
  30. {
  31. _device->resize(width, height);
  32. }
  33. void RenderWidget::animate()
  34. {
  35. angle = (angle + 3) % 360;
  36. update();
  37. QTimer::singleShot(50, this, SLOT(animate()));
  38. }
  39. void RenderWidget::drawAxes()
  40. {
  41. glLineWidth(2.5);
  42. glColor3f(1.0, 0.0, 0.0);
  43. glBegin(GL_LINES);
  44. glVertex3f(0.0, 0.0, 0.0);
  45. glVertex3f(1.0, 0.0, 0.0);
  46. glEnd();
  47. glColor3f(0.0, 1.0, 0.0);
  48. glBegin(GL_LINES);
  49. glVertex3f(0.0, 0.0, 0.0);
  50. glVertex3f(0.0, 1.0, 0.0);
  51. glEnd();
  52. glColor3f(0.0, 0.0, 1.0);
  53. glBegin(GL_LINES);
  54. glVertex3f(0.0, 0.0, 0.0);
  55. glVertex3f(0.0, 0.0, 1.0);
  56. glEnd();
  57. }