使用MTKTextureLoader加载图像而不翻转?

时间:2015-11-15 07:01:06

标签: ios objective-c macos metal

似乎MTKTexureLoader newTextureWithContentsOfURL...会自动翻转图片。这会导致包含常规UV坐标的所有模型和网格显示不正确。我没有在选项中看到任何内容来指定是否发生这种情况。有没有办法使用MTKTextureLoader并保持图像的方向?

3 个答案:

答案 0 :(得分:3)

我没有看到让MTKTextureLoader翻转你的图像,但你可以简单地翻转你的纹理坐标:

{ u, v } -> { u, 1-v }

答案 1 :(得分:1)

从iOS 10开始,您可以将option传递给MTKTextureLoader初始值设定项。例如,从CGImage加载纹理:

let textureOut = try textureLoader.newTexture(with: cgImage, 
    options: [MTKTextureLoaderOptionOrigin: MTKTextureLoaderOriginTopLeft as NSObject])

将翻转最初位于左下角的图像。

如果你必须处理iOS< 9,你可以强迫你的用户更新在答案中使用Rythmic Fistman或Denn Nevera的两种方法。

答案 2 :(得分:0)

我认为MTK PreLoader根据MTL坐标系统从图像创建正确的纹理:...The origin of the window coordinates is in the upper-left corner...

我认为您有三个简单的选项来处理正常方向的图像:

  1. 准备已翻转的图片
  2. 在您的应用中的MSL图形或内核功能中翻转您的图像(因为它在之前的第一个答案中提供,transformation matrix
  3. 如果您只需要在应用视图上显示图像,请使用view.layer.transfrom属性,例如:... transfrom = CATransform3DMakeRotation(CGFloat(M_PI),1.0,0.0,0.0