答案 0 :(得分:7)
您看到的很多内容取决于纹理映射到的几何体。假设这些图片框架为SCNPlane
或SCNBox
几何图形,则框架的面部的纹理坐标范围从左上角的(0,0)
到右下角的(1,1)
,无论几何的尺寸或纵横比。
SceneKit纹理映射图像,使得图像的左上角位于纹理坐标(0,0)
,右下角位于(1,1)
,无论图像的像素尺寸如何。因此,除非您的纵横比与纹理图像的纵横比相匹配,否则您将看到图像被拉伸的情况。
您可以采取一些措施来“修复”纹理:
了解(或计算)图像的宽高比和要插入的几何体(面),然后使用材质的contentsTransform
来校正图像。
例如,如果您的宽度为2且高度为1的SCNPlane
,并为其指定了方形图像,则图像将水平拉伸。如果将contentsTransform
设置为使用SCNMatrix4MakeScale(1,2,1)
创建的矩阵,则会在水平方向上将纹理坐标加倍,从而有效地将图像缩放为该方向的一半,“固定”2的宽高比:1架飞机。请注意,您可能还需要翻译,具体取决于您希望半角图像出现在几何图形面上的位置。
如果您在Xcode的场景编辑器中执行此操作,contentsTransform
是材质编辑器中的“偏移”,“缩放”和“旋转”控件,位于您在其中指定图像的位置下方屏幕截图。
了解(或计算)几何体的纵横比,以及至少一些有关图像大小的信息,并创建适合的修改后的纹理图像。
例如,如果您具有如上所述的2:1平面,并且要在其上放置320x480图像,请创建尺寸为960x480的新纹理图像 - 即匹配平面的纵横比。您可以使用此图像创建您想要的任何风格的背景,将320x480图像合成在该背景之上的任何位置。
答案 1 :(得分:-1)