Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Mensajes - MidBifroid

#1
Java / Re: [Problema] Java 3D
6 Febrero 2014, 00:18 AM
bueno en realidad se puede usar directamente la API de java3D

lo unico que hay que hacer es tu propio motor

primer truquito
¿OpenGL o Direct3D?
        System.setProperty("j3d.rend", "ogl");
        System.setProperty("j3d.rend", "d3d");

luego tienes que crearte un sistema de troceado del mapa, divide el mapa en trozos o cuadrantes, que vallas cargando y descargando conforme te mueves, nunca dejes el mapa cargado entero en el universo

luego utiliza sistemas de medida mas pequeños, no utilices la escala 1 (int) como 1 (metro), sino mas pequeño, utiliza por ejemplo 0.5 (float) como 1 (metro) asi encojes todo tu sistema de juego a una escala mas pequeña y facil de renderizar

luego de eso, la distancia de vision normalmente esta a 20, puedes ponerla a 12

cositas asi para mejorar

SALUDOS!!! me estoy currando un buen juego :)
#2
Java / Re: [Problema] Java 3D
1 Febrero 2014, 00:43 AM
ayudaaaaa!!!!

e avanzado un poco mas en java3d pero me he topado un un muro que no entiendo nada

he hecho un Shape3D de 2000x 2000z, de los cuales cada 1x1z es un QuadArray
osea e echo un terreno de 2000x2000 pero no es liso, se puede arrugar, y de hecho lo arrugo y hago montañitas y todo etc...

el problema es que cuando el tamaño pasa de los 500x500z java3d va lento

y no entiendo esto porque ¡¡ minecraft tiene bloques por todas partes y va muy rapido !! ¿como se hace el rendimiento?

osea, solo he hecho un plano, un puto plano de 2 dimensiones y va lento, y el minecraft todo lleno de cuadraditos y texturas por todas partes y a una larga distancia, y no va lento ¿COMO ES ESTO?

me han dicho que me busque un motor grafico pero ¿acaso java3d no es un motor grafico?

LWJGL, JOGL, y unos cuantos motores graficos mas.

los he estado viendo, y estos no usan a java3d sino que usan directamente  opengl sin pasar por java3d

voy a por el ejemplo de JOGL

Java3D puede usar OpenGL (pero no se como)
JOGL usa OpenGL
he leido que
- JOGL puede usar Java3D a la vez que este usa OpenGL, esta bien, pero habria que aprender a usar JOGL
- Java3D puede usar JOGL que a su vez usa OpenGL, esta bien, ya que mantienes la funcionalidad y tecnica del codigo, solo cambiando el intermediario

esto me ocasiono mucho lio, incluso me fui a pegar una cabezadita

resulta que Java3D 1.5.1 es de Sun/Oracle, pero el proyecto esta abandonado
los de JOGL "jogamp", continuan construyendo java3d y esto poca gente lo sabe, la ultima version es 1.5.2, y estan sacando la 1.6, supuestamente con compatibilidad directa con Java3D para hacer el IDEAL Java3D -> JOGL -> OpenGL

bien, me instale el 1.5.2 y el 1.6, inclui en mi proyecto las librerias del nuevo j3d

me descargue las librerias de JOGL, tambien las inclui en mi proyecto

habia que hacer al inicio System.setProperty(..) algo que no me acuerdo para que Java3D se enterase de que su modo de uso no es directamente la grafica o Opengl, sino JOGL, pero no me funciono porque por lo visto cambiaron el nombre del paquete, nidea, problemas por todas partes hermano

¿alguna manera efectiva de programar Java3D -> JOGL -> OpenGL ?
#3
Java / Re: Atascado con Behavior y Bounds
23 Agosto 2013, 13:52 PM
bueno por lo visto es normal que ocurra esto ya que los eventos de mouse dependen del canvas3d por completo y no del shape/group

tambien probé usar boundingleaf y java tiene un bug nullpointerexception con esto

