gpt4 book ai didi

c++ - 如何在 QOpenGLWidget 中渲染三角形?

转载 作者:可可西里 更新时间:2023-11-01 15:38:10 25 4
gpt4 key购买 nike

我正在尝试使用 QOpenGLWidget 在 Qt 内部使用 OpenGL,但我很难找到任何相关示例。我是 OpenGL 的新手,所以我想学习如何使用它,但我发现的教程似乎在 QOpenGLWidget 中应用得不是特别好。现在,我只想渲染一个三角形。

这是我目前所拥有的。

标题:

namespace Ui {
class Widget;
}

class Widget : public QOpenGLWidget, protected QOpenGLFunctions
{
public:
explicit Widget(QWidget *parent = 0);
~Widget();

protected:
void initializeGL();
void resizeGL(int, int);
void paintGL();

private:
Ui::Widget *ui;
};

类:

Widget::Widget(QWidget *parent) :
QOpenGLWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}

void Widget::initializeGL()
{
// Set up the rendering context, load shaders and other resources, etc.:
initializeOpenGLFunctions();
glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
}

void Widget::resizeGL(int w, int h)
{
// Update projection matrix and other size-related settings:
}

void Widget::paintGL()
{
// Draw the scene:
glClear(GL_COLOR_BUFFER_BIT);
}

Widget::~Widget()
{
delete ui;
}

有没有我可以用来渲染基本三角形的示例?我试过这里的那个:https://www.khronos.org/assets/uploads/books/openglr_es_20_programming_guide_sample.pdf ,但它引发了很多我无法解决的错误。

我也不知道 OpenGL 上下文在 QOpenGLWidget 中是如何工作的。

*编辑:事实证明,这些示例是我的发行版 (Arch Linux) 上的一个单独包。我能够安装它们,看起来有很多东西可以开始使用。

感谢您的帮助!

最佳答案

如果您想使用QOpenGLWidget 而不是QGLWidget,那么这就是实现它的方法。

打开 Qt Creator 并选择 Qt Widgets Application。如下添加小部件和按钮

enter image description here

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();

return a.exec();
}

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private:
Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

现在添加新类并将其命名为OGLWidget,它应该继承自QOpenGLWidget

oglwidget.h

#ifndef OGLWIDGET_H
#define OGLWIDGET_H

#include <QWidget>
#include <QOpenGLWidget>
#include <gl/GLU.h>
#include <gl/GL.h>

class OGLWidget : public QOpenGLWidget
{
public:
OGLWidget(QWidget *parent = 0);
~OGLWidget();

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

#endif // OGLWIDGET_H

oglwidget.cpp

#include "oglwidget.h"

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);
}

现在回到表单并右键单击小部件。选择promoted widgets 并输入提升的类名OGLWidget。点击添加按钮,然后进行推广。现在单击背景并转到其属性并将 windowModality 更改为 ApplicationModel。

enter image description here

这是你应该得到的结果

enter image description here

.pro 文件是

#-------------------------------------------------
#
# Project created by QtCreator 2015-07-20T15:15:29
#
#-------------------------------------------------

QT += core gui opengl

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = test2
TEMPLATE = app


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

HEADERS += mainwindow.h \
oglwidget.h

FORMS += mainwindow.ui

关于c++ - 如何在 QOpenGLWidget 中渲染三角形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31522637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com