Я попробовал пример QOpenGLWidget описанный здесь: https://stackoverflow.com/a/31524956/4564882QOpenGLWidget показать черный экран
, но я получаю только черный виджет. Код точно такой же. это код, связанный с QopenGLWidget:
OGLWidget::OGLWidget(QWidget *parent)
: QOpenGLWidget(parent)
{
}
OGLWidget::~OGLWidget()
{
}
void OGLWidget::initializeGL()
{
glClearColor(0,0,0,1);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
glEnable(GL_COLOR_MATERIAL);
}
void OGLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(-0.5, -0.5, 0);
glColor3f(0.0, 1.0, 0.0);
glVertex3f(0.5, -0.5, 0);
glColor3f(0.0, 0.0, 1.0);
glVertex3f(0.0, 0.5, 0);
glEnd();
}
void OGLWidget::resizeGL(int w, int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, (float)w/h, 0.01, 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0,0,5,0,0,0,0,1,0);
}
Я попробовал пример здесь: https://doc.qt.io/archives/qt-5.3/qtopengl-2dpainting-example.html. Он отлично работает (пробуя как базовый класс:. QGLWidget и QOpenGLWidget это код, связанный с виджетом:.
GLWidget::GLWidget(Helper *helper, QWidget *parent)
: QGLWidget(QGLFormat(QGL::SampleBuffers), parent), helper(helper)
{
elapsed = 0;
setFixedSize(200, 200);
setAutoFillBackground(false);
}
void GLWidget::animate()
{
elapsed = (elapsed + qobject_cast<QTimer*>(sender())->interval()) % 1000;
repaint();
}
void GLWidget::paintEvent(QPaintEvent *event)
{
QPainter painter;
painter.begin(this);
painter.setRenderHint(QPainter::Antialiasing);
helper->paint(&painter, event, elapsed);
painter.end();
}
Я использую Qt 5.5.1 бинарных файлов, построенные на моей машине, я позволяю конфигурации сборки по умолчанию, поэтому он основан на Qt ANGLE, а не на рабочем столе OpenGL. В чем проблема такого поведения?
Изменяется ли цвет при изменении 'glClearColor'? – BDL
@BDL: да, если я укажу цвет (например, красный), он отобразит весь виджет с выбранным цветом (красный). Но это не показало мне желаемого треугольника. – ProEns08
Ваш треугольник не рисуется, потому что вы используете код OpenGL 2.x, который устарел. Qt дает вам доступ к более поздним функциям OpenGL, которые вы должны использовать. Какие зависимости вы используете для функций OpenGL? – Poriferous