Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Swift 2.1中使用滑动/点击(动态)为3D对象着色_Swift_3d_Sprite Kit_Textures_Scenekit - Fatal编程技术网

如何在Swift 2.1中使用滑动/点击(动态)为3D对象着色

如何在Swift 2.1中使用滑动/点击(动态)为3D对象着色,swift,3d,sprite-kit,textures,scenekit,Swift,3d,Sprite Kit,Textures,Scenekit,我必须建立一个Swift应用程序,可以用各种手势给3D物体上色。我有一个作为SceneKit对象导入的Collada文件。我找不到办法用水龙头给它上色。我试图从WWDC示例中转换Obj-C,但它对我不起作用 我尝试在3D对象上应用SpriteKit作为纹理,但结果是: 当用户点击屏幕时,应用程序应该获取3D对象纹理的坐标,然后在该点添加一个SpriteKit节点 之前: 之后: 我不知道为什么纹理会那样爆炸 谢谢大家! SpriteKit场景坐标系不会像图像那样映射到纹理坐标。图像中的像素坐

我必须建立一个Swift应用程序,可以用各种手势给3D物体上色。我有一个作为SceneKit对象导入的Collada文件。我找不到办法用水龙头给它上色。我试图从WWDC示例中转换Obj-C,但它对我不起作用

我尝试在3D对象上应用SpriteKit作为纹理,但结果是:

当用户点击屏幕时,应用程序应该获取3D对象纹理的坐标,然后在该点添加一个SpriteKit节点

之前:

之后:

我不知道为什么纹理会那样爆炸


谢谢大家!

SpriteKit场景坐标系不会像图像那样映射到纹理坐标。图像中的像素坐标具有向下增加的y轴;在SpriteKit场景中,y轴向上

如果您只需将SpriteKit场景映射到
SCNPlane
上,这一点会更加明显,因为这是SceneKit场景中唯一的一件事-您将看到图像被翻转

左:图像从束中加载,右:图像填充映射到平面的
SKScene
(带注释)

要解决此问题,需要两步坐标变换:

  • 将原点y坐标向上平移
    sk场景的高度
  • 按-1缩放y坐标,使增加的坐标向下,而不是向上
  • 可以在
    SKScene
    中执行此操作,也可以在
    SCNMaterialProperty
    中执行此操作,该属性将SpriteKit内容纹理映射到SceneKit对象上。我赞成
    SCNMaterialProperty
    方法-只需为其属性设置适当的矩阵:

    let translate = SCNMatrix4MakeTranslation(0, 1, 0)
    let yFlippedTranslate = SCNMatrix4Scale(translate, 1, -1, 1)
    material.diffuse.contentsTransform = yFlippedTranslate
    
    请注意,如果您还试图使用材质的纹理坐标(通过
    scnhittstresult
    )将触摸/单击事件映射到SpriteKit场景中,则需要在该场景中执行类似的转换:

    let texcoord = result.textureCoordinatesWithMappingChannel(0)
    sprite.position.x = texcoord.x * skScene.size.width
    sprite.position.y = (1 - texcoord.y) * skScene.size.height