Qt opengl画多个渐变三角形,不要用着色器,输出完整代码
时间: 2024-03-05 16:51:49 浏览: 66
以下是一个简单的示例程序,用于在Qt中使用OpenGL绘制多个渐变三角形。该程序使用固定管线实现,不需要使用着色器。
```c++
#include <QtWidgets>
#include <QtOpenGL>
class GLWidget : public QGLWidget
{
public:
GLWidget(QWidget *parent = 0) : QGLWidget(parent) {}
protected:
void initializeGL()
{
// 启用混合功能
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
// 设置着色模式为平滑模式
glShadeModel(GL_SMOOTH);
// 禁用深度测试
glDisable(GL_DEPTH_TEST);
}
void paintGL()
{
glClear(GL_COLOR_BUFFER_BIT);
// 绘制第一个渐变三角形
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f(-0.5f, -0.5f, 0.0f);
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(0.5f, -0.5f, 0.0f);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f(0.0f, 0.5f, 0.0f);
glEnd();
// 绘制第二个渐变三角形
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 1.0f, 0.0f);
glVertex3f(0.0f, -0.5f, 0.0f);
glColor3f(0.0f, 1.0f, 1.0f);
glVertex3f(0.5f, 0.5f, 0.0f);
glColor3f(1.0f, 0.0f, 1.0f);
glVertex3f(-0.5f, 0.5f, 0.0f);
glEnd();
// 绘制第三个渐变三角形
glBegin(GL_TRIANGLES);
glColor3f(0.5f, 0.0f, 1.0f);
glVertex3f(-1.0f, -0.5f, 0.0f);
glColor3f(0.0f, 1.0f, 0.5f);
glVertex3f(-0.5f, 0.5f, 0.0f);
glColor3f(1.0f, 0.5f, 0.0f);
glVertex3f(-1.5f, 0.5f, 0.0f);
glEnd();
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
GLWidget w;
w.resize(640, 480);
w.show();
return a.exec();
}
```
在上述代码中,GLWidget是一个继承自QGLWidget类的自定义OpenGL窗口,其中initializeGL()函数用于初始化OpenGL状态,paintGL()函数用于绘制渐变三角形。在paintGL()函数中,我们通过glBegin和glEnd函数绘制三个渐变三角形,每个三角形的顶点颜色都不同,OpenGL会自动在三角形内部进行颜色插值,从而实现渐变的效果。
阅读全文