Metal学习:纹理和采样

纹理基本概念

在上一篇文章中,我们知道如何用metal在屏幕上画一个三角形,并且也了解了如何给顶点传递颜色来改变三角形的颜色。但是在计算机图形中仅仅靠程序指定颜色是远远不够的,如果想要图像看起来逼真生动,那么就需要使用纹理。本文介绍如何在metal中使用纹理,包括从一副图片构造纹理,然后从纹理采样,并贴到之前的三角形上给。
在GPU中的纹理,可以理解为GPU中的一个内存,这个内存可以由CPU去更新数据。例如可以在CPU读取图像的数据到内存,然后更新GPU中的纹理。而采样是一个动作,它控制GPU在画图时如何从纹理读取数据。

纹理坐标

在metal中,纹理的原点坐标在左上角,这和openGL是不同的(OpenGL的纹理原点坐标在左下角),如下图所示:
在这里插入图片描述
当把图像的数据上传到纹理时,需要保持图像和纹理的坐标一致。一般来说纹理是有大小的,比如上传一个800X600的图像,所创建的纹理大小也应该是800X600。但是在metal使用这个纹理的时候,一般是使用的一个归一化的坐标,横坐标和纵坐标都是从0到1,我们把这个归一化的坐标叫做纹理坐标。也就是左上角的坐标为(0, 0),右下角的坐标为(1, 1)。采样的时候是通过纹理坐标来获取纹理对应的颜色。

纹理过滤

纹理是有大小的,它是由一定数量的像素点组成的,但是当在画图的时候,有可能要贴图的物体大小和纹理的大小不一致,这时候就需要告诉GPU如何将纹理的像素映射到纹理坐标,这一个过程就叫过滤,metal提供两种过滤的方式nearest和linear。nearest是简单的找一个离纹理坐标最近的像素点的值,这种方式速度非常快,但是在放大的时候,会产生块状现象。linear是找到纹理坐标周围4个像素点,然后给根据像素点离纹理坐标的距离产生一个权重,最终进行相加得到一个数值。linear可以产生比nearest更好的效果,但是效率上来说低一点。
可以知道分别有放大和缩小两种情况,当纹理小于被画的物体时,是放大(magnification),当大于被画的物体时,是缩小(minification),可以对这两种情况设置不同的filter。

纹理环绕

通常来说纹理的坐标应该设置为0到1之间的数值,但是当超出0到1的范围,也是可以的。这时候就需要设置纹理的环绕方式,Metal把这个行为称之为Ad

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值