OpenGl纹理贴图

news2024/9/23 1:31:22

给图形赋予颜色时,采用纹理贴图的方式。
每个顶点关联一个纹理坐标(Texture Coordinate),然后在图形的其他片段上进行片段插值(Fragment Interpolation)
顶点坐标如下:
float vertices[] = {
// positions // colors // texture coords
0.2f, 0.2f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, // top right
0.2f, -0.2f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // bottom right
-0.2f, -0.2f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // bottom left
-0.2f, 0.2f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f // top left
};
unsigned int indices[] = { // note that we start from 0!
0, 1, 3, // first triangle
1, 2, 3 // second triangle
};
initializeGL()函数代码:

	initializeOpenGLFunctions();
    //创建VBO和VAO对象,并赋予ID
    glGenVertexArrays(1, &VAO);
    glGenBuffers(1, &VBO);
    //绑定VBO和VAO对象
    glBindVertexArray(VAO);
    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    //为当前绑定到target的缓冲区对象创建一个新的数据存储。
    //如果data不是NULL,则使用来自此指针的数据初始化数据存储
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
    //告知显卡如何解析缓冲里的属性值
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0);
    //开启VAO管理的第一个属性值
    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);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
    bool success;
    shaderProgram.addShaderFromSourceFile(QOpenGLShader::Vertex, "shaders/shapes.vert");
    shaderProgram.addShaderFromSourceFile(QOpenGLShader::Fragment, "shaders/shapes.frag");
    success = shaderProgram.link();
    if (!success)
        qDebug() << "ERR:" << shaderProgram.log();
    // glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
    glGenBuffers(1, &EBO);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
    textureWall = new QOpenGLTexture(QImage("images/wall.jpg").mirrored());
    shaderProgram.bind();
    shaderProgram.setUniformValue("textureWall", 0);
    glBindVertexArray(0);

paintGL()函数:

	glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    shaderProgram.bind();
    glBindVertexArray(VAO);
    textureWall->bind(0);
    glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, NULL);

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/728501.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

飞控学习笔记-传感器IMU(陀螺仪+加速度计+磁力计)

陀螺仪 陀螺仪校准 加速度计 加速度不仅包含载体运动的加速度&#xff0c;也包括地球的重力加速度&#xff0c;所以也称为比力计 加速度计标定&#xff08;校准&#xff09; 姿态解算和惯性导航的重要传感器为加速度计、陀螺仪和磁强计&#xff0c;这三种传感器中&#xff0c…

爆肝4万字❤️零基础掌握Verilog HDL

文章目录 0.前言1.Verilog HDL简介1.1 什么是Verilog HDL1.2 verilog发展历史ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ1.3 为什么要使用verilog1.4 IP core 2.语法入门详解2.1 数据类型及常量变量2.1.1 数据类型2.1.2 常量2.1.3 变量2.1.3.1 连线型-wire(assign的使用)2.…

【数据分析 - 基础入门之NumPy④】NumPy基本操作 - 一

知识目录 前言一、NumPy介绍1.1 导入NumPy库1.2 查看NumPy版本1.3 读取图片返回NumPy数组 二、创建NumPy数组的十二种方式2.1 array 和 full2.2 zeros 和 ones2.3 随机数数组2.4 服从正态分布的数组2.5 arrange 和 eye、linspace 三、ndarray属性四、ndarray基本操作4.1 索引4.…

渗透专题丨Vulnhub-Tr0ll靶机打靶

首先安装好靶机&#xff0c;再打开Kali&#xff0c;使用ifconfig查看Kali IP信息&#xff0c;之后使用nmap进行扫描网段&#xff1a; image-20230629200225568 经过排除主机IP和Kali IP&#xff0c;选择192.168.38.139&#xff0c;进行端口扫描&#xff1a; image-20230629201…

PDF怎么转Excel?这三个方法非常实用!

在现代生活中&#xff0c;PDF&#xff08;Portable Document Format&#xff09;已成为广泛使用的文件格式之一。然而&#xff0c;有时我们需要将PDF文件中的数据提取并转换为Excel&#xff08;电子表格&#xff09;格式&#xff0c;以便更方便地编辑、分析和处理数据。本文将介…

剑指offer34.二叉树中和为某一值的路径

用深度遍历的方法找出每一条路径&#xff0c;看看和是否是目标值。 class Solution {Deque<Integer> queue new LinkedList<Integer>();List<List<Integer>> res new LinkedList<List<Integer>>();public List<List<Integer>&…

Component name ‘Channel‘ should always be multi-word

