bennu3d

Started by l1nk3rn3l, May 21, 2008, 01:08:52 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

josebita

¡Ah! vale.

Lo intentaré. Muchas gracias :) Pensaba que el proyecto era de Visual Studio y me liaba. Cuando saque un ratillo, perobaré a ver qué tal.

Windgate

#211
Hola amiguitos, buenas y malas noticias, las buenas son que recién he empezado con el tutorial para Bennu 3D y que seguramente empezaré a traducir a lengua cristiana el resumen de funciones M8EE añadiendo algún detalle más sobre sus parámetros y funcionamiento.

La mala es que estoy empezando a portar mi antigua prueba de "iluminación y física con Bennu3D" al nuevo motor, y al compilar me encuentro 3 errores:

1) Tengo una variable de tipo _PhyModel llamada "fisica" en la que quiero cargar un modelo para que se atenga a las misteriosas leyes de la física. Anteriormente usaba:

fisica.typemodel=EBT_PRIMITIVE_CAPSULE;

Supongo que el nuevo nombre de la constante es TPHYS_CAPSULE según lo que leo en el fichero M8EE.h, ¿A qué se debe el cambio en los nombres de las constantes?

¿Seguirán así los nombres? A mí me parece correcto, sólo es por tenerlo en cuenta a la hora de redactar la guía.

2) Para lograr que los modelos respondieran a la física del escenario me basé en los ejemplos y usaba la función:

M8E_PHYSADDCHARCONTROL ( );

A la que le pasaba como parámetro una referencia a una variable _PhyCharacterModel donde almacenaba al personaje que manejamos y al mapa en el que se encuentra.

El problema es que no encuentro cuál función sustituye a ésta... ¿Alguien sabe si la hay?

3) De la misma forma usaba la función:

M8E_PHYSCHARCONTROLUPDATE ( );

Y le pasaba una referencia a los controles del personaje.

¿Qué función lo sustituye y dónde está el listado de estas funciones amigüitos?

A ver si alguien me sabe responder, sigo investigando por mi cuenta caballeros.

EDIT: He descargado la última versión de Bennu3D y veo que los test que usan física son del 21 al 25 pero no vienen. Estoy buscando en los links de referencia que ha puesto l1nk3rn3l y no encuentro nada, estoy sediento de física! ¿No se ha liberado todavía el motor de bullet?

El problema es que lo que más he trabajado con Bennu 3D es la física y es lo primero que quiero probar en el nuevo motor, pero bueno, mientras tanto me pongo con otras cositas que anda que no hay por probar :P
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

Windgate

Creo que ya he mirado en todas partes y definitivamente espero a que llegue la física.

Se me ha ocurrido hacer un módulo de utilidad general para todos los que programamos en 3D, es una sencillez mínima y absoluta, por ahora sólo tiene una función, pero no me compila :S

A ver si alguien sabe decirme por qué:

FUNCTION _pos3d pos3d ( float _x , float _y , float _z )
PRIVATE
_pos3d aux;
BEGIN
aux.x = _x;
aux.y = _y;
aux.z = _z;
RETURN aux;
END


Con la función así, usando una variable de tipo _pos3d hago:

variable = pos3d ( 3 , 3 , 3 );

Y me da un error de struct required...
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

SplinterGU

#213
1) no podes devolver un dato struct
2) de hacerlo, se retorna como puntero
3) no podes devolver un puntero a un dato interno de un proceso que muere (retorna, etc)
4) variable debe ser de tipo "_pos3d *"
5) si podes declarar en la funcion un "_pos3d *" hacer un "aux = malloc(sizeof(_pos3d))" y luego ahi si retornar ese aux
6) por favor, cuando pongas ejemplos de codigo que tienen variables, por favor mostra la definicion de las variables... (en este caso, cuando declaras "variable")

Saludos.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

laghengar

se podría hacer esto???
.......
_pos3d point3d;
........

begin
...................
pos3d(&point3d, 3, 3, 3);
...................
end


function pos3d (*p3d, float _x, float _y, float _z)
begin
   *p3d.x = _x;
   *p3d.y = _y;
   *p3d.z = _z;
end
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

Windgate

Gracias Splinter, nunca se deja de aprender algo nuevo con Bennu :P

Tendré en cuenta lo del retorno únicamente de punteros a struct, el uso de mem_alloc.

Y sorry por no poner la declaración de variable, había dicho:

Con la función así, usando una variable de tipo _pos3d hago:

Pero te entiendo, siempre repugna leer código de terceros y más si falta cualquier tipo de especificación xD

Laghengar, sí que se podría hacer lo que dices (Al menos en teoría xD), quizás sea la opción que tome finalmente.

Gracias a todos!
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

Windgate

Veamos Laghengar, he probado lo que dices siguiendo también las indicaciones de Splinter, pero tampoco me funciona:

Tengo declarada:

_pos3d escala_mapa;

Y una función así:

FUNCTION pos3d ( _pos3d POINTER aux , float _x , float _y , float _z )
BEGIN
(*aux).x = _x;
(*aux).y = _y;
(*aux).z = _z;
END


