如何根据用户价值缩放素材图片?

问题描述 投票:0回答:1

我有一个 T 恤 3D 对象模型,并且我已使用 SCNScene 套件加载了该模型。我需要根据用户输入值更改模型子网格材质图像大小。

func AddNode(scene:SCNScene, viewerSetup: Insert3DViewer, modelSetup: Insert3DModel) -> SCNNode  {
    
guard let url = Bundle.main.url(forAuxiliaryExecutable: modelSetup.mesh) else {
    fatalError("Failed to find model file.")
}

let asset = MDLAsset(url: url)
guard let object = asset.object(at: 0) as? MDLMesh else {
    fatalError("Failed to get mesh from asset.")
}

// Create a material from the texture
let scatteringFunction = MDLScatteringFunction()
let material = MDLMaterial(name: "baseMaterial", scatteringFunction: scatteringFunction)

let meshUrl = Bundle.main.url(forResource: modelSetup.material, withExtension: "")
material.setProperty(MDLMaterialProperty(name: modelSetup.material, semantic: .baseColor, url: meshUrl))

for  submesh in object.submeshes!  {
    if let submesh = submesh as? MDLSubmesh {
        submesh.material = material
    }
}

// Wrap the ModelIO object in a SceneKit object
return SCNNode(mdlObject: object) }

我使用了一张条纹图像作为素材,我需要根据用户缩放输入增加/减少条纹宽度。

scenekit scene scnnode scnscene mtl-file
1个回答
0
投票

您可以将wrapS和wrapT设置为Repeat并设置变换比例。

node.geometry!.firstMaterial!.diffuse.contents = "image.jpg"
node.geometry!.firstMaterial!.diffuse.contentsTransform = SCNMatrix4Mult(SCNMatrix4MakeScale(4, 4, 1), SCNMatrix4MakeTranslation(0, 0, 0))
node.geometry!.firstMaterial!.diffuse.wrapS = .repeat
node.geometry!.firstMaterial!.diffuse.wrapT = .repeat
© www.soinside.com 2019 - 2024. All rights reserved.