Posibles nuevos nodos

En el post anterior proponía dos nuevos nodos de Xj3D para exponer la funcionalidad necesaria del núcleo de Xj3D a un editor: un nodo que permitiera saber en qué posición y con qué orientación se encuentra el usuario, y qué objetos está apuntando con el cursor, para poderlos seleccionar.

Como la primera parte puede resolverse mediante un “truco” con un sensor de proximidad muy grande, y el tiempo sigue pasando, he considerado prioritario el segundo tipo de nodo: exponer las operaciones de picking que se realizan cuando se mueve el ratón mediante un nodo externo. Y me he encontrado con un problema de implementación: esas operaciones se hacen a nivel del componente que se esté utilizando para renderizar (que pueden ser varios en Xj3D, aunque ahora se use principalmente el motor OpenGL), pero esos nodos seleccionados a tan bajo nivel no tienen idea de a qué nodo de alto nivel (nodo X3D) corresponden. Actualmente, los nodos X3D sí saben a qué nodo de bajo nivel corresponden, pero no al revés, así que ando ahora estudiando la manera de implementar un enlace en el otro sentido. No parece cosa fácil…

5 comments so far

  1. zenphp on

    Hola!, he estado leyendo tu evolución con el proyecto, es dificil llevar un proyecto como el tuyo y por eso tengo que decir que siento admiración por tu determinación, paciencia y perseverancia.
    El año pasado tuve un proyecto de física para una de mis asignaturas y me encontré tan sólo que pensé varias veces en dejarlo ,sin embargo nunca me di por vencido,a situaciones desesperadas, medidas desesperadas,y el resultado es un programa que escribí en una plataforma llamada RealBASIC, para el que tienes licencia libre en Linux pero no para Windows, es el único problema, pero es código abierto:
    http://www.senseidav.com/campos/
    por favor, échale un vistazo pues me he acordado de que tuve exactamente tu mismo problema con lo de apuntar a un objeto y hacer enlazar los niveles de programación entre evento y objeto 3D. Aquí se soluciona fácil pero los eventos son distintos para cada SO y hay que hacer versiones distintas para Windows, Mac,Linux,etc.
    Saludos y muchos ánimos!

  2. quixo3d on

    Antes que nada, agradecer tus comentarios de apoyo… es verdad que desarrollando en soledad resulta más fácil desanimarse, sobre todo si uno anda un poco perdido como es el caso.
    Me he bajado el proyecto de los campos y le echaré un vistazo por si me puede inspirar en algo, aunque la cuestión del lenguaje y la librería que estoy utilizando está bastante decidida: uso Java porque me soluciona (peor o mejor, pero bueno, algo es) el tema de la portabilidad, y para aprovechar las posibilidades de la librería Xj3D… aunque a menudo pienso que quizá hubiera acabado antes construyéndolo todo desde cero… ¡Quizá acabe por hacerlo!

  3. quixo3d on

    Antes que nada, agradecer tus comentarios de apoyo… es verdad que desarrollando en soledad resulta más fácil desanimarse, sobre todo si uno anda un poco perdido como es el caso.
    Me he bajado el proyecto de los campos y le echaré un vistazo por si me puede inspirar en algo, aunque la cuestión del lenguaje y la librería que estoy utilizando está bastante decidida: uso Java porque me soluciona (peor o mejor, pero bueno, algo es) el tema de la portabilidad, y para aprovechar las posibilidades de la librería Xj3D, aunque a menudo pienso que quizá hubiera acabado antes construyéndolo todo desde cero… ¡Quizá acabe por hacerlo! Mira que si al final acabo haciéndolo en RealBasic…😉

  4. Anónimo on

    No sé si Xj3D lo soporta, pero en el estándar X3D se define un componente de picking de objetos.

    http://www.web3d.org/x3d/specifications/ISO-IEC-FDIS-19775-1.2/Part01/components/picking.html

  5. quixo3d on

    Efectivamente, el componente de picking existe, y está implementado en las versiones de desarrollo más recientes de Xj3D. El problema es que este tipo de sensor requiere que se le especifique exactamente contra qué nodos va a hacer el picking, por lo que si se quiere utilizarlo para seleccionar cualquier objeto de la escena hay que especificarle una lista de “nodos objetivo” que incluya todos los objetos de la escena, y además mantenerla actualizada con las altas y bajas de los objetos. De ahí la idea de crear un nodo que, más que hacer picking para detectar colisiones entre objetos concretos, sirviera para detectar que el usuario apunta a cualquier objeto o lo selecciona, sin necesidad de declararlos todos explícitamente.


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: