Я использую приведенный ниже код, чтобы создать плоский объект, используя координаты, которые мы генерируем в классе TwoPointCircRiR поверхность или ничего.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
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... tion-in-on
Можем ли мы создать текстуру задней стороны в реальности, Arkit и Swift Application за один раз? ⇐ IOS
Программируем под IOS
1755849639
Anonymous
Я использую приведенный ниже код, чтобы создать плоский объект, используя координаты, которые мы генерируем в классе TwoPointCircRiR поверхность или ничего.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
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79743125/can-we-create-back-side-texture-in-realitykit-arkit-and-swift-application-in-on[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия