2

我正在按照教程在qt中编写一小段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){

}
4

1 回答 1

3

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

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

于 2013-03-28T06:38:27.670 回答