|
Mostrar Mensajes
|
Páginas: [1]
|
1
|
Programación / Java / Re: [Problema] Java 3D
|
en: 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
|
Programación / Java / Re: [Problema] Java 3D
|
en: 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
|
Programación / Java / Re: Atascado con Behavior y Bounds
|
en: 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
|
Programación / Java / Atascado con Behavior y Bounds
|
en: 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); } public class PlaneBehavior extends Behavior { public final WakeupOr planeCriterions = new WakeupOr(new WakeupCriterion[]{ }); private KShape3D plane; public PlaneBehavior(KShape3D plane) { this.plane = plane; this.setSchedulingBounds(plane.getBounds()); } @Override public void initialize() { this.wakeupOn(planeCriterions); } @Override 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
|
Programación / Java / Problema: TransformGroup dentro de TransformGroup y transformaciones
|
en: 15 Agosto 2013, 22:47 pm
|
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
|
Programación / Java / Re: No puedo usar luces con mis shape3D :(
|
en: 8 Agosto 2013, 19:34 pm
|
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 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
|
Programación / Java / No puedo usar luces con mis shape3D :( [SOLUCIONADO]
|
en: 8 Agosto 2013, 02:34 am
|
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-lightshttp://stackoverflow.com/questions/4657504/java3d-lighting-problemhttp://www.vrupl.evl.uic.edu/LabAccidents/java3d/lesson10/indexb.htmlpero 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 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 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) }); 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
|
|
|
|
|
|
|