• Viernes 15 de Noviembre de 2024, 01:54

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - midbifroid

Páginas: [1]
1
Java 3D / Re:ServerSide - Colisiones - Plataformas irregulares.
« en: Jueves 15 de Agosto de 2013, 22:56 »
Bueno me he enterado de que efectivamente se pueden usar los Locale, Branch y Transform Groups, sin usar universe ni canvas3d, osea, huerfanos. La pega es que todas las coordenadas parten del centro. Pero es una buena manera de usar colisiones de parte del servidor.

2
Java 3D / Problema: TransformGroup dentro de TransformGroup y transformaciones
« en: Jueves 15 de Agosto de 2013, 22:52 »
Buenas, estoy haciendo un cuerpo humano.
Y la idea es que al mover el muslo de la pierna, el resto de la pierna no solamente le siga, sino que ademas tambien se transformen las rotaciones.

Para ello e incluido la pierna(TG) dentro del muslo(TG), asi los 2 se mueven a la vez.

Aqui me surgio un problema, porque al diseñar los shapes, los hice de tamaño desproporcionado por lo que por ejemplo el muslo tengo que escalarlo.
Logicamente al escalar el muslo, como la pierna esta dentro, tambien se escala.
Esto se soluciona facilmente volviendo a reescalar la pierna.

Pero el problema se agrava porque he hecho un sistema de articulaciones:
El sistema de articulaciones son puntos y esta diseñado de la siguiente manera;
La clase articulacion es un shape3d con 1 PointArray de 1 solo punto, facil.
Cada miembro tiene 2 articulaciones, cada una de ellas se conecta con las articulaciones de otros miembros, macho con hembra.

Resulta que al hacer la transformacion estos puntos se descolocan, y mucho.
Si escalo el muslo, y a su vez la pierna y sus articulaciones, los puntos se separan.
Los puntos de articulacion de la pierna shapes, tienen de padre a un TransformGroup, y tiene de hermanos a otros puntos y al shape modelo de la pierna.
El muslo tiene como padre a un TransformGroup, y como hermanos al TransformGroup de la pierna, y a otros puntos de articulacion shapes.

Las coordenadas reales se obtienen asi:
TransformGroup t = new TransformGroup(); //Aqui voy a recibir la fransformacion de mi objeto.
miNodo.getLocalToVworld(t); //la recibo
Point3d p = new Point3d(); //en este contenedor se recibiran las coordenadas reales.
t.transform(p); //las recibo

El error viene cuando obtengo la articulacion (shape->point->coordinate[0]) del muslo  y la de la pierna, para hayar la diferencia de espacio y mover a la pierna, esa diferencia, asi uniendo los 2 puntos de articulaciones y manteniendo toda la pierna de una pieza.

Teniendo en cuenta que el muslo tiene 1 transformacion, y la pierna tiene una transformacion heredada del muslo y a demás puede tener otras. Al obtener las corrdenadas reales, no me las devuelve escaladas correctamente.

Si escalo el muslo aumentando Y, la pierna se separa, y si disminuyo Y, la pierna entra dentro del muslo literalmente.

No se si es un fallo de jerarquia de como meter los transformGroup dentro de otros, de meter los shapes dentro de un branch y luego dentro del transformgroup.

He provado a ponerlo todo al mismo nivel (la pierna y el muslo como hermanos) dejando solamente el sistema de articulaciones, y si encuentra las coordenadas correctas y me une bien las articulaciones sean cuales sean las escalas de cada uno. FUNCIONA!!! pero el problema es que cuando levanto el muslo (entonces rota) la pierna no se rota, aunque si se une al muslo.

Imagina lo que tengo que hacer si quiero poner manos!! la de cosas que tendria que coordinar!!

Espero que me ayuden a que funcione esto de manera jerarquica y no poniendo a todos como hermanos, ya que me interesa heredar el movimiento y la rotacion, para no tener que rotar la la pierna tambien cada vez que quiero rotar el muslo.

3
Java 3D / Re:Hacer Una Linea Curva
« en: Jueves 1 de Agosto de 2013, 20:51 »
para empezar necesitas trigonometria basica, triangulos, angulos, seno, coseno, hipotenusa, medida del angulo en radianes y grados

