【问题标题】:How to fit a texture to a surface? ARKit SceneKit Swift如何将纹理拟合到表面? ARKit SceneKit Swift
【发布时间】:2018-02-15 06:43:18
【问题描述】:

总的来说,我对场景套件和 3d 开发非常陌生,我正在使用 ARKit 并尝试将纹理拟合到平面(实际上是一个 scnbox,但只有顶部表面),但我严重失败了,而且在网络上找不到任何有用的东西。

我的道路纹理是一个非常长的矩形 png 图像。宽高比约为20:1

一旦 arkit 为我找到了平面,我想将此纹理应用到桌子的表面。在应用启动之前我不知道表格的尺寸。

我目前可以在这个平面上应用纹理,还可以根据需要旋转纹理。

我想要完成的是拉伸纹理(保持原始比例),使平面的短边和纹理对齐,然后纹理一直持续到平面的末端,根据平面的长度或比例。

这里是获取 ScnMaterial 对象的函数

class func getRunwayMaterial() -> SCNMaterial {
    let name = "runway"
    var mat = materials[name]
    if let mat = mat {
        return mat
    }
    mat = SCNMaterial()
    mat!.lightingModel = SCNMaterial.LightingModel.physicallyBased
    mat!.diffuse.contents = UIImage(named: "./Assets.scnassets/Materials/runway/runway.png")
    mat!.diffuse.wrapS = SCNWrapMode.repeat
    mat!.diffuse.wrapT = SCNWrapMode.repeat
    materials[name] = mat
    return mat!
}

这是应该在平面上对纹理进行缩放和旋转的函数。

func setRunwayTextureScale(rotation: Float? = nil, material: SCNMaterial? = nil) {
    let texture = material != nil ? material! : planeGeometry.materials[4]
    var m: SCNMatrix4 = SCNMatrix4MakeScale(1, 1, 1)
    if(rotation != nil){
        textureRotation = rotation! + textureRotation
    }
    m = SCNMatrix4Rotate(m, textureRotation, 0, 1, 0)
    texture.diffuse.contentsTransform = m
}

请帮我填写这里的空白,如果有人有任何关于如何进行这种操作的链接或文章,请给我链接!

谢谢! 伊森

编辑:顺便说一句,我使用的是 xcode 9

【问题讨论】:

    标签: swift scenekit arkit


    【解决方案1】:

    尝试使用:

    material.diffuse.wrapS = SCNWrapModeRepeat;
    material.diffuse.wrapT = SCNWrapModeRepeat;
    

    这将有助于材料不拉伸,而只是不断地为其自身添加越来越多的相同 png。

    您还可以通过将其设置为宽度和高度来设置材质的比例:

        CGFloat width = self.planeGeometry.width;
        CGFloat height = self.planeGeometry.length;
    
        material.diffuse.contentsTransform = SCNMatrix4MakeScale(width, height, 1);
    

    抱歉,我在这里使用的是 Objective C,但翻译起来应该很简单。

    还可以在此链接上找到一些不错的教程:

    https://blog.markdaws.net/apple-arkit-by-example-ef1c8578fb59

    【讨论】:

      猜你喜欢
      • 2018-03-24
      • 2016-09-05
      • 2018-01-06
      • 2019-12-24
      • 2018-04-22
      • 1970-01-01
      • 2020-09-25
      • 2021-07-22
      • 2021-08-20
      相关资源
      最近更新 更多