纹理环绕方式

news2024/11/28 16:35:40

一般而言,纹理坐标范围(0,0)到(1,1),若设置超出该范围,则会按照如下环绕方式处理。
在这里插入图片描述
在这里插入图片描述
设置纹理参数的函数原型为:
在这里插入图片描述
坐标信息:
float vertices[] = {
// positions // colors // texture coords
0.9f, 0.9f, 0.0f, 1.0f, 0.0f, 0.0f, 3.0f, 3.0f, // top right
0.9f, -0.9f, 0.0f, 0.0f, 1.0f, 0.0f, 3.0f, -1.0f, // bottom right
-0.9f, -0.9f, 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, -1.0f, // bottom left
-0.9f, 0.9f, 0.0f, 1.0f, 1.0f, 0.0f, -1.0f, 3.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();
    glGenBuffers(1, &EBO);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
    textureSmile = new QOpenGLTexture(QImage("images/awesomeface.png").mirrored());
    shaderProgram.bind();
    shaderProgram.setUniformValue("textureSmile", 0);
    glBindVertexArray(0);
    textureSmile->bind(0);
    /*glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);*/
    float borderColor[] = { 1.0f, 1.0f, 0.0f, 1.0f };
    glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, borderColor);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);

paintGL()函数:

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

运行效果1(镜像重复):
在这里插入图片描述
运行效果2(指定边界)
在这里插入图片描述

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

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

相关文章

线上后端接口响应过慢排查记录_MySQLthread cache命中率过低导致的接口响应慢

文章目录 问题现象初步排查调整临时解决措施问题二次定位原因分析为什么会出现异常 问题现象 9点多&#xff0c;运营同学反馈系统某模块业务响应很慢&#xff0c;登录系统查看&#xff0c;后端接口响应耗时很久&#xff0c;需要好几秒&#xff1b; 查看对应的服务器资源情况&a…

纸箱视觉定位抓取软硬件方案

【检测目的】 产品定位抓取 【客户要求】 精度为0.1mm 【拍摄与处理效图一】 【拍摄与处理效图二】 【拍摄与处理效图三】 【拍摄与处理效图四】 【拍摄与处理效图五】 【实验原理及说明】 【实验原理及说明】 【实验原理及说明】 【方案评估】 根据目前的图像和处理结果来看…

数据结构与算法——数据结构有哪些,常用数据结构详解

数据结构是学习数据存储方式的一门学科&#xff0c;那么&#xff0c;数据存储方式有哪几种呢&#xff1f;下面将对数据结构的学习内容做一个简要的总结。 数据结构大致包含以下几种存储结构&#xff1a; 线性表&#xff0c;还可细分为顺序表、链表、栈和队列&#xff1b;树结…

云计算的学习(二)

二、计算虚拟化 1.计算虚拟化的介绍 1.1虚拟化简介 a.什么是虚拟化 将物理设备逻辑化&#xff0c;转化成文件或者文件夹&#xff0c;这个文件或文件夹一定包含两个部分&#xff1a;一部分用于记录设备配置信息&#xff0c;另一部分记录用户数据。 虚拟机摆脱了服务器的禁锢…

Centos7安装go语言环境

Centos7安装go语言环境 文章目录 下载解压缩配置变量验证已安装 下载 从go语言官网下载对应的二进制存档包 wget https://dl.google.com/go/go1.12.linux-amd64.tar.gz解压缩 解压缩到/usr/local&#xff0c;将自动在其中创建一个Go树 /usr/local/go tar -C /usr/local -xz…

HashMap学习总结

1. JDK 1.8 主要进行了哪些优化&#xff1f; 1&#xff09;底层数据结构从“数组链表”改成“数组链表红黑树”&#xff0c;主要是优化了 hash 冲突较严重时&#xff0c;链表过长的查找性能&#xff1a;O(n) -> O(logn)。 2&#xff09;计算 table 初始容量的方式发生了改…

GLM 130B和chatGLM2-6B模型结构

GLM-130B 一、预训练 采用双向注意力机制&#xff0c;对被遮挡的部分及逆行预测&#xff0c; 可以自由设置单词mask,句子smask,文章gmask,可以根据任务的不同设置mask&#xff0c;文本理解设置单词级别mask&#xff0c;文本生成色湖之句子级别的gmask&#xff0c;glm130B中设置…

Streamsets binlog采集时区问题

通过Streamsets采集mysql binglog增量数据时候&#xff0c;出现数据库中datetime时区问题。 要注意一点是&#xff0c;streamsets的前端展示的时间也是有时区的&#xff0c;后端返回的数据是时间戳&#xff0c;等于做了两次时区的转换 后端binglog时区转换->时间戳->前端…

ELK日志记录——Kibana组件——grok 正则捕获插件

