OpenGL纹理贴图相关基本概念

2023-11-16

1.纹理贴图之所以复杂是因为矩形的纹理数据需要被合理地映射到非矩形的区域上面,纹理就是数据的数组,例如颜色数据亮度数据alpha数据等,纹理的单个数据值 被叫做纹理元素 英文叫做texual,初学者会本能地把纹理当成二维图像,但是纹理也可以是一维和三维的数据。

2.纹理贴图的特点:在不进行纹理贴图时,每个图元的绘制或者使用一种颜色单调着色或者根据每个顶点的颜色插值着色。而纹理贴图则是允许把一副图像映射到指定的多边形表面上,纹理贴图能够保证当这个多边形进行变换或渲染时,映射到多边形上的图像也能够正确,改变相机的位置 纹理细节也会跟着变大变小,但实际上纹理图像的大小是没有变化的。纹理贴图也被称为是纹理映射,我们可以把纹理映射到由一组多边形构成的表面上,也可以映射到曲面上。


3.纹理坐标

纹理映射时需要知道纹理的每个textual与渲染的3D物体的表面是如何对应的,这个映射的范围是由纹理坐标来指定,纹理坐标可以是一维二维和三维,与纹理本身的维度相关,如果使用一个二维的纹理图像,那么纹理坐标就是二维。纹理坐标需要从两个方面来理解,一个是基于纹理空间的坐标,这个坐标表示的是每一个纹理,这个坐标表示的是每一个纹理像素在纹理中的位置,这个位置可以被认为是一个列和一个行的值,它们分别由U和V来表示;另外一个坐标是3D物体的某个顶点与纹理的对应关系,这个坐标需要在输入顶点数据时指定,这个坐标不是使用纹理空间中的坐标值,而是一个从0.0~1.0的实数坐标,分别用S和T来表示,无论纹理本身宽高是多少,S和T的取值始终是在0.0到1.0之间。在pixel shader中执行纹理贴图时,会使用顶点插值后得到的s、t坐标,与纹理宽高来计算纹理空间中的具体UV坐标,最后根据UV坐标来抓取pixel


4.纹理贴图过程

我们可以看到下图表示一个纹理坐标和多边形表面的映射,我们要给图中左边的像素确定一个颜色,那么像素四个角的位置被映射到了对象空间中的图元上,这时像素的形状会有一些变形,这是由图元的形状和观察的角度所照成的,与像素角相对应的图元上的四个角被映射到纹理空间中,这个映射的过程就是纹理坐标s、t转换到纹理空间里面的u、v坐标的过程,这一映射过程再次使像素的形状产生变形,像素最终的颜色值就由该像素最终映射到的区域的纹理像素计算而得到。


5.纹理level

纹理的level与纹理的过滤相关。由前面的介绍知道,纹理的大小与实际需要贴图的多边形的大小是无法匹配的,如果多边形小于纹理的分辨率,那么需要在贴图时对纹理做缩放,缩放被称为过滤,其实就是用几个textural来混合生成一个textural提供给多边形对应的像素使用。如果只指定了顶层的纹理,那么不管多边形大小是多大,都用这个顶层纹理来生成,另外一种方法就是指定不同level的纹理,如下图所示,原始大小的纹理就是0层,每一层的宽高都是上一层纹理的一半,那么纹理level的层数是其宽高中最大值以2为底的对数,例如纹理宽高最大值是64*16,那么纹理level的最大层数就是8。指定好不同层次的纹理后,就会根据多边形大小来决定采用哪个纹理,越小的多边形就采用越小的纹理,这种提前准备好各层纹理,在3D物体缩放时,大大减小了纹理失真的现象。


6.纹理target

另外一个纹理的概念就是纹理的target,在纹理对象创建时,需要指定纹理的target,它确定了纹理的维数,纹理的target有以下几种:

(1)GL_TEXTURE_1D

(2)GL_TEXTURE_2D

(3)GL_TEXTURE_3D

(4)GL_TEXTURE_CUBE_MAP

纹理的target的指定是在绑定纹理的时候去指定的,而不是在生产纹理对象的时候去指定的。

7.纹理的格式

纹理通常用来表示物体表面,一般使用二维的图像来表示,因此常用的纹理格式有以下几种:

(1)GL_ALPHA这个只是有alpha通道的值,一般用来做字体的显示等

(2)GL_LUMINANCE只有亮度值,

(3)GL_LUMINANCE_ALPHA既有亮度显示又有alpha值

(4)GL_RGB

(5)GL_RGBA

8.纹理像素数据类型

