posibilidad de crear un juego de tablero 3d con bennugd

Started by DCelso, May 05, 2009, 05:27:45 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Windgate

Desconozco cómo aplicar una textura a una sóla cara, sólo he trabajado con modelos MD2 y MD3 a los que les aplico una textura única para todo el modelo. Y primitivas para añadir un cubo/esfera sí que hay, aunque no he probado a texturizarlas.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DCelso

Yo recuerdo haberlo hecho con Opengl, pero ni idea de donde dejé el ejemplo.
Era algo como crear el modelo, cargar la textura, definir el vector de puntos de la textura y aplicar el vector y la textura al modelo.
Estoy buscando información pero no la encuentro para ningún sistema, ni opengl, ni directx, ni SDL, ni siquiera encuentro como hacer eso con un programa de modelado, con eso te lo digo todo :D.
En blender conseguí crear un cubo, ponerle una textura de un png y ponerla en todas sus caras y jugando con las coordenadas x y z de la textura dentro del cubo he medio conseguido que solo se vea en una cara la imagen, pero deja basura en dos caras y no se el por qué 
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Prg

QuotePRG, perdona mi ignorancia, esto que me has pasado que es, como se usa y como lo puedo ver Triste.
¿Seria posible que me explicaras como hacer un cubo blanco entero y ponerle una imagen eun una sola de sus caras usando la libreria sola?
o es obligatorio disponer de un modelo3d para cargar, es que en este caso, tendría que crear modelos para todos los tableros de todos los gamebox que quiera migrar a este nuevo programa, no se si me explico.

hola, ese es un modelo 3d que cargas en bennu 3d poniendo m8e_loadanimodel(nombre del modelo); la captura está abajo.

eso de colocar texturas a una sóla cara... sinceramente no se, existe en blender un sistema de texturizado, se llama uvmap, pero no se cómo usarlo, sin embargo te puedo dar el tutorial, lo quice hacer con el milk shape, pero el texture coordinate editor que tiene me desesperó y no pude  ;D

link de texturizado de blender
http://wiki.blender.org/index.php/Manual.es/PartIV/UV_Mapping
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

DCelso

ostras, la captura está muy bien.
Es eso lo que quería, un ortoedro de 6 caras en la que una de sus caras es una imagen.
¿Como lo hiciste?
Lo suyo sería intentar hacer eso mismo pero desde bennu.
O sea, yo solo dispongo del zip anterior para recrear todo el escenario 3d. Por lo tanto con la información de ese zip

Primero debo de crear desde bennu ese cuboide y ponerle en una cara la imagen, ese es el paso que llevo intentando realizar ahora mismo.

(El siguiente sería repetir lo mismo pero poniendo dos texturas distintas, una en cada cara opuesta, para simular una carta, pero en este juego en concreto no hay cartas asi que me lo puedo saltar)

El siguiente paso sería repetir lo mismo pero con un cubo y ponerle una imagen en cada cara (Lo que sería el dado)

El siguiente paso sería intentar crear las fichas, para ello tendría que usar el archivo de máscara (blanco y negro) de las fichas para modelar esa silueta (forma) en 3d y ponerle la textura de la imagen. Este es el más complicado que veo.

Quizas la librería no esté preparada para poder hacer esto, por lo que veo.

¿se os ocurre otra forma?
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DCelso

A ver, he encontrado un tutorial que me sería de gran utilidad si fuese para bennu3d, es para C/Opengl.
http://www.geocities.com/valcoey/mtextura.html
He intentado leerlo pero lo veo bastante complejo, entiendo groso modo lo que hace, pero no en detalle.
¿Veis como adaptarlo en bennu3d u ogrebennu3d?
Gracias.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Prg

 :)

creo que lo mejor es que le preguntemos a link. para hacer lo que yo hice... aunque te parezca un poco tranposo, hice un cubo luego puse un plano, y agregué la textura al plano, lo acerqué a una de las caras del cubo  quedó, para hacer una carta vastaría con 2 planos que lleven la textura. para un cubo puedes usar uvmap o 6 planos... los planos son una cara y a la vez una figura 3d aparte, por lo que puedes ponerle la textura que quieras que lleve una cara plana y luego colocarlo ahí.

déjame leo el tutorial de uvmap, y luego te digo, mientras puedes preguntarle a linkernel qué opina ... :)
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

Windgate

Arg, como te he dicho yo usaría un modelo MD2 de una box con textura, cambiando la textura ya tienes el dado.

Hay un programa llamado MDL que te deja modificar punto a punto el modelo para obtener la "carta", y generando a partir de ella una nueva textura y pintándola con las diferentes cartas ya lo tendrías.

No te recomiendo OpenGL en absoluto, tengo ejemplos de OpenGL con un cubo que puede rotar, con el sistema solar hecho con esferas que orbitan entre sí... Pero OpenGL es prehistórico, un absoluto incordio, está basado en una pila y tiene decenas de cosas raras, yo personalmente no saldría del Bennu3D, y menos para pasar al OpenGiLi, si fuese otra librería quizás...
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DCelso