Invoco la función de esta forma tan sexy:

pos3d ( &escala_mapa , 4 , 4 , 4 );

Y como resultado escala_mapa toma en sus componentes x,y,z valores astronómicos, no toman el 4...

Creo que es probleme de Bennu3D, el tipo de dato _pos3d también me ha dado otros problemas, por ejemplo si intento poner varios parámetros seguidos del tipo _pos3d pasa a interpretar _pos3d como una variable int y los parámetros como int también.
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

SplinterGU

Quote from: laghengar on September 17, 2009, 02:27:07 PM
se podría hacer esto???
.......
_pos3d point3d;
........

begin
...................
pos3d(&point3d, 3, 3, 3);
...................
end


function pos3d (*p3d, float _x, float _y, float _z)
begin
   *p3d.x = _x;
   *p3d.y = _y;
   *p3d.z = _z;
end

si, eso si...

windgate:

pero te falto algo, como esta definida _pos3d?

y donde y como definis la funcion pos3d... si la definis despues de usarla, no va a funcionar...

o le pusiste declare arriba de todo?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Esa función pos3d() la tengo declarada en un .prg que cargo justo al inicio de mi código con INCLUDE, de esta manera:

INCLUDE "modulos/pos3d.prg"; // Carga el módulo con funciones para trabajar fácilmente con coordenadas 3D

Estoy seguro de que es visible cuando la uso.

En cuanto a _pos3d, es un tipo de dato que viene definido en Bennu3D y tiene 3 campos float que son x,y,z. Casi todas las funciones de Bennu3D usan parámetros de tipo _pos3D, por ejemplo, con las variables:

_Pos3D pos;
int identificador;


Uso las siguientes funciones de Bennu3D para cargar y posicionar un modelo sin problemas:

identificador = M8E_LOADANIMODEL ( "models/sucubo.md2" );
pos.x = x; pos.y = y; pos.z = z;
M8E_POSMODEL ( identificador , pos );


Hay muchos ejemplos como el anterior en los TESTs de la nueva Bennu3D y funcionan correctamente.

También he seguido una recomendación de Prg que me ha mandado por privado, pero sigue sin funcionar... Tengo la última versión de Bennu3D, y de Bennu tengo la RC6 (Creo recordar, en Windows)

Voy a probar a descargar la última RC de Bennu e intentarlo de nuevo, pero estoy empezando a pensar que pueda haber algún bug  con el tipo de dato _pos3D al ser tan reciente el nuevo motor de Bullet. Sigo investigando y os informo. Gracias a todos.

PD: Estoy editando in english la descripción de funciones de la Bennu3D, aumentando un poco la descripción de algunas funciones que no dejaban claro su comportamiento exacto, cuando tenga algo más completo lo subo aquí.
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

SplinterGU

parece que hay un bug cuando se pasan floats por parametro... maldicion, y ahora no tengo tiempo de ponerme con eso...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

#220
ya detecte el problema...


process set_3d (_s3d * aux, float _d1, float _y1, float _z1 )
begin
    (*aux).x = _d1;
    (*aux).y = _y1;
    (*aux).z = _z1;

    say(_d1);
    say(_x);
    say(_y1);
    say(_z1);

end


private
    _s3d    s;
begin

    set_3d(&s, 4.5, 4.4, 4.2);

    say(s.x);
    say(s.y);
    say(s.z);

end



como veras hay un _x que no deberia compilar, deberia dar problemas...

parece que si empieza con _ y tiene un caracter, entonces lo compila vaya a saber como...


ahhhh, pero que pelotudo que soy!!!! son las constantes de teclado!!!!!!!

ese es el problema!!!!

TODO: si hay una constante definida, no debe permitirse usarla como nombre de un parametro... el chequeo existe para variables de globales, estaticas y publicas.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

ya esta corregido, voy a generar parches...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

SANTA MADONNA!!!

Fallo mío y de principiante :S

¿Pero el compilador debería avisar, no? (Ahora leo que sí en el Avance diario)

Lo cierto es que quería poner como nombres de los parámetros la_x , la_y , la_z pero por hacerlo más internacional lo dejé como _x , _y , _z.

Si estás ocupado no te preocupes Splinter, aquí nos podemos ayudar entre nosotros, supongo que alguien se hubiese dado cuenta de mi error :S

Gracias y Karma up por tu intervención, eres como un X Men.
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

laghengar

#223
Curioso, si es que muchas veces nos saltamos lo de nombres reservados  :P, vamos que lo que puse yo tampoco vale jejejeje.


Lo de antes lo pregunté porque me parecía curioso que recurriendo a punteros, se pueda acceder a una estructura de la forma *p3d.y, ya que hasta ahora para hacer eso yo hacía *p3d+8  (*p3d primer byte de la estructura y 8 para añadir 8 bytes y así llegar donde estaría supuestamente "y").
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

SplinterGU

lo que pusiste vos si vale, pero hay que encerrar entre parentesis (*p3d) y cuando lo declaras es de tipo _p3d... fijate el ejemplo que puse, ese funciona bien...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2