指定完纹理像素的格式以后,还需要知道其具体的每个颜色通道的数据类型,由以下几种类型:

(1)GL_UNSIGNED_BYTE/GL_BYTE

(2)GL_UNSIGNED_SHORT/GL_SHORT

(3)GL_UNSIGNED_INT/GL_INT

(4)GL_FLOAT

(5)GL_UNSIGNED_SHORT_5_6_5:表示红色通道使用5个bit来组成,绿色通道使用6个bit,蓝色通道使用5个bit,加起来正好是16个bit两个字节,是一个unsigned short

(6)GL_UNSIGNED_SHORT_4_4_4_4:每个通道都有4个bit

(7)GL_UNSIGNED_SHORT_5_5_5_1:红绿蓝是5个bit,alpha通道是1个bit


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenGL纹理贴图相关基本概念 的相关文章

  • UE_移动端测试使用

    教程流程 参照官方文档 android篇 https docs unrealengine com 5 1 zh CN android development requirements for unreal engine https docs
  • 电巢携手陕西理工大学“硬件研发岗位岗前项目实训”顺利开班!

    为深化校企合作 产教融合助力新工科建设 提升学生工程实践能力 电巢工程能力实训班按照不同岗位类别 匹配对应的企业岗位任职能力要求对学生开展分级培养 以产业需求为导向 培养创新型 应用型人才 7月27日下午3时 深圳电巢联合陕西理工大学物理与
  • dc-3 靶机渗透学习

    靶机修复 dc 3靶机可能会存在扫不到靶机ip的问题 可以参考下面这篇博客解决 编辑网卡配置文件时命令有点错误 vim etc network interfacers 改成 vim etc network interfaces Vulnhu
  • 【SpringCloudAlibaba】Nacos服务注册和配置中心配合nginx负载

    文章目录 概述 注册中心 POM YML 启动类 CAP 配置中心 POM YML 启动类 ConfigClientController Nacos中的匹配规则 三种方案加载配置 示例 集群部署 概述 部署模式 修改derby为mysql
  • Fiddler抓包工具配置+Jmeter基本使用

    目录 一 Fiddler抓包工具的配置和使用 局域网络配置 Fiddler配置 Fiddler抓包实例 二 Jmeter的基本使用 Jmeter的安装配置 第一个Jmeter脚本 一 Fiddler抓包工具的配置和使用 在编写网关自动化脚本
  • GCC入门详解

    一 基本概念 gcc编译源程序分为4个阶段 预处理 编译 汇编 链接 1 预处理阶段 将头文件的内容插入到源代码中 替换宏定义 去掉注释等 预处理后的文件后缀名为 i 2 编译阶段 编译器将预处理后的文件翻译成汇编代码文件 后缀名为 s 3
  • uni-app 连接逍遥模拟器 安卓模拟器 不显示 找不到 端口映射

    最近公司为了让我全面发展 给了一个小活练练手 由于Android和ios开发的小伙伴比较忙 我被拉来开发一个App 由于需要多端使用 最后选择使用uni app 来开发 刚开始都是在h5页面来调试 最后测试App的时候需要使用安卓模拟器来调
  • GameMode问题

    GameMode问题 1 缘由 初始化了两个关卡 一个登录关卡 一个内容关卡 配置了两个GameMode 分别在关卡中设置好了GameMode 通过调用OpenLevel实现关卡跳转 如下图 然 运行过程中 关卡完成了跳转 进入内容关卡后G
  • MusicGen一键音乐风格迁移

    想象一下 您可以随心所欲地创作轻快的乡村曲风 缠绵的蓝调 史诗般的管弦乐 视频BGM创作之路上 再也不会有任何阻碍 01 什么是MusicGen Meta MusicGen建立在强大的Transformer模型的基础上 追随ChatGPT等
  • Pcshare远控源码偏重分析(一)

    0x00背景 PcShare是一款功能强大的远程管理软件 可以在内网 外网任意位置随意管理需要的远程主机 该软件是由国内安全爱好者无可非议开发 在当时这款远控在大家应该比较熟悉了 VC编译器调出来的的小体积全功能木马 相比Delphi的灰鸽
  • Linux权限

    一 Linux权限的概念 Linux下有两种用户 超级用户 root 普通用户 超级用户 可以再linux系统下做任何事情 不受限制 普通用户 在linux下做有限的事情 超级用户的命令提示符是 普通用户的命令提示符是 1 1 用户间的切换
  • 最优清零方案python(蓝桥杯)

    1 问题描述 给定一个长度为 N 的数列 A1 A2 AN 现在小蓝想通过若干次操作将 这个数列中每个数字清零 每次操作小蓝可以选择以下两种之一 选择一个大于 0 的整数 将它减去 1 选择连续 K 个大于 0 的整数 将它们各减去 1 小
  • 【SSM】DispatcherServlet详解

    功能 SpringMVC的核心就是DispatcherServlet DispatcherServlet实质也是一个HttpServlet DispatcherSevlet负责将请求分发 所有的请求都有经过它来统一分发 大致看下Spring
  • Maven引入本地jar包的使用方法

    关于下载配置Maven的过程我这里就不多说了 网上可以自行查询 我简述一下关于jar如果直接下载到本地之后 怎么整合到自己的maven工程呢 方式挺多的 下面列举四种方式 1 上传到maven中心仓库 https oss sonatype
  • 显示web服务器登陆,web服务器登陆界面

    web服务器登陆界面 内容精选 换一换 云解析服务支持为域名快速添加网站解析 通过该功能可以简化解析记录的配置 包含如下两种场景 网站解析至IP地址 为域名的主域名和子域名分别添加一条A类型记录集网站解析至另一域名 为域名的主域名和子域名分
  • tensorRT 分类模型构建与推理

    tensorRT分类模型构建与推理示例代码classifier cpp tensorRT include 编译用的头文件 include
  • 第三方钩子 MouseKeyHook 监控鼠标键盘事件

    public partial class Form4 Form private static IKeyboardMouseEvents m GlobalHook public Form4 InitializeComponent privat
  • 大数据实训报告_重磅|数据酷客?大数据精准营销综合实训软件平台隆重发布...

    北京大数据研究院博雅大数据学院第二套大数据专业综合实训产品 数据酷客 大数据精准营销综合实训软件平台隆重发布 大数据精准营销综合实训软件平台 平台介绍 首先 通过对海量结构化数据和非结构化文本数据的深度分析和挖掘 构建全方位的客户标签体系
  • MATLAB打开后一直在初始化,或者初始化很慢问题

    问题描述 遇到MATLAB启动较慢 进入主界面后 一直停留在 正在初始化 的状态 浪费很多时间 这种问题大多是因为MATLAB软件在启动时寻找本机的许可证或者是设置了 LM LICENSE FILE 的环境变量 这个变量告诉 MATLAB