¿Alquien sabe donde o como puedo informarme sobre los behaviors para saber cuando el raton está apuntando a un objeto?
#4
Java / Atascado con Behavior y Bounds
22 Agosto 2013, 19:11 PM
Bien lo explicare sin incluir mucho codigo, ya que mi fallo puede ser una estupidez de comprension.

Tengo un Branch con 6 shapes de Quads, formando un cubo de tamaño 1 con centro en O.

por cada shape (o lado del cubo) {
  xshape.setBounds(new BoundingBox(esquina2, esquina4));
//la razon por la que uso los puntos 2 y 4 es porque son los que se doblan sobre -3,  y por tanto ocupan mas espacio en el boundingbox
  Behavior behavior = new PlaneBehavior(xshape);
  mybranch.addChild(behavior);
}

Código (java) [Seleccionar]

public class PlaneBehavior extends Behavior {
     public final WakeupOr planeCriterions = new WakeupOr(new WakeupCriterion[]{
          new WakeupOnAWTEvent(MouseEvent.MOUSE_ENTERED),
          new WakeupOnAWTEvent(MouseEvent.MOUSE_MOVED),
          new WakeupOnAWTEvent(MouseEvent.MOUSE_PRESSED),
          new WakeupOnAWTEvent(MouseEvent.MOUSE_DRAGGED),
          new WakeupOnAWTEvent(MouseEvent.MOUSE_RELEASED),
          new WakeupOnAWTEvent(MouseEvent.MOUSE_CLICKED),
          new WakeupOnAWTEvent(MouseEvent.MOUSE_EXITED),
          new WakeupOnAWTEvent(MouseEvent.MOUSE_WHEEL),
      });

     private KShape3D plane;

     public PlaneBehavior(KShape3D plane) {
          this.plane = plane;
          this.setSchedulingBounds(plane.getBounds());
     }

     @Override
     public void initialize() {
          this.wakeupOn(planeCriterions);
     }

     @Override
     public void processStimulus(Enumeration enu) {
          while (enu.hasMoreElements()) {
               System.out.println(plane.name+" "+enu.nextElement());
           }
          this.wakeupOn(planeCriterions);
      }

}


Bien el cubo perfecto, el branch perfecto, todo lo que quiero hacer me funciona bien, pero parece que el behavior se extende desde -5 a 5 en las 3 dimensiones, en otras palabras, es demasiado grande. No encuentro el fallo.