Ok, gracias por las aclaraciones, pero visto que a un plano si se le puede poner una textura de una imagen quizás sea esto lo que necesito osea
un tablero podría ser tal y como hizo PRG (muy buena idea) un cuboedro con un plano con una textura pegado a una cara.
una carta podría ser un cuboedro con dos planos con texturas distinta pegados a cada caras opuestas.
un dado 6 planos formando un cubo cada uno con una textura distinta.
Un poco menos formal pero efectivo, si todos juntos forman un objeto inamovible
¿Es más factible esta idea?
¿Como podría crear un plano con una imagen en bennu3d? voy a ver si me sale esto.

Otra idea tal y como he visto que comentaba windgate de usar una imagen como textura sería la de crear un map que concatenara las imágenes necesarias y usarlo como textura.
¿Más facil?
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Windgate

Sí, lo de concatenar los map con funciones 2D podría servir.

Formar un cubo a partir de planos... Al menos con las funciones M8EE que ví en su día no ví nada parecido, aunque son funciones de bajo nivel (Como las de OpenGL) que deberían estar por algún lado de la M8EE...

En cualquier caso formando el cubo con planos tienes la desventaja de que aplicar la física al dado para que ruede y se detenga en un número ya no es posible xD
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Prg

para todo hay mañas, te regalo el dado amigo. y una herramienta de uvmap.

la herramienta te sirve para cargar un objeto 3d, sacarle capturas a sus caras y guardar las posiciones de las capturas en el modelo, luego le cambias el color, o dibujas en la textura que te crea, y cuando lo abres... tienes el dado o lo que hagas. ya para en bennu 3d cambiarle la textura haces:

texturamario=M8E_LOADTEXTURE(nombre); //cargas la textura
 

   modelo=M8E_LOADANIMODEL( nombre); //load model                               //cargas el modelo
   M8E_LOADTEXMODEL(modelo, texturamario );    //se la asignas al cubo, te respetará las posiciones, es lo que te decía en blender, pero con esta herramienta lo tienes en segundos.


en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

DCelso

Gracias PRG,
pero no consigo ver el dado, puse este código

include "m8ee.h"
PRIVATE
  textura,i,ent;
begin
  set_mode (640,480,16);
  set_fps (0,0);
  M8E_INIT_DEFAULT();
  textura= M8E_LOADTEXTURE("resources\iteto.pcx");
  ent = m8e_loadanimodel("resources\dado.ms3d");
  M8E_LOADTEXMODEL(ent , textura );
  M8E_ADDCAM(0,50,-200,   0,5,0);
   while ( (!key(_esc))  )
     M8E_RENDER(0,  0,0,255);
     frame;       
  end;
  let_me_alone();
  M8E_FREE();
end

NOTA: he probado los formatos png, bmp y pcx para la textura. En el directorio "resources" tengo la imagen en esos tres formatos.
Otra pregunta,¿a un "process" le puedes asignar un objeto3d y moverlo con x, y, y z como en 2d?
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DCelso

Vale, no he dicho nada ;D.
Hay que añadir esto despues de cargar la textura
M8E_MODELSETMATERIAL(ent, EMF_LIGHTING,0);
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Windgate

Suele pasar, yo todavía no sé de memoria las instrucciones necesarias para hacer visible el modelo y la textura, ando continuamente mirando los tests u otros ejemplos programados anteriormente. Ojalá con el tiempo programe en 3D con la misma intuición que tengo para programar en 2D.

Puedes soltar las versiones cuando quieras para ir echando un vistazo, aunque no tengas más que un simple dado en pantalla, así podemos criticar, sugerir, insultar...
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DCelso

Uff, pues voy mal, mal, mal.
Solo tengo esto hecho y hace cosas rarísimas.
A ver si podeis explicármenlas.

include "m8ee.h"
local
  textura;
  modelo;
  _POS3D posicion;
  float tamanio;
begin
  set_mode (640,480,16);
  set_fps (0,0);
  M8E_INIT_DEFAULT();
  camara();
  tablero();
  dado();
  while ( (!key(_esc))  )
     M8E_RENDER(0,0,0,255);
     frame;       
  end;
  let_me_alone();
  M8E_FREE();
end

process tablero ()
begin
  textura = M8E_LOADTEXTURE("resources\tablero.png");
  modelo = m8e_loadanimodel("resources\tablero.ms3d");
  M8E_LOADTEXMODEL(modelo , textura );
  M8E_MODELSETMATERIAL(modelo, EMF_LIGHTING,0);
  posicion.x=0;
  posicion.y=0;
  posicion.z=0;
  tamanio = 1;
  M8E_MODELSCALE(modelo,  tamanio,tamanio,tamanio);
  while ( (!key(_esc)))
     M8E_POSMODEL(modelo, posicion);
     frame(800);       
  end;
end

