三角形绘制
程序我就不提了,现在的人工智能都会给你写出来,我只写其中的关键知识,自己试验悟出来的函数用法等。
void myglWidget::resizeGL(int w, int h)
{
//这个函数是设置视口大小,窗口大小变化自动调用,你每次调整窗口大小时他都会变
glViewport(0, 0, w, h);
qDebug()<<"视口变化为"<<w<<" "<<h;
}
一 .glViewport
首先是resizeGL函数,这是对QOpenGLWidget虚函数进行的实现重写,目的是在Qt窗口中大小变化时GL的视口大小也跟着变化,当你拖动时宽和高的变化打印如下:
而OpenGL中视口变化的函数是glViewPort(GLint x, GLint y, int x, int y)四个参数的意思是视口相对于左侧的距离,视口起点距最下方的距离,视口宽,视口高 ,后两个参数在Qt中自动设置,而前两个参数可以调,但通常为0 ,意为视口从窗口左下方开始。不过我尝试修改这两个参数,并没有什么变化。
二. glClearColor
glClearColor(0.1f, 0.2f, 0.3f, 1.0f); // 设置清除颜色为黑色
有时我们需要清除颜色缓冲区和深度缓冲区,需要先设置清楚颜色,这个设置就有点类似设置背景;
前三个参数很好理解,即红绿蓝三原色,范围是0-1,第四个表示透明度分量,0.0 表示完全透明,1.0 表示完全不透明,有待验证用法。
三. glColor3f
glColor3f(0.5f, 0.7f, 0.3f);
这个函数是设置用当前的颜色。这个颜色将用于后续的绘制操作,直到再次调用 glColor3f 或其他颜色设置函数。glColor3f 函数有三个参数,代表红色、绿色和蓝色分量。
四. glClear
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
用于清楚两个缓冲区内容,这里就得说下缓冲区的概念,
颜色缓冲区是存储每个像素颜色值的地方。在渲染过程中,每个像素的颜色值会被写入颜色缓冲区。这些颜色值最终会显示在屏幕上。
深度缓冲区(也称为 Z 缓冲区)用于解决三维图形中的隐藏面消除问题。每个像素在深度缓冲区中都有一个对应的深度值,这个值表示该像素距离摄像机的距离。通过比较深度值,OpenGL 可以确定哪些像素应该被绘制,哪些像素应该被遮挡。
五.initializeOpenGLFunctions();
void myglWidget::initializeGL()
{
initializeOpenGLFunctions();
glClearColor(0.1f, 0.2f, 0.3f, 1.0f); // 设置清除颜色为深蓝色
}
初始化 OpenGL 函数指针,确保所有OpenGL的函数都被正确初始化,这是QOpenGLWidget实现的函数