:( gracias de antemano, si necesitan mas codigo pidanmelo, pero ya he revisado los 4 puntos de cada shape una y otra vez, ademas se dibuja bien, son fijos y son la referencia de todo lo que hago.
#5
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(TG) tiene como padre a un TransformGroup que es el cuerpo, y como hijos al shape3d del modelo del muslo y sus 2 articulaciones shapes; y el TransformGroup de la pierna

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.
#6
que estupidez, creia que con decir las cosas solo 1 vez ya bastaba, pero por lo visto hay que tratar a java como si fuera una persona estupida normal y corriente

primero tienes que decirle que vas a hacer un shape a base de quads y le indicas los puntos de cada quad

logicamente habra quads, cada uno de cada forma y orientacion, al gusto

pero luego hay que volver a decirle a java, ei, este quad tiene un plano asi, y otro asi, y otro asi... como si no lo supiera el tonto

Código (java) [Seleccionar]
for (int x = 0; x < points3d.length; x++) {
            quad.setNormal(x, new Vector3f((float) points3d[x].getX(), (float) points3d[x].getY(), (float) points3d[x].getZ()));
        }


ALGUIEN ME EXPLICA POR QUE SEMEJANTE ESTUPIDEZ ?
#7
pues eso, llevo varios dias intentandolo

ya he visto consejos de estos links
http://stackoverflow.com/questions/2245253/java-3d-unable-to-get-shape3d-to-be-affected-by-lights
http://stackoverflow.com/questions/4657504/java3d-lighting-problem
http://www.vrupl.evl.uic.edu/LabAccidents/java3d/lesson10/indexb.html

pero no hay manera

las figuras prefabricadas como las esferas, cubos etc, si les afecta la luz, pero las figuras que creo yo con shapes no les afecta la luz

he probado ya bastantes cosas, en el mismo branchgroup y en otra rama distinta, me rindo, espero que me ayuden y gracias de antemano :(

Aqui el codigo del Universo
Código (java) [Seleccionar]


private BranchGroup root = new BranchGroup();
private void _initialize() {
       getViewingPlatform().setNominalViewingTransform();
       addBranchGraph(root);
       BranchGroup g = new BranchGroup();
       Shape3D s = new UnisexBreastShape3D();
       DirectionalLight l = new DirectionalLight(true, new Color3f(Color.white), new Vector3f(-1,-1,-1));
       AmbientLight a = new AmbientLight(true, new Color3f(Color.white));
       BoundingSphere sph = new BoundingSphere(new Point3d(0d,0d,0d),100d);
       l.setInfluencingBounds(sph);
       a.setInfluencingBounds(sph);
       g.addChild(s);
       g.addChild(l);
       g.addChild(a);
      root.addChild(g);


Y aqui el codigo del shape, por cierto, que disfruten de mi clase shape3d
Código (java) [Seleccionar]

QuadArray quad = new QuadArray(4*22, QuadArray.NORMALS | QuadArray.COORDINATES | QuadArray.COLOR_4 | QuadArray.ALLOW_COLOR_READ | QuadArray.ALLOW_COLOR_WRITE | QuadArray.ALLOW_COORDINATE_READ | QuadArray.ALLOW_COORDINATE_WRITE | QuadArray.ALLOW_TEXCOORD_READ | QuadArray.ALLOW_TEXCOORD_WRITE);

       quad.setCoordinates(0, new Point3d[]{
           new Point3d(-0.8, 0.6, 0.2),
           new Point3d(-0.6, -0.4, 0.2),
           new Point3d(0.0, -0.4, 0.4),
           new Point3d(0.0, 0.4, 0.4),
           new Point3d(0.9, 0.8, -0.1),
           new Point3d(0.7, -0.4, 0.0),
           new Point3d(0.7, -0.4, -0.15),
           new Point3d(0.9, 0.8, -0.25),
           new Point3d(-0.9, 0.8, -0.25),
           new Point3d(-0.7, -0.4, -0.15),
           new Point3d(-0.7, -0.4, 0.0),
           new Point3d(-0.9, 0.8, -0.1),
           new Point3d(0.8, 0.6, 0.2),
           new Point3d(0.6, -0.4, 0.2),
           new Point3d(0.7, -0.4, 0.0),
           new Point3d(0.9, 0.8, -0.1),
           new Point3d(-0.9, 0.8, -0.1),
           new Point3d(-0.7, -0.4, 0.0),
           new Point3d(-0.6, -0.4, 0.2),
           new Point3d(-0.8, 0.6, 0.2),
           new Point3d(-0.75, 0.6, -0.4),
           new Point3d(-0.6, -0.4, -0.3),
           new Point3d(-0.7, -0.4, -0.15),
           new Point3d(-0.9, 0.8, -0.25),
           new Point3d(0.75, 0.6, -0.4),
           new Point3d(0.6, -0.4, -0.3),
           new Point3d(0.0, -0.4, -0.4),
           new Point3d(0.0, 0.7, -0.5),
           new Point3d(0.9, 0.8, -0.25),
           new Point3d(0.7, -0.4, -0.15),
           new Point3d(0.6, -0.4, -0.3),
           new Point3d(0.75, 0.6, -0.4),
           new Point3d(0.0, -1.4, 0.0),
           new Point3d(0.0, -1.4, 0.0),
           new Point3d(0.0, -1.4, 0.0),
           new Point3d(0.0, -1.4, 0.0),
           new Point3d(-0.9, 0.8, -0.25),
           new Point3d(-0.9, 0.8, -0.1),
           new Point3d(0.0, 0.8, 0.1),
           new Point3d(0.0, 1.0, -0.2),
           new Point3d(0.0, 0.8, 0.1),
           new Point3d(0.9, 0.8, -0.1),
           new Point3d(0.9, 0.8, -0.25),
           new Point3d(0.0, 1.0, -0.2),
           new Point3d(0.9, 0.8, -0.1),
           new Point3d(0.0, 0.8, 0.1),
           new Point3d(0.0, 0.4, 0.4),
           new Point3d(0.8, 0.6, 0.2),
           new Point3d(-0.9, 0.8, -0.1),
           new Point3d(-0.8, 0.6, 0.2),
           new Point3d(0.0, 0.4, 0.4),
           new Point3d(0.0, 0.8, 0.06),
           new Point3d(0.0, 0.7, -0.5),
           new Point3d(-0.75, 0.6, -0.4),
           new Point3d(-0.9, 0.8, -0.25),
           new Point3d(0.0, 1.0, -0.2),
           new Point3d(0.9, 0.8, -0.25),
           new Point3d(0.75, 0.6, -0.4),
           new Point3d(0.0, 0.7, -0.5),
           new Point3d(0.0, 1.0, -0.2),
           new Point3d(0.0, 0.4, 0.4),
           new Point3d(0.0, -0.4, 0.4),
           new Point3d(0.6, -0.4, 0.2),
           new Point3d(0.8, 0.6, 0.2),
           new Point3d(0.0, 0.7, -0.5),
           new Point3d(0.0, -0.4, -0.4),
           new Point3d(-0.6, -0.4, -0.3),
           new Point3d(-0.75, 0.6, -0.4),
           new Point3d(0.0, -0.4, 0.4),
           new Point3d(0.0, -0.8, -0.0),
           new Point3d(0.7, -0.4, 0.0),
           new Point3d(0.6, -0.4, 0.2),
           new Point3d(-0.7, -0.4, 0.0),
           new Point3d(0.0, -0.8, 0.0),
           new Point3d(0.0, -0.4, 0.4),
           new Point3d(-0.6, -0.4, 0.2),
           new Point3d(0.7, -0.4, 0.0),
           new Point3d(0.0, -0.8, 0.0),
           new Point3d(0.6, -0.4, -0.3),
           new Point3d(0.7, -0.4, -0.15),
           new Point3d(0.6, -0.4, -0.3),
           new Point3d(0.0, -0.8, 0.0),
           new Point3d(-0.6, -0.4, -0.3),
           new Point3d(0.0, -0.4, -0.4),
           new Point3d(-0.6, -0.4, -0.3),
           new Point3d(0.0, -0.8, 0.0),
           new Point3d(-0.7, -0.4, 0.0),
           new Point3d(-0.7, -0.4, -0.15)
       });
               
       
           
       Color carne = new Color(255,208,144);
       Appearance app = new Appearance();
       
       Material mat = new Material();
       mat.setCapability(Material.ALLOW_COMPONENT_WRITE);
       mat.setDiffuseColor(new Color3f(carne));
       mat.setAmbientColor(new Color3f(new Color(32,24,0)));
       //mat.setEmissiveColor(new Color3f(Color.blue));
       mat.setSpecularColor(new Color3f(Color.white));
       mat.setShininess(2);
       mat.setLightingEnable(true);
       
       app.setCapability(Appearance.ALLOW_MATERIAL_WRITE);
       app.setMaterial(mat);
       this.setCapability(Shape3D.ALLOW_APPEARANCE_WRITE);
       this.setAppearance(app);
       
       
       setGeometry(quad);



El resultado es que el ambient funciona, pero las direccionales no, las luces no hacen ningun efecto 3D, tratan a mi shape como si fuera plano :(