Gracias Gracias:  1
Resultados 1 al 2 de 2

Tema: rayCast() (Python BGE)

  1. #1
    Senior Member Avatar de Juani
    Fecha de ingreso
    Jul 2015
    Ubicación
    Montilla (Córdoba)
    Mensajes
    422

    Blender rayCast() (Python BGE)

    Explicado por Guzmán Álvarez García en su proyecto final de carrera. Mil gracias.


    5.9.2. Uso del método “rayCast”
    Este método, presente en todos los objetos del juego, consiste en la versión completa de “rayCastTo” (ver apartado 5.5.2, página 64). Su funcionamiento básico es equivalente, aunque mediante la aceptación y devolución de más cantidad de parámetros adopta una flexibilidad mucho mayor que permite hacer cálculos más complejos.
    Los parámetros que admite aparecen a continuación:
    - Objeto hacia cuyo origen se traza el rayo, o punto del espacio (vector tridimensional u objeto de tipo “tuple” o “list”). Equivalente al parámetro pasado anteriormente a “rayCastTo”.
    - Objeto desde el que se lanza el rayo, o punto del espacio. Este parámetro hace al rayo independiente del objeto desde el que se llama al método, ya que tanto el punto donde empieza como donde termina pueden definirse libremente. Si se omite, o se pasa “None”, el rayo se lanza desde el objeto que llamó al método.
    - Distancia hasta la cual se detectan intersecciones (número real). Permite limitar o extender la búsqueda: el objeto hacia el que se traza el rayo sólo se usa para calcular la dirección, mientras que la distancia indica si el rayo llega hasta el objeto o lo sobrepasa o, si es negativa, hace que se lance en sentido contrario. Si se omite, pasando 0, el rayo llega hasta el objeto pasado como primer parámetro.
    - Propiedad buscada (cadena de caracteres). Hace que sólo se detecten los choques con objetos que tengan una propiedad cuyo nombre coincida con el pasado.
    - Orientación de la normal (0 o 1). Si se pone a 1 la normal que se devuelve será la normal real de la cara donde se ha producido el choque. Si su valor es 0 o se omite, siempre se devuelve la normal que apunta hacia el lado de la superficie donde impacta el rayo. Por regla general las normales de las caras de los objetos bien construidos apuntan hacia el exterior, por lo que el valor que se pase no supondrá ninguna diferencia en el resultado. Sin embargo es conveniente que sea 0 u omitirlo, para evitar comportamientos erróneos en caso de que haya algún error en las normales.
    - Atravesar objetos (0 o 1). Sólo tiene sentido cuando se buscan objetos que tengan una determinada propiedad. Si se pasa un 1 se descartan los objetos que no tengan la propiedad y se sigue buscando hasta llegar a la distancia límite o hasta encontrar uno, mientras que si se omite o se pasa un 0 el rayo se detiene en el primer choque.
    - Datos devueltos (0, 1 o 2). Determina qué datos se incluyen en el objeto que devuelve el método (ver siguiente lista). El valor por omisión es 0.
    De estos parámetros sólo el primero es obligatorio, mientras que el resto tomarán los valores por defecto si se omiten. Solamente es necesario especificar los parámetros, en orden, hasta el último de ellos cuyo valor no sea el predeterminado (pasando, en los anteriores a este último que no requieran modificaciones, el valor por omisión). Así, si por ejemplo se quisiesen detectar objetos con una determinada propiedad pero no definir una distancia límite
    Interactividad Programada en el Game Engine de Blender
    94
    ni un punto de origen diferente, la llamada quedaría: resultado = objeto_origen.rayCast(objeto_final, None, 0, ‘propiedad_buscada’).
    El objeto que devuelve el método es siempre de tipo “tuple”, y el número de elementos que contiene depende del último parámetro de la lista anterior. Según valga 0, 1 o 2 se incluirán, respectivamente, los tres primeros, los cuatro primeros o todos los elementos que aparecen a continuación:
    - Objeto detectado: objeto del juego (tipo “KX_GameObject”) contra el que ha chocado el rayo. Si no ha chocado, contiene “None”.
    - Punto de choque: vector tridimensional con las coordenadas globales del punto en el que el rayo toca la superficie del objeto. Si no ha chocado, contiene “None”.
    - Normal: vector normal a la superficie del objeto en el punto donde impacta el rayo. Si no ha chocado, contiene “None”.
    - Cara del objeto con la que ha chocado: objeto de tipo “KX_PolyProxy”, que contiene los datos de dicha cara, tales como el material asociado o referencias a los datos de sus vértices. Si no ha chocado, contiene “None”.
    - Coordenadas en el mapa UV del punto de choque. Si no ha chocado, contiene “None”.
    Dado que la única funcionalidad extra que se requiere en este apartado respecto a “rayCastTo” es la obtención de la normal, las llamadas al método se harán omitiendo o poniendo a 0 el último parámetro, de forma que el objeto “tuple” conste de tres elementos.
    Un aspecto importante a tener en cuenta es que, cuando el punto de inicio se encuentra dentro del objeto de destino, o éste tiene forma cóncava, es probable que el rayo no atraviese ninguna superficie, y por tanto el método no devuelva ningún objeto válido. En el escenario del proyecto este hecho tiene relevancia por ejemplo en las rampas que se han colocado, o en el recinto circular con una rampa en su interior.
    Archivos adjuntados Archivos adjuntados

  2. #2
    Administrador y fundador. Avatar de 3dpoder
    Fecha de ingreso
    Apr 2002
    Mensajes
    15,460

    Re: rayCast() (Python BGE)

    Buen aporte, gracias.
    Si vas a subir un trabajo al foro, hazlo adjuntando la imagen, archivo, vídeo o lo que sea, no publicando enlaces de otros sitios. http://www.foro3d.com/f45/forma-correcta-de-insertar-imagenes-y-archivos-en-nuestro-mensaje-98930.html

    |Agradecer cuando alguien te ayuda es de ser agradecido|

Temas similares

  1. 3ds Max warning: scene bounding box is too large possible raycast errors vray+max
    Por yurguen en el foro Problemas con Programas
    Respuestas: 1
    Último mensaje: 01-02-2017, 10:24
  2. Python
    Por JEMV en el foro Videojuegos
    Respuestas: 1
    Último mensaje: 05-09-2009, 18:54
  3. Crash after static raycast accelerator
    Por fran17 en el foro Discusiones generales
    Respuestas: 0
    Último mensaje: 17-09-2008, 10:01
  4. Python
    Por marceze en el foro Problemas con Programas
    Respuestas: 9
    Último mensaje: 17-09-2007, 23:01
  5. Python
    Por jeenyus en el foro Programación y Scripts
    Respuestas: 7
    Último mensaje: 03-02-2007, 01:43

Actualmente estos son sus permisos de publicación en el foro.

  • -No puedes crear nuevos temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes responder temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes subir archivos adjuntos al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes editar tus mensajes al no estar registrado o no haber iniciado sesión en el foro.
  •