una vez tengas eso tienes que plantearte que aspecto va a tener tu curva, pero oh, da igual, primero tienes que dibujarla y luego le das el aspecto

no te compliques haciendo un algoritmo que dibuje la curba aqui o alla, de esta manera o de aquella, mas o menos deforme

simplemente dibuja una cubra perfecta en los ejes X-Z, en el plano horizontal

te aconsejo LineStripArray, tu ya decides cuanta calidad tendra (puntos de flexion entre las lineas), o puedes hacer un algoritmo para calcularlo segun la distancia hipotenusa (recomendado)

una vez dibujes la curva, añade tus Geometry al Shape, y el Shape al TransformGroup, Create tu propia clase con ese TransformGroup para usar esa curva como paleta cada vez que quieras

ya tienes la curva perfecta para cada vez que quieras usarla, ahora solo queda si quieres hacer un ovalo, o cualquier otra deformidad

tenemos como resultado tu clase Curva extends TransformGroup, que inicialmente crea una curva en el plano XZ (horizontal) y solo tienes que usar los Transform3D para darle deformidad a tu antojo

4
Java 3D / ServerSide - Colisiones - Plataformas irregulares.
« en: Jueves 1 de Agosto de 2013, 20:40 »
ServerSide o "Del lado del servidor".

El cliente es capaz, usando el VirtualUniverse, de controlar las colisiones o detectarlas, asi como sus puntos. Aunque no me pregunten como, que aun no he llegado ahi. Pero si hablo de ello es porque necesito saber antes algunos conceptos de funcionamiento para hacer antes otras cosas.

Bien, el objetivo del servidor es no usar esl VirtualUniverse en absoluto, graficos cero, nada de render, solo comprobar y difundir informacion entre los clientes.

Ya he leido por ahi que un disparo de arma en ServerSide se hace mas o menos de la siguiente manera, conceptualmente:
1º) El cliente se encarga de mandar el disparo al servidor, ya que el cliente si puede comprobar con exactitud el disparo.
2º) Esto no quiere decir que el disparo sea abierto a chetos (trucos). El servidor comprueba no exactamente el disparo, sino una probabilidad o porcentaje del mismo, segun distancia, zona, punto de mira (angulos de rotacion), LAG sobretodo, etc, y el reso se "fia" del cliente.
3º) Seria una cosa muy descabellada que el servidor andara controlando la exactitud de los puntos de mira de todos sus jugadores al milimetro, ya que entre el LAG y otros factores, crearia una inexactitud tremenda.

Dicho esto, solo me queda una cosa por saber.

¿Como va el servidor a controlar si yo estoy sobre una roca irregular, para no traspasarla?

Si, ya se ya se, mi cliente no es tonto y el solo es consciente de que no debe atravesar la roca; ¡tiene un motor grafico con deteccion de colisiones!.

Pero ¿Que pasa si el servidor no se fía del cliente, por el tema de los trucos?

Hacer un mapa virtual (unicamente logico y de clases no graficas no es problema). El problema es que si la clase del objeto Roca la hacemos tan compleja para detectar puntos (sin Universo, solo una clase creada por ti), ¡pues vaya, para eso ya utilice el 3D señor!, el rendimeinto seria el mismo.

Dicho esto, tenemos rendimiento VS esfuerzo de hacer una clase.

Mi pregunta final y mas importante es la siguiente:
¿Puedo utilizar un BranchGroup "standalone" o huerfano, sin VirtualUniverse?

La intencion es que el servidor use BranchGroups (tambien dentro de BranchGroups) para hacer sus calculos solamente. Sin añadirlos a un VirtualUniverse. ¿Es esto posible? ¿Funcionarian por si solos los branch groups solo con que esten todos unidos a un unico Branch Grande (root) ?

Si no es asi, necesito otra forma de detectar colisiones de objetos irregulares por el lado del servidor, haber si alguien sabe algo.

Aun no puedo probar esto porque ando algo lejos, por eso os lo pregunto, pero ahi esta la idea.

:gracias:

Páginas: [1]