当前位置: 首页 > news >正文

高邮城乡建设局 网站长春网站建设厂家

高邮城乡建设局 网站,长春网站建设厂家,网站建设合理流程,网站程序和数据库1. 概述 QOpenGLTexture 是 Qt5 提供的一个类,用于表示和管理 OpenGL 纹理。它封装了 OpenGL 纹理的创建、分配存储、绑定和设置像素数据等操作,简化了 OpenGL 纹理的使用。 2. 重要函数 构造函数: 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:纹理绑定目标,如 BindingTarget2DBindingTargetCubeMap 等。

  • ComparisonFunction:深度和模板比较函数。

  • ComparisonMode:比较模式,如 CompareRefToTexture

  • CubeMapFace:立方体贴图的各个面,如 CubeMapPositiveX

  • DepthStencilMode:深度和模板模式。

  • Feature:纹理特性,如 TextureRectangleTextureArrays

  • Filter:纹理过滤方式,如 NearestLinear

  • MipMapGeneration:是否生成 Mipmaps,GenerateMipMapsDontGenerateMipMaps

  • PixelFormat:像素格式,如 RGBA8888

  • PixelType:像素类型,如 UnsignedByte

  • SwizzleComponent:颜色通道,如 SwizzleRed

  • SwizzleValue:颜色值,如 RedValue

  • Target:纹理目标,如 Target2D

  • TextureFormat:纹理格式,如 RGB8_UNorm

  • WrapMode:纹理环绕模式,如 RepeatClampToEdge

#include "widget.h"float 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");success=m_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 texture's 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;
}

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

           

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

http://www.dtcms.com/a/509399.html

相关文章:

  • 浙江城乡建设网站证件查询张家港网站建设服务
  • 【Java工程师面试全攻略】Day14:大数据处理与实时计算深度解析
  • 网上做家教的网站您备案的网站名称没有关联性
  • 互联网科技公司做网站哪家好标题优化seo
  • 宿州精品网站建设建设银行银行官网网站
  • 深圳中国电信网站备案新注册网站
  • 商业网站建设费用网站功能模块建设
  • 固原网站制作高端网站设计制作的
  • 从代码角度分析网站怎么做wordpress商
  • 自己动手建立网站3重庆手机网站推广方法
  • 目前网站软件设计制造中国第一架飞机的人是
  • O(1)时间复杂度实现有setAll功能的哈希表
  • 南昌网站做ppt模板免费的网站推荐
  • 做网站网站庄家北京软件开发公司排
  • 做网站销售门窗怎么做网站建设细化流程
  • 足球梦网站建设的基本思路重庆有几个区
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段-二阶段(4):文法運用
  • 专门做相声的网站百度手机助手app下载官网
  • 邯郸网站关键字优化专科千万别学数字媒体应用技术
  • 网络攻防技术:假消息攻击
  • 刷赞网站推广软件企业网站建设的申请
  • 沈阳工伤保险做实在哪个网站婚礼策划网站建设
  • 企业网站建站wordpress登陆页面
  • 介绍好的免费网站模板下载广州海珠网站开发方案
  • 东莞专业网站建设平台长沙手机网站建设哪些内容
  • 工程施工行业在哪个网站容易找事做宿迁房产网签备案查询系统
  • 网站开发时如何设计英文版本做进口产品的网站
  • mie-散射-远场
  • 中山制作网站的公司怎么做俄语网站
  • 北京手机网站设计建设银行网站未响应