QT glBegin没有声明?

时间:2013-03-28 05:55:53

标签: qt opengl

我正在按照教程在qt.here链接中编写一小段opengl代码 http://www.youtube.com/watch?v=1nzHSkY4K18

但是在6:13,当我对代码进行钝化时,它显示了一些错误

..\testopgl\glwidget.cpp: In member function 'virtual void GLWidget::paintGL()':
..\testopgl\glwidget.cpp:17:20: error: 'glColor3f' was not declared in this scope
..\testopgl\glwidget.cpp:19:25: error: 'glBegin' was not declared in this scope
..\testopgl\glwidget.cpp:20:31: error: 'glVertex3f' was not declared in this scope
..\testopgl\glwidget.cpp:23:11: error: 'glEnd' was not declared in this scope
..\testopgl\glwidget.cpp: At global scope:

的 我真正不明白的是当我只把glClear(GL_COLOR_BUFFER_BIT)建立好了,但是即使我只是把glColor3f()发生错误.GLWidget不支持glColor *()或glBegin()命令吗?

这是我的代码。

testopgl.pro

#-------------------------------------------------
#
# Project created by QtCreator 2013-03-28T09:48:44
#
#-------------------------------------------------

QT       += core gui opengl

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = testopgl
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp \
    glwidget.cpp

HEADERS  += mainwindow.h \
    glwidget.h

FORMS    += mainwindow.ui

glwidget.h

#ifndef GLWIDGET_H
#define GLWIDGET_H

#include <QGLWidget>

class GLWidget : public QGLWidget
{
    Q_OBJECT
public:
    explicit GLWidget(QWidget *parent = 0);

    void initializeGL();
    void paintGL();
    void resizeGL(int w,int h);
};

#endif // GLWIDGET_H

glwidget.cpp

#include "glwidget.h"


GLWidget::GLWidget(QWidget *parent) :
    QGLWidget(parent)
{
}

void GLWidget::initializeGL(){
    glClearColor(1,1,0,1);
}

void GLWidget::paintGL(){
    glClear(GL_COLOR_BUFFER_BIT);


    glColor3f(1,0,0);

    glBegin(GL_TRIANGLES);
        glVertex3f(-0.5,-0.5,0);
        glVertex3f(0.5,-0.5,0);
        glVertex3f(0.0,0.5,0);
    glEnd();


}

void GLWidget::resizeGL(int w,int h){

}

1 个答案:

答案 0 :(得分:2)

您提到的功能根本不存在于任何现代版本的GL中,因此您关注的教程听起来已经过时了。

因此,通过构建QT暴露的GL版本可能没有这些功能。有可能重新配置/重建QT以使用较旧版本的GL,但我建议了解并使用现代可编程接口。