低多边形生成网站,长沙旅游攻略景点必去长沙美食街,html网页设计实训报告范文,wordpress 调整分页大小1. 概述
QOpenGLTexture 是 Qt5 提供的一个类#xff0c;用于表示和管理 OpenGL 纹理。它封装了 OpenGL 纹理的创建、分配存储、绑定和设置像素数据等操作#xff0c;简化了 OpenGL 纹理的使用。 2. 重要函数 构造函数#xff1a; QOpenGLTexture(const QImage image,…1. 概述
QOpenGLTexture 是 Qt5 提供的一个类用于表示和管理 OpenGL 纹理。它封装了 OpenGL 纹理的创建、分配存储、绑定和设置像素数据等操作简化了 OpenGL 纹理的使用。 2. 重要函数 构造函数 QOpenGLTexture(const QImage image, QOpenGLTexture::MipMapGeneration genMipMaps GenerateMipMaps) QOpenGLTexture(QOpenGLTexture::Target target) 纹理配置 void allocateStorage() void allocateStorage(QOpenGLTexture::PixelFormat pixelFormat, QOpenGLTexture::PixelType pixelType) void setFormat(QOpenGLTexture::TextureFormat format) void setLayers(int layers) void setSize(int width, int height 1, int depth 1) 绑定和解绑 void bind() void bind(uint unit, QOpenGLTexture::TextureUnitReset reset DontResetTextureUnit) void release() void release(uint unit, QOpenGLTexture::TextureUnitReset reset DontResetTextureUnit) 设置像素数据 void setData(int mipLevel, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions *const options nullptr) void setData(const QImage image, QOpenGLTexture::MipMapGeneration genMipMaps GenerateMipMaps) 生成 Mipmaps void generateMipMaps() void generateMipMaps(int baseLevel, bool resetBaseLevel true) 获取纹理属性 int width() const int height() const int depth() const GLuint textureId() const 3. 常用枚举类型 BindingTarget纹理绑定目标如 BindingTarget2D、BindingTargetCubeMap 等。 ComparisonFunction深度和模板比较函数。 ComparisonMode比较模式如 CompareRefToTexture。 CubeMapFace立方体贴图的各个面如 CubeMapPositiveX。 DepthStencilMode深度和模板模式。 Feature纹理特性如 TextureRectangle、TextureArrays。 Filter纹理过滤方式如 Nearest、Linear。 MipMapGeneration是否生成 MipmapsGenerateMipMaps 或 DontGenerateMipMaps。 PixelFormat像素格式如 RGBA8888。 PixelType像素类型如 UnsignedByte。 SwizzleComponent颜色通道如 SwizzleRed。 SwizzleValue颜色值如 RedValue。 Target纹理目标如 Target2D。 TextureFormat纹理格式如 RGB8_UNorm。 WrapMode纹理环绕模式如 Repeat、ClampToEdge。
#include widget.hfloat vertices[] {// positions // colors // texture coords0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, // top right0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // bottom right-0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // bottom left-0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f // top left
};
unsigned int indices[] {0, 1, 3, // first triangle1, 2, 3 // second triangle
};MyGLWidget::MyGLWidget(QWidget *parent) : QOpenGLWidget(parent)
{}MyGLWidget::~MyGLWidget()
{glDeleteVertexArrays(1, VAO);glDeleteBuffers(1, VBO);glDeleteBuffers(1, EBO);
}void MyGLWidget::initializeGL()
{initializeOpenGLFunctions(); // 初始化 OpenGL 函数bool success;m_shaderProgram.addShaderFromSourceFile(QOpenGLShader::Vertex,:/shader/shader.vert);m_shaderProgram.addShaderFromSourceFile(QOpenGLShader::Fragment,:/shader/shader.frag);successm_shaderProgram.link();if(!success) qDebug()ERR:m_shaderProgram.log();//创建、绑定VAOglGenVertexArrays(1, VAO);glBindVertexArray(VAO);//创建、绑定VBO 填充数据glGenBuffers(1, VBO);glBindBuffer(GL_ARRAY_BUFFER, VBO);glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);//设置顶点属性指针glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0);glEnableVertexAttribArray(0);// 颜色属性glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(3* sizeof(float)));glEnableVertexAttribArray(1);//纹理坐标glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float)));glEnableVertexAttribArray(2);//解绑缓冲区和 VAOglBindBuffer(GL_ARRAY_BUFFER, 0);glBindVertexArray(0);//创建、绑定纹理m_diffuseTex new QOpenGLTexture(QImage(:/img/container.png).mirrored());m_specularTex new QOpenGLTexture(QImage(:/img/awesomeface.png).mirrored());m_shaderProgram.bind();m_shaderProgram.setUniformValue(texture1, 0);m_shaderProgram.setUniformValue(texture2, 1);;
}void MyGLWidget::paintGL()
{glClearColor(0.2f, 0.3f, 0.3f, 1.0f);glClear(GL_COLOR_BUFFER_BIT); // 清除颜色缓冲区m_shaderProgram.bind();m_diffuseTex-bind(0);m_specularTex-bind(1);glBindVertexArray(VAO);//glDrawArrays(GL_TRIANGLES, 0, 3);glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);glBindVertexArray(0);
}void MyGLWidget::resizeGL(int w, int h)
{glViewport(0, 0, w, h); // 设置视口大小
}unsigned int MyGLWidget::loadTexture(const char *fileName, bool alpha)
{unsigned int texture;glGenTextures(1, texture); // 生成纹理 IDglBindTexture(GL_TEXTURE_2D, texture); // 绑定纹理// 设置纹理参数glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
#if 0// 加载图片并转换为 OpenGL 格式QImage image;if (!image.load(fileName)){qWarning() Failed to load texture image;return 0;}image QGLWidget::convertToGLFormat(image); // 转换为 OpenGL 格式unsigned char *data image.bits();// 生成纹理glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image.width(), image.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, data);glGenerateMipmap(GL_TEXTURE_2D); // 生成多级渐远纹理
#elseQFile file(fileName);file.copy(file.fileName(), QFileInfo(file).fileName());int width, height, nrChannels;stbi_set_flip_vertically_on_load(true); // tell stb_image.h to flip loaded textures on the y-axis.unsigned char *data stbi_load(QFileInfo(file).fileName().toStdString().c_str(), width, height, nrChannels, 0);if (data)//awesomeface container{if(alpha)glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);elseglTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);glGenerateMipmap(GL_TEXTURE_2D);}else{std::cout Failed to load texture1 std::endl;}stbi_image_free(data);
#endifreturn texture;
}觉得有帮助的话打赏一下呗。。 需要商务合作定制程序的欢迎私信