我正在获取与该问题中的图像相同的图像:
Confused about thread_position_in_grid
深黑色在左下角,这意味着gid.x
和gid.y
都在图像的该部分中0
。然而,Metal文档(以及类似答案:What is the coordinate system used in metal?)指出,原点位于左上角,这意味着应该在其中看到深黑色的角。
为什么似乎不是这样?
我使用CoreImage查看纹理。我像这样制作CIImage
:
CIImage(mtlTexture: kernelOutputTexture,
options: [CIImageOption.colorSpace: colorSpace])!
然后我像这样在NSImageView中查看它:
let rep = NSCIImageRep(ciImage: image)
let nsImage = NSImage(size: rep.size)
nsImage.addRepresentation(rep)
答案 0 :(得分:0)
Core Image使用坐标系,其原点位于图像的左下角。尽管您可能会怀疑在包装MTLTexture
时它将解释Metal的左上角原点,但事实并非如此。
要创建一个与原始纹理的方向匹配的CIImage
,可以请求已垂直翻转的新图像:
image = image.transformed(by: image.orientationTransform(for: .downMirrored))
orientationTransform(for:)
方法是iOS 11.0中引入的
和macOS 10.13。使用它可能比编写自己的仿射变换更鲁棒,并且效率也很高,因为Core Image使用惰性评估,而不是物理移动或复制基础数据。