【发布时间】: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
【问题讨论】: