鉴于正确的纹理

Hao*_*ong 3 uiimage ios scenekit

在此输入图像描述

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

ric*_*ter 7

您看到的很多内容取决于纹理映射到的几何体.假设这些图片帧是SCNPlaneSCNBox几何图形,框架的面具有从(0,0)左上角到(1,1)右下角的纹理坐标,而不管几何体的尺寸或纵横比.

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

你可以做几件事来"修复"你的纹理:

  1. 知道(或计算)图像的宽高比和要放置的几何体(面),然后使用材料contentsTransform校正图像.

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

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

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

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