【发布时间】:2021-08-01 05:09:38
【问题描述】:
我想使用 ARKit 使用自定义多边形来平铺地面,该多边形使用用户在水平平面上选择的位置创建,但是瓷砖被拉伸并且无法正确显示,可能问题出在纹理坐标上,这段代码有什么问题?
let vertices: [SCNVector3] = ... //Selected positions by user
var indices: [Int32] = [Int32(vertices.count)]
var index: Int32 = 0
for _ in vertices {
indices.append(index)
index += 1
}
let textureCoordinates = [ CGPoint(x: 0, y: 0),
CGPoint(x: 1, y: 0),
CGPoint(x: 0, y: 1),
CGPoint(x: 1, y: 1)
]
let vertexSource = SCNGeometrySource(vertices: vertices)
let uvSource = SCNGeometrySource(textureCoordinates: textureCoordinates)
let indexData = Data(bytes: indices,
count: indices.count * MemoryLayout<Int32>.size)
let element = SCNGeometryElement(data: indexData,
primitiveType: .polygon,
primitiveCount: 1,
bytesPerIndex: MemoryLayout<Int32>.size)
let geometry = SCNPlane(sources: [vertexSource, uvSource],
elements: [element]) //Creating geometry
//Tile material creation
let material = SCNMaterial()
material.isDoubleSided = true
material.diffuse.wrapS = .repeat
material.diffuse.wrapT = .repeat
//Tile image to tile polygon
material.diffuse.contents = UIImage(named: "tile")!
material.diffuse.contentsTransform = SCNMatrix4MakeScale(32, 32, 0)
geometry.firstMaterial = material
//Tiled Plan to put on the ground
let plane = SCNNode(geometry: geometry)
//Add custom polygon to sceneView
sceneView.scene.rootNode.addChildNode(plane)
编辑:
感谢 Andy,我更改了 contentsTransform,在变换比例上做了很小的改动,但仍然遇到同样的问题:
.init(
m11: 5, m12: 0, m13: 0, m14: 0,
m21: 0, m22: 5, m23: 0, m24: 0,
m31: 0, m32: 0, m33: 1, m34: 0,
m41: 0.5, m42: 0, m43: 0, m44: 1)
我的期望:
会发生什么:
【问题讨论】:
标签: swift augmented-reality scenekit arkit