Qt opengl画渐变三角形,不使用着色器
时间: 2024-03-05 08:53:53 浏览: 71
要实现渐变三角形,可以通过使用QGradient类来创建渐变并将其应用到OpenGL三角形上。
以下是实现渐变三角形的基本步骤:
1.在OpenGL上下文中启用混合(blending),以便颜色可以混合在一起。
```c++
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
```
2.创建一个QGradient对象,并将其设置为线性渐变。
```c++
QLinearGradient gradient(0, 0, 1, 1);
gradient.setColorAt(0.0, Qt::red);
gradient.setColorAt(0.5, Qt::green);
gradient.setColorAt(1.0, Qt::blue);
```
3.将QGradient对象转换为OpenGL颜色,并在三角形顶点上应用这些颜色。
```c++
QColor color1 = gradient.colorAt(0.0);
QColor color2 = gradient.colorAt(0.5);
QColor color3 = gradient.colorAt(1.0);
glBegin(GL_TRIANGLES);
glColor4f(color1.redF(), color1.greenF(), color1.blueF(), color1.alphaF());
glVertex3f(0.0, 0.5, 0.0);
glColor4f(color2.redF(), color2.greenF(), color2.blueF(), color2.alphaF());
glVertex3f(-0.5, -0.5, 0.0);
glColor4f(color3.redF(), color3.greenF(), color3.blueF(), color3.alphaF());
glVertex3f(0.5, -0.5, 0.0);
glEnd();
```
完整的渐变三角形代码示例:
```c++
#include <QtOpenGL>
#include <QLinearGradient>
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);
}
void paintGL() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
QLinearGradient gradient(0, 0, 1, 1);
gradient.setColorAt(0.0, Qt::red);
gradient.setColorAt(0.5, Qt::green);
gradient.setColorAt(1.0, Qt::blue);
QColor color1 = gradient.colorAt(0.0);
QColor color2 = gradient.colorAt(0.5);
QColor color3 = gradient.colorAt(1.0);
glBegin(GL_TRIANGLES);
glColor4f(color1.redF(), color1.greenF(), color1.blueF(), color1.alphaF());
glVertex3f(0.0, 0.5, 0.0);
glColor4f(color2.redF(), color2.greenF(), color2.blueF(), color2.alphaF());
glVertex3f(-0.5, -0.5, 0.0);
glColor4f(color3.redF(), color3.greenF(), color3.blueF(), color3.alphaF());
glVertex3f(0.5, -0.5, 0.0);
glEnd();
}
void resizeGL(int w, int h) {
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
};
```
阅读全文