Bootstrap

学习OpenGL知识点(1)

三角形绘制

程序我就不提了,现在的人工智能都会给你写出来,我只写其中的关键知识,自己试验悟出来的函数用法等。

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实现的函数

;