鉴于正确的纹理

时间:2017-02-20 13:27:12

标签: ios uiimage scenekit

enter image description here

正如您所看到的,photoFrame的纹理是方形图像。但是当我将它设置为漫反射内容时,效果非常糟糕。那么如何在矩形框中显示方形图像,而不是拉伸图像。

2 个答案:

答案 0 :(得分:7)

您看到的很多内容取决于纹理映射到的几何体。假设这些图片框架为SCNPlaneSCNBox几何图形,则框架的面部的纹理坐标范围从左上角的(0,0)到右下角的(1,1),无论几何的尺寸或纵横比。

SceneKit纹理映射图像,使得图像的左上角位于纹理坐标(0,0),右下角位于(1,1),无论图像的像素尺寸如何。因此,除非您的纵横比与纹理图像的纵横比相匹配,否则您将看到图像被拉伸的情况。

您可以采取一些措施来“修复”纹理:

  1. 了解(或计算)图像的宽高比和要插入的几何体(面),然后使用材质的contentsTransform来校正图像。

    例如,如果您的宽度为2且高度为1的SCNPlane,并为其指定了方形图像,则图像将水平拉伸。如果将contentsTransform设置为使用SCNMatrix4MakeScale(1,2,1)创建的矩阵,则会在水平方向上将纹理坐标加倍,从而有效地将图像缩放为该方向的一半,“固定”2的宽高比:1架飞机。请注意,您可能还需要翻译,具体取决于您希望半角图像出现在几何图形面上的位置。

    如果您在Xcode的场景编辑器中执行此操作,contentsTransform是材质编辑​​器中的“偏移”,“缩放”和“旋转”控件,位于您在其中指定图像的位置下方屏幕截图。

  2. 了解(或计算)几何体的纵横比,以及至少一些有关图像大小的信息,并创建适合的修改后的纹理图像。

    例如,如果您具有如上所述的2:1平面,并且要在其上放置320x480图像,请创建尺寸为960x480的新纹理图像 - 即匹配平面的纵横比。您可以使用此图像创建您想要的任何风格的背景,将320x480图像合成在该背景之上的任何位置。

答案 1 :(得分:-1)

enter image description here

我在材质编辑器中更改了比例和偏移以及WrapT属性。效果很好。但是当我运行它时,我无法获得相同的效果。所以我尝试通过更改contentsTransform属性来编程。但是规模,偏移它们都会影响contentsTransform。因此,如果offSet为(0,-4.03)且Scale为(1,11714),那么contentsTransform是什么?