Как в RealityKit отображать всплывающее окно с названием определенной части модели при нажатии на эту часть?
Я разрабатываю AR-приложение для iOS, и у меня есть импортировали модель зуба USDZ. Я хочу реализовать функцию, при которой, когда пользователь нажимает на определенную часть модели зуба, появляется небольшое всплывающее окно с описательным текстом об этой части.
Основная проблема, с которой я столкнулся определяет, на какую часть модели был сделан щелчок. Как я могу этого добиться? Не могли бы вы рассказать мне, какие шаги и интерфейсы мне нужно вызвать для реализации этой функции? Большое спасибо за вашу помощь!
Вот мой код:
import ARKit
import UIKit
import RealityKit
class ARViewController_plane: UIViewController {
let arView = ARView()
var modelEntity: ModelEntity?
override func loadView() {
super.loadView()
view = arView
// create model
modelEntity = createModel()
// 放置模型
placeModel(model: modelEntity!)
// 设置手势
installestures(on: modelEntity!)
// 配置
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = .horizontal
// 运行
arView.session.run(configuration)
}
func createModel() -> ModelEntity {
let modelEntity = try! ModelEntity.loadModel(named: "tsmile1.usdz")
return modelEntity
}
func placeModel(model:ModelEntity) {
let planeAnchor = AnchorEntity(world: SIMD3(0, 0, 0))//(.plane(.horizontal, classification: .any, minimumBounds: SIMD2(0.02, 0.02)))
planeAnchor.addChild(modelEntity!)
arView.scene.addAnchor(planeAnchor)
}
func installestures(on object: ModelEntity) {
// scale
object.generateCollisionShapes(recursive: true)
arView.installGestures([.scale], for: object)
// my rotation
let rotationGesture = UIPanGestureRecognizer(target: self, action: #selector(handleRotationGesture(_:)))
arView.addGestureRecognizer(rotationGesture)
}
@objc func handleRotationGesture(_ gesture: UIPanGestureRecognizer) {
let translation = gesture.translation(in: arView)
// 控制旋转速度
let rotationAngle = Float(translation.x) * 0.001
// 获取当前模型的变换
var currentTransform = modelEntity!.transform
// 创建新的四元数旋转(围绕模型的Z轴旋转)
let newRotation = simd_quatf(angle: rotationAngle, axis: [0, 0, 1])
// 将新的旋转与现有的旋转叠加
currentTransform.rotation = simd_mul(currentTransform.rotation, newRotation)
// 应用新的变换
modelEntity!.transform = currentTransform
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... -that-part
Как отобразить имя определенной части модального окна при нажатии на эту часть ⇐ IOS
Программируем под IOS
1729219553
Anonymous
Как в RealityKit отображать всплывающее окно с названием определенной части модели при нажатии на эту часть?
Я разрабатываю AR-приложение для iOS, и у меня есть импортировали модель зуба USDZ. Я хочу реализовать функцию, при которой, когда пользователь нажимает на определенную часть модели зуба, появляется небольшое всплывающее окно с описательным текстом об этой части.
Основная проблема, с которой я столкнулся определяет, на какую часть модели был сделан щелчок. Как я могу этого добиться? Не могли бы вы рассказать мне, какие шаги и интерфейсы мне нужно вызвать для реализации этой функции? Большое спасибо за вашу помощь!
Вот мой код:
import ARKit
import UIKit
import RealityKit
class ARViewController_plane: UIViewController {
let arView = ARView()
var modelEntity: ModelEntity?
override func loadView() {
super.loadView()
view = arView
// create model
modelEntity = createModel()
// 放置模型
placeModel(model: modelEntity!)
// 设置手势
installestures(on: modelEntity!)
// 配置
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = .horizontal
// 运行
arView.session.run(configuration)
}
func createModel() -> ModelEntity {
let modelEntity = try! ModelEntity.loadModel(named: "tsmile1.usdz")
return modelEntity
}
func placeModel(model:ModelEntity) {
let planeAnchor = AnchorEntity(world: SIMD3(0, 0, 0))//(.plane(.horizontal, classification: .any, minimumBounds: SIMD2(0.02, 0.02)))
planeAnchor.addChild(modelEntity!)
arView.scene.addAnchor(planeAnchor)
}
func installestures(on object: ModelEntity) {
// scale
object.generateCollisionShapes(recursive: true)
arView.installGestures([.scale], for: object)
// my rotation
let rotationGesture = UIPanGestureRecognizer(target: self, action: #selector(handleRotationGesture(_:)))
arView.addGestureRecognizer(rotationGesture)
}
@objc func handleRotationGesture(_ gesture: UIPanGestureRecognizer) {
let translation = gesture.translation(in: arView)
// 控制旋转速度
let rotationAngle = Float(translation.x) * 0.001
// 获取当前模型的变换
var currentTransform = modelEntity!.transform
// 创建新的四元数旋转(围绕模型的Z轴旋转)
let newRotation = simd_quatf(angle: rotationAngle, axis: [0, 0, 1])
// 将新的旋转与现有的旋转叠加
currentTransform.rotation = simd_mul(currentTransform.rotation, newRotation)
// 应用新的变换
modelEntity!.transform = currentTransform
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79100371/how-to-display-the-name-of-a-specific-part-od-model-when-clicking-on-that-part[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия