我是OpenGL和Glut的新手。 Glut实施了一个项目。我用Google搜索并发现Qt中有一个名为QGLWidget的OpenGL实现。但是,我很难将旧的Glut代码转换为新的Qt代码,因为我不知道如何在Qt中找到Glut函数的等效函数。部分代码如下所示:
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(gray1->width,gray1->height);
glutInitWindowPosition(100,100);
glutCreateWindow("hello");
init();
glutDisplayFunc(&display);
glutReshapeFunc(reshape);
glutMouseFunc(mouse);
glutMotionFunc(mouse_move);
glutMainLoop();
Qt的文档中不存在上述过剩函数。所以我的问题是如何在QGLWidget的函数中找到等效的glut函数?
答案 0 :(得分:6)
您需要实现自己继承自QGLWidget的类,例如:
class GLWidget : public QGLWidget
{
Q_OBJECT
public:
GLWidget(QWidget *parent = 0);
protected:
void initializeGL();
void resizeGL(int w, int h);
void paintGL();
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
};
您还需要覆盖三个重要的功能, initializeGL(),您正在准备OpenGL。 resizeGL(),如果面板调整大小,则更新视口和投影矩阵, paintGL()实际渲染。
当然,窗口初始化由Qt。
处理对于鼠标事件,您可以覆盖三个函数: mousePressEvent(), mouseMoveEvent()和 mouseReleaseEvent()
void GLWidget::initializeGL()
{
glClearColor(0.5, 0.5, 0.5, 1.0);
}
void GLWidget::resizeGL(int width, int height)
{
glViewport(0, 0, width(), height());
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, width(), 0, height());
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT);
// draw a red triangle
glColor3f(1,0,0);
glBegin(GL_POLYGON);
glVertex2f(10,10);
glVertex2f(10,600);
glVertex2f(300,10);
glEnd();
}
答案 1 :(得分:0)
行。你看过HelloGL样本了吗? 因此,您将学习如何显示QGLWidget并处理鼠标输入。我想这就是你要找的东西。 由于Qt提供SIGNAL和SLOTS输入处理有点不同但也非常直观。因此,您必须将鼠标SIGNALS连接到您的SLOTS。那些SLOTS将处理鼠标事件。
但是看看样本,它非常直观。