Können wir in RealityKit, Arkit und Swift -Anwendung auf einmal die Rückseite der Textur erstellen?IOS

Programmierung für iOS
Anonymous
 Können wir in RealityKit, Arkit und Swift -Anwendung auf einmal die Rückseite der Textur erstellen?

Post by Anonymous »

Ich benutze den Code unten, um ein flaches Objekt mit Koordinaten zu erstellen, die wir in einer zweioPointCircleview -Klasse erzeugen. Oberfläche oder Nichts.

Code: Select all

func createMetalMeshEntity(from dots: [TwoPointCircleView.Dots]) -> ModelEntity {

let flatVertices: [Double] = dots.flatMap { [Double($0.x), Double($0.y)] }
let frontIndices = Earcut.tessellate(data: flatVertices)
var positions: [SIMD3] = []
var indices: [UInt32] = []

// Front face (z = 0)
for dot in dots {
positions.append(SIMD3(Float(dot.x), Float(dot.y), posZ))

}

let dx = maxX - minX
let dy = maxY - minY
var uvs: [SIMD2] = []
let maxDim = max(dx, dy)

// Generate front face UVs
for dot in dots {
let u = (Float(dot.x) - Float(minX)) / Float(maxDim)
let v = (Float(dot.y) - Float(minY)) / Float(maxDim)
uvs.append(SIMD2(u, v))
}

// Front face
indices += frontIndices.map { UInt32($0) }

// Collection center points of pieces.
let center = centroid(of: positions)
centers.append(center)

// Descriptor
var descriptor = MeshDescriptor(name: "MetalSemicircle")
descriptor.positions = MeshBuffers.Positions(positions)
descriptor.primitives = .triangles(indices)

let tileFactor: Float = 1.0

let scaledUVs = uvs.map { uv in
SIMD2(uv.x * tileFactor, uv.y * tileFactor)
}

descriptor.textureCoordinates = MeshBuffers.TextureCoordinates(scaledUVs)

// Create mesh + entity
let meshResource = try! MeshResource.generate(from: [descriptor])
var applidedMaterial = PhysicallyBasedMaterial()
var solvedMaterial = PhysicallyBasedMaterial()

solvedMaterial.baseColor = .init(texture: .init(texture))
solvedMaterial.metallic = 0.5
solvedMaterial.roughness = 0.5
solvedMaterial.faceCulling = .none
face0Materials.append(solvedMaterial)

if faces[0].pieceModel.count < puzzleNumber {

var tempMaterial = PhysicallyBasedMaterial()
tempMaterial.baseColor = .init(tint: .gray)
tempMaterial.metallic = 0.5
tempMaterial.roughness = 0.5

applidedMaterial = tempMaterial

} else {

applidedMaterial = solvedMaterial

}

let entity = ModelEntity(mesh: meshResource, materials: [applidedMaterial])
entity.generateCollisionShapes(recursive: true)

return entity
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post