Qt opengl画渐变三角形,使用glBeigin
时间: 2023-07-11 19:29:20 浏览: 127
OpenGL 画三角形
5星 · 资源好评率100%
你可能打错了单词,我猜你的意思是使用 glBegin 函数而不是 glBeigin 函数。
在使用 glBegin 函数的情况下,实现渐变三角形可以通过调用 glColor3f 函数来设置每个顶点的颜色,然后在 glBegin 和 glEnd 之间绘制三角形。
以下是使用 glBegin 函数的实现渐变三角形的基本步骤:
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.在 glBegin 和 glEnd 之间绘制三角形,并使用 glColor3f 函数在每个顶点上设置颜色。
```c++
QColor color1 = gradient.colorAt(0.0);
QColor color2 = gradient.colorAt(0.5);
QColor color3 = gradient.colorAt(1.0);
glBegin(GL_TRIANGLES);
glColor3f(color1.redF(), color1.greenF(), color1.blueF());
glVertex3f(0.0, 0.5, 0.0);
glColor3f(color2.redF(), color2.greenF(), color2.blueF());
glVertex3f(-0.5, -0.5, 0.0);
glColor3f(color3.redF(), color3.greenF(), color3.blueF());
glVertex3f(0.5, -0.5, 0.0);
glEnd();
```
完整的使用 glBegin 函数的渐变三角形代码示例:
```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);
glColor3f(color1.redF(), color1.greenF(), color1.blueF());
glVertex3f(0.0, 0.5, 0.0);
glColor3f(color2.redF(), color2.greenF(), color2.blueF());
glVertex3f(-0.5, -0.5, 0.0);
glColor3f(color3.redF(), color3.greenF(), color3.blueF());
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();
}
};
```
阅读全文