es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo recolorar todas las partes del modelo al usar el raycasting?

Tengo un modelo fanfare.reality en mi arView de Reality Composer. Realizo un raycast mediante entity(at:location) y habilito ModelDebugOptionsComponent(visualizationMode: .lightingDiffuse) de los objetos que se alcanzan, lo que hace que la apariencia de los objetos se vuelva gris. Sin embargo, descubrí que solo la propia fanfarria se vuelve gris y que la bandera sobre la fanfarria no cambia en absoluto.

enter image description here

Cargo el fanfare.reality mediante LoadAsync() e imprimo el valor devuelto de la siguiente manera. La razón es que la bandera, la estrella y la propia fanfarria se dividen en 3 ModelEntity. En RealityKit, el raycast busca entidades con CollisionComponent. Solo se pueden agregar a entidades que tengan ModelComponent.

enter image description here

Por lo tanto, mi pregunta es cómo puedo hacer que todo el modelo de realidad se vuelva gris (fanfarria + bandera + estrella) cuando toque el modelo en la pantalla (mediante raycast).

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para convertir todo el modelo de realidad en gris al tocar el modelo usando el raycasting, puedes hacer lo siguiente:

    1. En lugar de aplicar el ModelDebugOptionsComponent directamente al objeto golpeado, puedes aplicarlo al objeto padre del objeto golpeado.
    2. Puedes usar el objeto padre del objeto golpeado para encontrar todos los objetos hijo que pertenecen al modelo y aplicarles el ModelComponent.

    Aquí hay un código de ejemplo que muestra cómo hacerlo:

    guard let entity = arView.entity(at: location),
          let parent = entity.parent,
          let modelComponent = parent.components[ModelComponent.self] else { return }
    
    parent.components[ModelDebugOptionsComponent] = ModelDebugOptionsComponent(visualizationMode: .lightingDiffuse)
    
    for child in parent.children {
        child.components.set(modelComponent)
    }
    

    En este fragmento de código, primero obtenemos el objeto padre del objeto golpeado usando la propiedad parent. Luego, verificamos si el objeto padre tiene un ModelComponent. Si lo tiene, establecemos el ModelDebugOptionsComponent en el objeto padre.

    Por último, iteramos a través de todos los objetos hijo del objeto padre y establecemos el ModelComponent en cada uno. Esto asegura que todos los objetos pertenecientes al modelo se conviertan en gris.

    ¡Espero que esto sea de ayuda!

Comments are closed.