随机推荐

  • 软件工程毕业设计选题java_软件工程毕业设计选题

    2020 01 24 东哥毕设 1122 1 分管理员和用户 国资处 三个角色 国资处这个角色一定要有 管理员 1 对用户进行增删改查 2 对设备信息管理 基本信息里面需要包括设备存放地址这个字段 这里必须有 一个状态字段 管理员添加了设备
  • 价值创造链路及经营计划

    价值创造过程最主要的环节是建立链接 北京万柳书院在网上热议 其背后是人与人的大量链接 近期热议的湖南卫视春晚亦如是 这种链接为价值的设计 沟通 传递创造条件 企业以客户为中心设计产品 往大了说是企业的生存根本 往小了说则是经营技巧 产品就是
  • TCP协议(三次握手)

    TCP Transmission Control Protocol 协议的全称是传输控制协议 它负责为不同终端系统的应用进程之间提供面向连接的通信服务 即TCP协议能够对自己提供的连接实施控制 它是一种可靠的传输层协议 一 TCP协议简介
  • 西门子PPI通讯协议

    过硬件和软件侦听的方法 分析PLC内部固有的PPI通讯协议 然后上位机采用VB编程 遵循PPI通讯协议 读写PLC数据 实现人机操作任务 这种通讯方法 与一般的自由通讯协议相比 省略了PLC的通讯程序编写 只需编写上位机的通讯程序资源S7
  • 磁环相关的计算公式

    磁环相关的计算公式 公式来源 收集于各大网站 公式仅供参考 如有错误或不全的 欢迎留言指出 通过查磁环手册或咨询供应商可知的固有量 磁环外径 D 单位mm 磁环内径 d 单位mm 磁环高度 h 单位mm 磁环芯材磁导率 u 可推导的量 导磁
  • Java 获取两个List的交集和差集,以及应用场景

    背景介绍 在实际项目中 特别是一些管理后台类的项目 会遇到底层数据是按照一对多关系的数据表存储的管理界面 列表页是一对多关系中一对应的数据列表 二级的详情页中是一对多关系中多对应的多条数据展示 通常二级页面是能够增 删 改数据的编辑页面 在
  • 使用 pymysql 操作MySQL数据库

    安装PyMySQL PyMySQL是一个Python编写的MySQL驱动程序 让我们可以用Python语言操作MySQL数据库 首先 使用pip安装PyMySQL pip install PyMySQL 使用PyMySQL 简单使用 如果有
  • Redis学习笔记①基础篇_Redis快速入门

    若文章内容或图片失效 请留言反馈 部分素材来自网络 若不小心影响到您的利益 请联系博主删除 资料链接 https pan baidu com s 1189u6u4icQYHg 9 7ovWmA 提取码 eh11 在线视频 https www
  • Android Jetpack Compose之状态持久化与恢复

    目录 1 概述 2 实例解析 4 Compose提供的MapSaver和ListSaver 4 1 mapServer 4 2 ListSaver 1 概述 在之前的文章中 我们提到了remember 我们都知道remember可以缓存创建
  • 华为云技术开放日(第三季)活动报道

    智能共生 链接未来 华为云技术开放日 第三季 精彩回顾 7 月 29日 8 月 12 日 由华为云与中生代技术社区联合主办的华为云技术开放日 第三季 圆满落下帷幕 本次技术开放日邀请了华为云 MVP 李弋凡 华为公司5G产品线首席架构师廖尔
  • 虚函数与虚函数表

    虚函数与虚函数表 一 概述 为了实现C 的多态 C 使用了一种动态绑定的技术 这个技术的核心是虚函数表 下文简称虚表 本文介绍虚函数表是如何实现动态绑定的 二 类的虚表 每个包含了虚函数的类都包含一个虚表 我们知道 当一个类 A 继承另一个
  • LeetCode 189. 轮转数组

    前言 Wassup guys 我是Edison 今天是 LeetCode 上的 leetcode 189 轮转数组 Let s get it 文章目录 1 题目分析 2 题目图解 思路一 右旋 k 次 依次移动一个 思路二 额外开数组 思路
  • 【学习笔记之操作系统原理篇】进程管理

    进程的概念 进程 单道程序 特点 顺序性 封闭性 独占性 可再现性 多道程序系统 特点 间断性 相互制约竞争资源 失去封闭性 共性资源 多个程序操作相同资源 不可再现性 运行结果不唯一 因为执行顺序不唯一 进程特征 动态性 一个进程可以对应
  • 写博客有哪些好用的工具和软件?

    写博客有哪些好用的工具和软件 在各种平台上写文章 要有一个好用的编辑器 使用简单方便 不用花很多时间排版 能预览效果等 此外 文章还需要配图片 动图和视频等 所以需要好用的截图软件 视频录制和剪辑软件 本文介绍我自己使用的软件和工具 本人认
  • mysql 重复下单_你的项目是如何处理重复请求/并发请求的?

    你的项目是如何处理重复请求 并发请求的 对于一些用户请求 在某些情况下是可能重复发送的 如果是查询类操作并无大碍 但其中有些是涉及写入操作的 一旦重复了 可能会导致很严重的后果 例如交易的接口如果重复请求可能会重复下单 重复的场景有可能是
  • GD32,在电源电路VDD VDDA VREF+/-参考设计

    GD32 在电源电路参考设计 https bbs 21ic com icview 2568876 1 9 html 资料来源于微信公众号 life and family 更多相关资料可以关注下该公众号 对于GD32 在电源电路设计方面的一些
  • C语言中volatile关键字,简单说明

    C语言中volatile关键字 如 define GPIO1 DR volatile unsigned int 0x0209C000 数据寄存器 每一位代表一个GPIO的0或1 一句话 使用volatile修饰后 会强制你每次引用GPIO寄
  • epoll移植到windows的可行性研究

    1 各有千秋 linux作为高效稳定的操作系统 部署在大量的服务器上 epoll在linux下 一个高性能的网络IO模型 在服务端领域发挥着重要的作用 但在开发效率上 windows以及visual studio系列因其良好的用户体验而更受
  • rabbitmq 添加用户和设置最大权限,也是解决mq报socket关闭异常

    此方式也是解决整合mq后 自己添加用户后 mq报socket关闭异常 1 安装完可视化mq后台后 直接http localhost 15672 进入 2 默认帐号密码 guest guest 3 首先添加用户 tags设置为admin 最大
  • OpenGL纹理贴图相关基本概念

    1 纹理贴图之所以复杂是因为矩形的纹理数据需要被合理地映射到非矩形的区域上面 纹理就是数据的数组 例如颜色数据亮度数据alpha数据等 纹理的单个数据值 被叫做纹理元素 英文叫做texual 初学者会本能地把纹理当成二维图像 但是纹理也可以