Название: Проблема с рисованием openGL.
Отправлено: naico от Октябрь 25, 2008, 14:21
Мне нужно нарисовать небольшую сценку с помощью openGL, стал разбираться как можно сделать это в кьюте. Написал простейший класс для отображения: #include <QGLWidget> #include "ui_mygldrawer.h" #include <QtOpenGL> class MyGLDrawer : public QGLWidget { Q_OBJECT
public: MyGLDrawer(QWidget *parent) ; ~MyGLDrawer ();
protected: void initializeGL(); void paintGL(); void resizeGL (GLint, GLint); };
MyGLDrawer :: MyGLDrawer(QWidget *parent) : QGLWidget(parent) {resize(500, 500);}
MyGLDrawer::~MyGLDrawer() {
}
void MyGLDrawer :: resizeGL(int w, int h) { glViewport(0, 0, (GLint)w, (GLint)h); }
void MyGLDrawer ::initializeGL() { glClearColor (0, 0, 0, 1); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } void MyGLDrawer ::paintGL () { glBegin (GL_LINES); glColor3ub (230, 230, 230); qglColor (qRgb (255,255,255)); glVertex2i (20, 30) ; glVertex2i (113.0, 4.0); glVertex2i (511.0, 61.0); glVertex2i (7.0, 8.0); glEnd(); }
Вроде бы все проще паренной репы. Сам класс использую так : room2::room2(QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags) {
drawer = new MyGLDrawer(this); } Откомпилировал, запустил. Область виджета черная, происходит "очищение экрана" (проверил заменив цвет), но линии не появляются. Проверил - управление передается на paintGL, т.е рисование по-идее должно происходить, но что-то не так. Код практически выдран из пособия по openGL, но не работает, я в замешательстве, может я что-то не так делаю?
Название: Re: Проблема с рисованием openGL.
Отправлено: pastor от Октябрь 25, 2008, 14:54
А если сделать так? room2::room2(QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags) {
drawer = new MyGLDrawer(this); setCentralWidget(drawer); }
Название: Re: Проблема с рисованием openGL.
Отправлено: naico от Октябрь 25, 2008, 15:07
А если сделать так? room2::room2(QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags) {
drawer = new MyGLDrawer(this); setCentralWidget(drawer); } Увы, ничего не изменилось.:( Получается, что есть "связь" с drawer'oм, т.к "очищение" работает нормально, но не может же лично у меня GL работать неправильно:)
Название: Re: Проблема с рисованием openGL.
Отправлено: Sergeich от Октябрь 25, 2008, 21:18
Ты не установил проекционную матрицу, по умолчанию отображается объем с координатами от -1 до 1 по каждому измерению. Если тебе нужно рисовать в координатах виджета матрицу надо выставить как-то так: #include <QtOpenGL> #include <QApplication>
class MyGLDrawer : public QGLWidget { Q_OBJECT public: MyGLDrawer(QWidget *parent) ; ~MyGLDrawer (); protected: void initializeGL(); void paintGL(); void resizeGL (GLint, GLint); };
MyGLDrawer :: MyGLDrawer(QWidget *parent) : QGLWidget(parent) { resize(500, 500); }
MyGLDrawer::~MyGLDrawer() { }
void MyGLDrawer :: resizeGL(int w, int h) { glViewport(0, 0, (GLint)w, (GLint)h);
glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho( 0, w, h, 0, -1, +1 );
updateGL(); }
void MyGLDrawer ::initializeGL() { glClearColor (0, 0, 0, 1); } void MyGLDrawer ::paintGL () { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); qglColor (qRgb (255,255,255)); glBegin (GL_LINES); glVertex2i (20, 30) ; glVertex2i (113.0, 4.0); glVertex2i (511.0, 61.0); glVertex2i (7.0, 8.0); glEnd(); }
Название: Re: Проблема с рисованием openGL.
Отправлено: naico от Октябрь 26, 2008, 09:41
Cпасибо :)
|