Rectangle Texture

矩形纹理(Rectangle_Texture)里面是一个2D image,该image不包含mipmap。当对纹理进行采样的时候,需要使用texel value来访问纹理里面的点。这和普通的GL_TEXTURE_2D的不一样,普通的纹理使用的是归一化的纹理坐标(Real time rendering 149页, 将图片纹理里面的像素,叫做texel,所以texel value指的就是纹理像素的真实的值)。

SamplerType TextureLookup 纹理坐标
GL_TEXTURE_2D sampler2D texture2D 归一化的UV坐标
GL_TEXTURE_RECTANGLE_ARB sampler2DRect,sampler2DRectShadow texture2DRect 纹理像素值
GL_TEXTURE_EXTERNAL_OES samplerExternalOES samplerExternalOES 归一化的UV坐标

使用的场景:早期的时候,纹理必须是power-of-two的。对于不是这个尺寸的纹理,rectangle texture是唯一的选择。所以这个通常被用在render target上面。因为render target通常是屏幕的尺寸大小,是不满足power-of-two的。但是现在的显卡都没有了power-of-two的限制,所以这个看起来没那么有用了。Khronos wiki里面还提到矩形纹理的一些小的用途:https://www.khronos.org/opengl/wiki/Rectangle_Texture。

虽然实际用到矩形纹理的情况不多,但是Chromium的合成器里面支持矩形纹理。
对应Vulkan的情况。Vulkan 的矩形纹理的对应是:VkSamplerCreateInfo::unnormalizedCoordinates。
Vulkan里不支持texture2DRect类型的采样器。根据https://forums.khronos.org/showthread.php/13136-Texture2D里面的讨论,得到的结论是:无论对哪种坐标系统的纹理,着色器里面的写法都是一样的(sampler2D和texture2D)。但是,如果VkSamplerCreateInfo::unnormalizedCoordinates为真,则传入的纹理坐标应该是没有归一化的。如果传入的为假,则这个坐标应该是归一化的。

参考文献:
VkSamplerCreateInfo::unnormalizedCoordinates,
https://vulkan.lunarg.com/doc/view/1.0.26.0/linux/vkspec.chunked/ch12.html
https://www.khronos.org/opengl/wiki/Rectangle_Texture

猜你喜欢

转载自blog.csdn.net/weixin_44525610/article/details/86505794
今日推荐