您的位置:首页 > 教育 > 锐评 > 海南澄迈县_视频网址链接哪里找_谷歌广告优化师_网页设计主题参考

海南澄迈县_视频网址链接哪里找_谷歌广告优化师_网页设计主题参考

2025/2/28 17:23:09 来源:https://blog.csdn.net/ckg3824278/article/details/145577103  浏览:    关键词:海南澄迈县_视频网址链接哪里找_谷歌广告优化师_网页设计主题参考
海南澄迈县_视频网址链接哪里找_谷歌广告优化师_网页设计主题参考

1. 概述

QOpenGLFunctions 是 Qt 提供的一个工具类,用于封装 OpenGL 的函数调用。它使得在 Qt 应用程序中使用 OpenGL 更加方便和安全,同时提供了跨平台的兼容性。通过继承 QOpenGLFunctions,开发者可以轻松地访问 OpenGL 的核心功能,而无需直接调用原生的 OpenGL API。

QOpenGLFunctions 提供了大量封装的 OpenGL 函数,这些函数与 OpenGL 的原生函数一一对应,但通过 Qt 的方式进行了封装,使得代码更加简洁和易于管理。此外,QOpenGLFunctions 还提供了一些辅助功能,例如检查 OpenGL 功能是否可用。

2. 重要函数

以下是 QOpenGLFunctions 中一些常用的重要函数,这些函数覆盖了 OpenGL 的核心功能:

纹理相关
  • glActiveTexture(GLenum texture)
    激活指定的纹理单元。

  • glBindTexture(GLenum target, GLuint texture)
    绑定一个纹理对象到指定的目标。

  • glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
    定义二维纹理图像。

  • glTexParameteri(GLenum target, GLenum pname, GLint param)
    设置纹理参数。

着色器相关
  • glCreateProgram()
    创建一个新的着色器程序。

  • glCreateShader(GLenum type)
    创建一个新的着色器对象。

  • glAttachShader(GLuint program, GLuint shader)
    将着色器对象附加到着色器程序。

  • glCompileShader(GLuint shader)
    编译着色器对象。

  • glLinkProgram(GLuint program)
    链接着色器程序。

  • glUseProgram(GLuint program)
    使用指定的着色器程序。

缓冲区相关
  • glGenBuffers(GLsizei n, GLuint* buffers)
    生成一个或多个缓冲对象。

  • glBindBuffer(GLenum target, GLuint buffer)
    绑定一个缓冲对象到指定的目标。

  • glBufferData(GLenum target, GLsizeiptr size, const void* data, GLenum usage)
    设置缓冲对象的数据。

渲染相关
  • glClear(GLbitfield mask)
    清除颜色、深度或模板缓冲区。

  • glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
    设置清除颜色缓冲区时使用的颜色。

  • glDrawArrays(GLenum mode, GLint first, GLsizei count)
    使用当前的顶点数组渲染几何图元。

  • glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)
    使用顶点数组和索引数组渲染几何图元。

状态查询
  • glGetError()
    获取当前的 OpenGL 错误状态。

  • glGetProgramiv(GLuint program, GLenum pname, GLint* params)
    获取着色器程序的参数。

  • glGetShaderiv(GLuint shader, GLenum pname, GLint* params)
    获取着色器对象的参数。

  • glGetUniformLocation(GLuint program, const char* name)
    获取着色器程序中统一变量的位置。

class MyGLWidget : public QOpenGLWidget, protected QOpenGLFunctions
{Q_OBJECTpublic:MyGLWidget(QWidget *parent = nullptr) : QOpenGLWidget(parent) {}protected:void initializeGL() override{initializeOpenGLFunctions(); // 初始化 OpenGL 函数// 创建着色器程序program = new QOpenGLShaderProgram(this);if (!program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource))qFatal("Vertex shader failed");if (!program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource))qFatal("Fragment shader failed");if (!program->link())qFatal("Shader program linking failed");// 设置顶点数据vertices = { -0.5f, -0.5f, 0.0f,0.5f, -0.5f, 0.0f,0.0f,  0.5f, 0.0f };glGenBuffers(1, &vbo);glBindBuffer(GL_ARRAY_BUFFER, vbo);glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(float), vertices.data(), GL_STATIC_DRAW);}void paintGL() override{glClear(GL_COLOR_BUFFER_BIT); // 清除颜色缓冲区// 使用着色器程序program->bind();// 设置顶点属性glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, nullptr);glEnableVertexAttribArray(0);// 绘制三角形glDrawArrays(GL_TRIANGLES, 0, 3);// 释放资源glDisableVertexAttribArray(0);program->release();}void resizeGL(int w, int h) override{glViewport(0, 0, w, h); // 设置视口大小}private:QOpenGLShaderProgram *program;std::vector<float> vertices;GLuint vbo;const char *vertexShaderSource = R"(#version 330 corelayout (location = 0) in vec3 aPos;void main(){gl_Position = vec4(aPos, 1.0);})";const char *fragmentShaderSource = R"(#version 330 coreout vec4 FragColor;void main(){FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);})";
};

觉得有帮助的话,打赏一下呗。。

           

需要商务合作(定制程序)的欢迎私信!! 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com