duration -> durationInSec
[agianapa.git] / socg / myglwidget.cpp
blob4a10d9b77e619a84c95e34b30007cfde9f1aebee
1 #include <iostream>
2 #include <QKeyEvent>
3 #include <QtOpenGL>
5 #include <cmath>
7 #include "axis.h"
8 #include "camera.h"
9 #include "coordsAndAngles.h"
10 #include "myglwidget.h"
11 #include "workerthread.h"
13 // Non-default arguments must come first
14 MyGLWidget::MyGLWidget(Axis *pAxisX, Axis *pAxisY, Axis *pAxisZ,
15 Camera *pCamera, Sphere * pSphere, QWidget *parent)
16 : QGLWidget(parent)
18 qDebug("MyGLWidget::MyGLWidget()");
20 m_pAxisX = pAxisX;
21 m_pAxisY = pAxisY;
22 m_pAxisZ = pAxisZ;
24 m_pCamera = pCamera;
25 m_pSphere = pSphere;
28 MyGLWidget::~MyGLWidget()
30 qDebug("MyGLWidget::~MyGLWidget()");
33 void MyGLWidget::initializeGL()
35 qDebug("MyGLWidget::initializeGL()");
37 // Enable backface culling
38 glEnable(GL_CULL_FACE);
40 // Clear color is set to black
41 glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
42 glShadeModel(GL_SMOOTH);
44 // Reset modelview matrix
45 glMatrixMode(GL_MODELVIEW);
46 glLoadIdentity();
48 // We don't need to call drawSphere() here,
49 // since the resizeGL() will be called upon
50 // the initial creation of the window.
53 void MyGLWidget::paintGL()
55 qDebug("MyGLWidget::paintGL()");
57 // Clear scene
58 glClear(GL_COLOR_BUFFER_BIT);
60 glMatrixMode(GL_PROJECTION);
61 glLoadIdentity();
62 gluPerspective(90, 1, 0.01, 100);
64 // Reset modelview matrix
65 glMatrixMode(GL_MODELVIEW);
66 glLoadIdentity();
68 //gluLookAt(1, 1, 1, 0, 0, -1, 0, 1, 0);
69 gluLookAt(m_pCamera->getEyeX(),
70 m_pCamera->getEyeY(),
71 m_pCamera->getEyeZ(),
72 m_pCamera->getCenterX(),
73 m_pCamera->getCenterY(),
74 m_pCamera->getCenterZ(),
75 m_pCamera->getUpX(),
76 m_pCamera->getUpY(),
77 m_pCamera->getUpZ());
79 // Draw global axis system
80 m_pAxisX->draw(0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
81 m_pAxisY->draw(0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
82 m_pAxisZ->draw(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f);
84 // Rotate appropriately
85 qDebug("xP = %f\tyP = %f\tzP = %f\txA = %f\tyA = %f\tzA = %f",
86 m_pCoordsAndAngles->getXPos(),
87 m_pCoordsAndAngles->getYPos(),
88 m_pCoordsAndAngles->getZPos(),
89 m_pCoordsAndAngles->getXAngle(),
90 m_pCoordsAndAngles->getYAngle(),
91 m_pCoordsAndAngles->getZAngle());
93 glTranslatef(0, -m_pCoordsAndAngles->getXPos()/700, 0);
95 glRotatef(m_pCoordsAndAngles->getXAngle(), 1.0f, 0.0f, 0.0f);
96 glRotatef(m_pCoordsAndAngles->getYAngle(), 0.0f, 1.0f, 0.0f);
97 glRotatef(m_pCoordsAndAngles->getZAngle(), 0.0f, 0.0f, 1.0f);
99 // Local Axis
100 if (m_pAxisX->isLocal() || m_pAxisY->isLocal() || m_pAxisZ->isLocal()) {
101 m_pAxisX->draw(0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
102 m_pAxisY->draw(0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
103 m_pAxisZ->draw(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f);
106 // Draw sphere
107 m_pSphere->draw();
109 glFlush();
112 void MyGLWidget::resizeGL(int width, int height)
114 qDebug("MyGLWidget::resizeGL()\n"
115 "New width = %d\tNew height = %d", width, height);
117 // Update viewport to cover the whole screen
118 glViewport(0, 0, width, height);
120 // Reset projection matrix
121 glMatrixMode(GL_PROJECTION);
122 glLoadIdentity();
123 //gluPerspective(45.0, (GLfloat)width/(GLfloat)height, 0.1f, 100.0f);
125 // Reset modelview matrix
126 glMatrixMode(GL_MODELVIEW);
127 glLoadIdentity();
130 void MyGLWidget::setAxis(axis_t axis, const Axis *pAxis)
132 qDebug("MyGLWidget::setAxis()");
134 switch(axis) {
135 case AXIS_X:
136 m_pAxisX = pAxis;
137 break;
138 case AXIS_Y:
139 m_pAxisY = pAxis;
140 break;
141 case AXIS_Z:
142 m_pAxisZ = pAxis;
143 break;
147 void MyGLWidget::setCamera(const Camera *pCamera)
149 qDebug("MyGLWidget::setCamera()");
151 m_pCamera = pCamera;
154 void MyGLWidget::setSphere(const Sphere *pSphere)
156 qDebug("MyGLWidget::setSphere()");
158 m_pSphere = pSphere;
161 void MyGLWidget::setCoordsAndAngles(const CoordsAndAngles *pCoordsAndAngles)
163 qDebug("MyGLWidget::setCoordsAndAngles()");
165 m_pCoordsAndAngles = pCoordsAndAngles;