grok 正则捕获插件 grok 使用文本片段切分的方式来切分日志事件 内置正则表达式调用 %{SYNTAX:SEMANTIC} ●SYNTAX代表匹配值的类型&#xff0c;例如&#xff0c;0.11可以NUMBER类型所匹配&#xff0c;10.222.22.25可以使用IP匹配。 ●SEMANTIC表示存储该值的一个变量声明&…

Linux——SIGCHLD信号——第17号信号

目录 什么是僵尸进程? 僵尸进程的目的? 如何避免僵尸进程? 总结&#xff1a; 提到SIGCHLD信号&#xff0c;就不得不先说一个有关僵尸状态的进程知识点了。 什么是僵尸进程? 首先内核会释放终止进程(调用了exit系统调用)所使用的所有存情区&#xff0c;关闭所有打开的文…

计代码行数cloc,一个代码统计行数很好用的工具

分为window、mac系统区分&#xff0c;基本是一样的&#xff0c;一个代码统计行数很好用的工具。 CLOC简介 Cloc是一款使用Perl语言开发的开源代码统计工具&#xff0c;支持多平台使用、多语言识别&#xff0c;能够计算指定目标文件或文件夹中的文件数&#xff08;files&#x…

Linux——sigaction信号捕捉函数

目录 一.sigaction () ; struct sigaction结构体的成员&#xff1a; sigaction()和signal()函数的区别&#xff1a; 二.sigaction函数的使用 sigaction函数使用案例1&#xff1a; 对该进程发送指定的信号 案例2&#xff1a;对该进程发送多个同类型的信号时&#xff1a; …

vim中文帮助文档安装

vim自带的帮助手册是英文的, 对平时编程的人来说没有多大阅读困难,在何况还有"星级译王"呢, 但是我猜和我一样连英语四级都愁的大有人&#xff0c;可偏偏就有一帮好心人人将其翻译成了中文, 可偏偏我又挡不住诱惑将它安装了, 唉.......又痛失一个学习英文的好机会, 下…

J2EE集合框架Map

目录 一.Map特点 1.无序&#xff0c;键值对&#xff0c;键不能重复&#xff0c;值可以重复 2.键重复则覆盖&#xff0c;没有继承Collection接口 二.遍历方式 1.拿到key,再拿值2.拿到映射关系&#xff0c;键值都有 取出保存所有Entry的Set,再遍历此Set即可 三.HashMap与H…

SpringBoot实现返回值数据脱敏

介绍 SpringBoot实现返回数据脱敏 有时&#xff0c;敏感数据返回时&#xff0c;需要进行隐藏处理&#xff0c;但是如果一个字段一个字段的进行硬编码处理的话&#xff0c;不仅增加了工作量&#xff0c;而且后期需求变动的时候&#xff0c;更加是地狱般的工作量变更。 下面&am…

HLS入门简述

What‘s HLS&#xff1f; HLS&#xff08;High-Level Synthesis&#xff09;高层次综合。何谓高层次&#xff1f;意味着我们可以使用高层次的语言来对设计进行描述&#xff0c;如C&#xff0c;C&#xff0c;System C等&#xff1b;那何谓综合呢&#xff1f;HLS在其中起了重要的…

Denosing score matching (公式+代码)

加噪声的分数匹配 def anneal_dsm_score_estimation(scorenet, samples, labels, sigmas, anneal_power2.):# 取出每个样本对应噪声级别下的噪声分布的标准差&#xff0c;即公式中的sigma_i&#xff0c;# 这里的 labels 是用于标识每个样本的噪声级别的&#xff0c;就是 i&…

JavaEE——常见的锁策略、CAS、synchronized 原理(八股)

文章目录 一、常见的锁策略1.乐观锁 & 悲观锁2.轻量级锁 & 重量级锁3.自旋锁 & 挂起等待锁4.互斥锁 & 读写锁5. 公平锁 & 非公平锁 二、CAS1、什么是 CAS2. CAS 的应用场景2.实现自旋锁3. CAS 中的 ABA 问题 三、 Synchronized 原理 一、常见的锁策略 当前…

DataFun: ChatGPT背后的模型详解

ChatGPT背后的模型详解 Overview Transofrmer 各个构件都有一定的作用 Multi-head self attention 每个字的重要性不一样&#xff0c;学习QKV三个矩阵&#xff08;query&#xff0c;key&#xff0c;value&#xff09; 多组QKV RLHF ChatGPT训练过程 思维链 COT

C++_简单模拟实现string的基本结构

C中&#xff0c;string早于STL问世。使用string中的构造函数可以实现对string类型的字符串的一系列操作。 今天来模拟C中的string的基本结构。注意仅仅是简单模拟&#xff0c;string内部结构其实非常复杂&#xff0c;并且不同版本的IDEstring的内部结构也不尽相同。尽管有所不…