process dado ()
begin
  textura = M8E_LOADTEXTURE("resources\iteto.png");
  modelo = m8e_loadanimodel("resources\dado.ms3d");
  M8E_LOADTEXMODEL(modelo , textura );
  M8E_MODELSETMATERIAL(modelo, EMF_LIGHTING,0);
  posicion.x=0;
  posicion.y=0;
  posicion.z=-1;
  tamanio = 0.01;
  M8E_MODELSCALE(modelo,  tamanio,tamanio,tamanio);
  while ( (!key(_esc)))
     M8E_POSMODEL(modelo, posicion);
     frame(800);       
  end;
end

process camara()
private
    _POS3D pos1,pos2;
    actualizarpos,actualizartarget;
    id_camara;
begin
pos1.x=0;
pos1.y=0;
pos1.z=-10;
pos2.x=0;
pos2.y=0;
pos2.z=0;

id_camara=M8E_ADDCAM(pos1.x,pos1.y,pos1.z,pos2.x,pos2.y,pos2.z);
loop
//camera position
    if (key(_up))
     pos1.x+=1; actualizarpos=true;   
    end;                 
    if (key(_down))
      pos1.x-=1; actualizarpos=true;             
    end;
    if (key(_left))
      pos1.y+=1; actualizarpos=true;             
    end;
    if (key(_right))
      pos1.y-=1; actualizarpos=true;             
    end; 
    if (key(_w))
      pos1.z+=1; actualizarpos=true;             
    end;
    if (key(_s))
      pos1.z-=10; actualizarpos=true;             
    end;   
   
//camera target
    if (key(_8))
     pos2.x+=1; actualizartarget=true;   
    end;                 
    if (key(_2))
      pos2.x-=1; actualizartarget=true;             
    end;
    if (key(_4))
      pos2.y+=1; actualizartarget=true;             
    end;
    if (key(_6))
      pos2.y-=1; actualizartarget=true;             
    end; 
    if (key(_1))
      pos2.z+=1; actualizartarget=true;             
    end;
    if (key(_0))
      pos2.z-=1; actualizartarget=true;             
    end;           
     
    if (actualizarpos)
     actualizarpos=false;  M8E_POSMODEL(id_camara, pos1);
    end;                                                                       
    if (actualizartarget)
     actualizartarget=false; M8E_CAMTARGET(id_camara, pos2);
    end;
    frame(1200);       
  End;
end;         

Con las flechas se mueve de una forma un tanto en cuanto peculiar ¿por qué?
Con 8,4,6,2 se mueve casi como esperaba pero nada también me resulta raro ¿Me podeis explicar diferencias?
A ver, yo intentaba buscar lo siguiente:
con las flechas desplazar la cámara a la izquierda, derecha, arriba y abajo.
con los números quería girar la cámara a la izquierda, derecha,arriba y abajo.
Y no las paranoias que hace ahora :D.
Luego la textura del tablero se ha aplicado a todas las caras, yo lo que esperaba es verla como en el modelo. Si cargo el modelo solo sin texturas se ve negro y si le pongo material se ve blanco, pero no cosigo ver el "supuesto" cuboedro blanco y el plano con la textura del tablero que hizo PRG.

Mas cosas, la textura del dado porqué es así como achatada, las caras no son todas iguales, he intentado cargar la textura de mi dado pero no cuela, se ve mal.

Por otro lado he tenido que escalar a un factor de 0.1 el dado por lo grande que era en relación al tablero ¿Por qué?
Gracias de antemano por cualquier respuesta.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Prg

QuoteCon las flechas se mueve de una forma un tanto en cuanto peculiar ¿por qué?
Con 8,4,6,2 se mueve casi como esperaba pero nada también me resulta raro ¿Me podeis explicar diferencias?
A ver, yo intentaba buscar lo siguiente:
con las flechas desplazar la cámara a la izquierda, derecha, arriba y abajo.
con los números quería girar la cámara a la izquierda, derecha,arriba y abajo.
al ratito le echo un ojo  ;)
Quote
Luego la textura del tablero se ha aplicado a todas las caras, yo lo que esperaba es verla como en el modelo. Si cargo el modelo solo sin texturas se ve negro y si le pongo material se ve blanco, pero no cosigo ver el "supuesto" cuboedro blanco y el plano con la textura del tablero que hizo PRG.
je je, la cara que se pinta en bennu3d está para adentro, y la que no para afuera, como en mi programa esto no se distingue pues funciona bien. para verlo bien y dos cosas que se pueden hacer: aplicarle draw back face, o que yo lo acomode (al rato lo acomodo)

Quote

Mas cosas, la textura del dado porqué es así como achatada, las caras no son todas iguales, he intentado cargar la textura de mi dado pero no cuela, se ve mal.
quiizá me quedó chuequito, al ratito lo reviso, copio tu código y lo pongo a funcionar :)
QuotePor otro lado he tenido que escalar a un factor de 0.1 el dado por lo grande que era en relación al tablero ¿Por qué?
¿tan grande me quedó? je je,

te prometo que al rato reviso tu código y te acomodo los models, ahorita termindaré el editor fpg, ya nada más me falta empaquetar, subir, y acomodar dos opciones. :)
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)