如何正确地将纹理映射到SCNSphere?

6

我希望将这张图片作为SCKSphere的材质:

enter image description here

我可以按照以下步骤进行操作:

SCNSphere *sphereGeometry = [SCNSphere sphereWithRadius:5];
sphereGeometry.firstMaterial.diffuse.contents = [UIImage imageNamed:@"navball.png"];

然而,当我运行应用程序时,图像被扭曲到了球体上,从球体顶部到底部的线条不再是直的。左侧图像显示了我的期望结果,右侧图像显示了我所经历的-波浪线,而我希望它们是直的。有没有办法确保材料正确地映射到球体上并保持线条的直线性?请注意,HTML标签应该保留。

你怎么期望这些线条保持直线呢?你能否尝试在图像编辑器中伪造一些内容来展示吗?因为这是我所期望的图像被映射到球体上的方式。 - David Rönnqvist
@DavidRönnqvist 我已更新帖子,现在包括一张图片。我说的是垂直线条,虽然由于透视关系我预期它们会出现弯曲,但我不会预期它们会显得如此“蜿蜒曲折”,缺乏更好的描述。 - stonesam92
啊,现在我明白你的意思了。我相信“映射”在技术上是正确的,但你仍然会看到三角形边缘处低分辨率球体的弯曲。 - David Rönnqvist
2个回答

4

我通过增加球体几何体的segmentCount值来解决问题,这会增加用于渲染形状的多边形网格的细节,使其看起来更加“平滑”。

有关更多详细信息,请参见SCNSphere文档


2

实时纹理映射通常使用“UV”纹理坐标来定义图像中哪个像素固定在网格中的哪个顶点上。在这些固定点之间,图像只是线性拉伸的。对于曲面,如果用平面多边形近似表面,则此近似将导致可见伪影。这就是为什么增加球体中的细分段(因此平滑度更高)使图像看起来更好的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接