我是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();
Run Code Online (Sandbox Code Playgroud)
Qt的文档中不存在上述过剩函数.所以我的问题是如何在QGLWidget的函数中找到等效的glut函数?
您需要实现从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);
};
Run Code Online (Sandbox Code Playgroud)
您还需要覆盖三个重要的函数,初始化 GL (),您正在准备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();
}
Run Code Online (Sandbox Code Playgroud)