opengl透明贴图_【一步步学Metal图形引擎2】-《纹理贴图》

本文详细介绍了在Metal中实现纹理贴图的概念、原理及应用,包括MTLTexture、纹理空间、采样器对象sampler、纹理滤波、纹理寻址以及Mipmaping。通过源码分析解释了如何在Metal中加载和使用纹理,展示了纹理贴图在三角形上的运行效果。
摘要由CSDN通过智能技术生成

28348cc0357e919e8e7060dee2318b6a.png

教程 2

纹理贴图

教程源码下载地址: https://github.com/jiangxh1992/MetalTutorialDemos

CSDN完整版专栏: https://blog.csdn.net/cordova/category_9734156.html

一、关键词

  • UV坐标系
  • MTLTexture
  • MTKTextureLoader贴图加载
  • Metal采样对象sampler
  • Filtering纹理滤波
  • Mipmaps
  • Addressing纹理寻址

二、原理

2.1 什么是纹理贴图

纹理texture就像是模型表面的皮肤,在没有光照计算的前提下为表面提供基础的色彩内容,纹理可以体现物体表面的性质,使物体看上去更加真实。上一章我们在片段着色器直接简单返回一个红色,相当于为模型贴了一张纯红色的纹理,只不过没有从外部的贴图资源上采样颜色。

纹理贴图通常是一张二维的图片,纹理贴图将图像离散为一定数量的像素,称为纹素,纹素最终会映射到屏幕上的像素上。

2.2 MTLTexture

MTLTexture是Metal中保存贴图数据的一张纹理缓冲,可以理解为一个framebuffer,可通过配置设置贴图是否可读可写,贴图的尺寸,贴图保存的图像数据格式等。MTLTexture在创建的时候有其decriptor对象:MTLTextureDescriptor。可以设置MTLTextureDescriptor来配置纹理贴图的属性和操作,包括后期高级设置中的storgeMode来控制贴图在内存中的存储方式等。

MTLTextureDescriptor *textureDescriptor = [[MTLTextureDescriptor alloc] init];

textureDescriptor.pixelFormat = MTLPixelFormatBGRA8Unorm;

textureDescriptor.width = image.width;
textureDescriptor.height = image.height;

id<MTLTexture> texture = [_device newTextureWithDescriptor:textureDescriptor];

2.3 纹理空间

纹理空间是针对纹理贴图的二维坐标空间,定义在0~1单位坐标系内,和屏幕分辨率宽高比无关。单位化的纹理空间坐标最终通过变换映射到(0,0)~(width,height)的屏幕空间。

纹理坐标又称uv,是在纹理自身的单位纹理空间中定义的,纹理坐标的值在0~1之间,这样确定了模型顶点的纹理坐标后,可以替换不同的纹理,无需更改纹理坐标值。Metal中纹理空间的坐标系如下,左上角为原点(不同于OpenGL纹理坐标空间原点在左下角):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值