新建vue文件后&#xff0c;会出现第一行代码爆红现象 报错原因: 在组件命名的时候未按照 ESLint 的官方代码规范进行命名&#xff0c;根据 ESLint 官方代码风格指南&#xff0c;除了根组件&#xff08;App.vue&#xff09;以外&#xff0c;其他自定义组件命名要使用大驼峰命名方…

IO流总结:

常用方法&#xff1a; 输入&#xff1a; new bufferedreader(new FileReader(“a.txt”))

Hadoop知识点

1.HDFS写数据流程 客户端通过Distributed FileSystem模块向NameNode请求上传文件&#xff0c;NameNode检查目标文件是否已存在&#xff0c;父目录是否存在。NameNode返回是否可以上传。客户端请求第一个 Block上传到哪几个DataNode服务器上。NameNode返回3个DataNode节点&#…

进程池线程池实现TCP高性能并发通信

进程池线程池实现TCP高性能并发通信 使用进程池与线程池实现并发服务&#xff0c;为多个客户进行接收和发送消息的服务 代码实现 # 导入进程池 from multiprocessing import Pool, cpu_count # 导入线程池 from multiprocessing.pool import ThreadPool from socket import …

动态规划P1

动态规划P1 1.数字三角形模型 1.1只取一条最大路或最小路 1015. 摘花生 只能向下或向右走&#xff0c;求最大能取多少花生 记录每个点最大能取到多少花生&#xff0c;从左上一直推到右下角 d p [ i ] [ j ] m a x ( d p [ i − 1 ] [ j ] , d p [ i ] [ j − 1 ] ) a [ …

mybatis-plus记录

1. 导入依赖 注意&#xff1a;springboot和mybatisplus的版本必须一致 导入build工具 <build><plugins><!-- 具体插件&#xff0c;逆向工程的操作是以构建过程中插件形式出现的 --><plugin><groupId>org.mybatis.generator</groupId>&l…

微信视频号配合OBS拉流推流开直播

背景 公司有要求&#xff0c;要实现外部视频流的同步直播&#xff0c;所以特意研究了一下OBS软件结合微信视频号直播的操作步骤。 一、OBS软件配置 &#xff08;一&#xff09;配置拉流 启动OBS软件-点击“”-选择增加“媒体源” 创建源名称 取消本地文件-填写拉流地址-…

MFC List Control控件添加单元格编辑和单元格下拉列表

文章目录 初始化编译栏的创建与销毁下拉列表的创建与销毁自定义编译栏与下拉框的焦点问题点击CListCtrl 事件处理程序双击添加全部代码 ui 设置 初始化 #define IDC_EDIT_CREATEID 3000 #define IDC_COMBOX_CREATEID 3001int e_Item0; //刚编辑的行 int e_SubItem2; //刚…

导入数据解析

Before未定义异常情况 继承 AnalysisEventListener 重写 onException Overridepublic void onException(Exception exception, AnalysisContext context) throws Exception {if (exception instanceof ExcelDataConvertException) {ExcelDataConvertException excelDataConvert…

Django的数据库模型迁移命令makemigrations和migrate是否会导致数据库中的数据丢失?

我们知道&#xff0c;如果在Django的文件models.py中写好了数据库模型&#xff0c;要生成对应的数据库&#xff0c;需要执行下面两条命令&#xff1a; python manage.py makemigrations python manage.py migrate其中命令 makemigrations 是生成迁移执行文件&#xff0c;命令 …

tortoiseGit fatal: Could not read from remote repository.

1、问题场景&#xff1a; 使用tortoiseGit工具pull代码的时候报错 git.exe pull --progress -v --no-rebase "origin" fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 无法从存…

投票管理平台达到投票平台投票平台平台投票

现在来说&#xff0c;公司、企业、学校更多的想借助短视频推广自己。 通过微信投票小程序&#xff0c;网友们就可以通过手机拍视频上传视频参加活动&#xff0c;而短视频微信投票评选活动既可以给用户发挥的空间激发参与的热情&#xff0c;又可以让商家和企业实现推广的目的&am…

基于图的路径规划算法对比

基于图的路径规划算法对比 算法说明与实现效果构造路网路网数据转化为图matlab代码 算法说明与实现效果 通过构造邻接矩阵&#xff0c;在构造的路网中找到一个节点通向另一个节点的最短路径&#xff0c;包括DJ&#xff0c;Floyd&#xff0c;A*&#xff0c;ACO&#xff0c;GA算…

以阻塞方式对IO文件进行读取

以阻塞方式对IO文件进行读取(test.c读取&#xff0c;test2.c发送数据) 实验结果 执行test.c生成的pro1可执行文件&#xff0c;光标显示处于阻塞状态 执行test2.c生成的pro2可执行文件&#xff0c;test.c处打印 hello dhl 三级标题test.c #include <stdlib.h> #inclu…