Bennu Game Development

Foros en Español => Proyectos => Topic started by: alex on March 03, 2013, 03:00:53 PM

Title: api de bennu3d, API3D
Post by: alex on March 03, 2013, 03:00:53 PM
El tema es que creo que aunque ya esta muy simplificado y facil, creo que se podrían hacer funciones aun mas faciles y al estilo de bennugd.
El problema que yo le veo sobre pensar en 3D, que la libreria no trabaja con relatividades para ubicar los objetos, solo con los ejes x y z globales, es decir, propongo trabajar al estilo bennugd con dos variables angles (estamos en 3D y hace falta 2) y una orden advance, o funciones de ayuda con las camaras, etc.

Lo que yo propongo es tener bennu3d simplificado al maximo para que sea mucho mas facil, y a la vez trabajar con tanta "complejidad" con la que trabaja. No se si me explico. Crear una cosa tipo API para que sea mas comodo trabajar.

Tengo echas tres funciones.
La primera simplemente simplifica los dos angulos (es un vector), que se pasan como parametro. Los simplifica entre 180000 y -180000.
Function Regula_angulo(int pointer ang1);
Private
    BYTE a;
End
BEGIN
    For(a=0;a<=1;a++)
        IF(ang1[a]>180000)
            ang1[a]=ang1[a]-360000;
        ELSEIF(ang1[a]<-180000)
            ang1[a]=ang1[a]+360000;
        END
    End
END


La segunda te calcula la posicion respecto a un objeto para moverse de forma esferica, se suele usar para que una camara pueda girar, a modo camara en tercera persona, alrededor de un objeto (móvil).
En el primer parametro van las coordenadas del objeto, en el segundo va el radio de la esfera, en el tercero el par de angulos, en el cuarto se almacenan las coordenadas.
Function Calcula_esfera(_Pos3D pointer center, int r, int pointer ang1, _Pos3D pointer coordcalcule)
Begin
    coordcalcule.z=center.z+r*sin(ang1[1]);
    coordcalcule.y=center.y+r*sin(ang1[0])*cos(ang1[1]);
    coordcalcule.x=center.x+r*cos(ang1[0])*cos(ang1[1]);
End


La tercera te calcula lo que debe avanzar cada eje del objeto respecto de sus dos angulos, el parametro es lo que debe de avanzar.
Function advance(float cantidad)
Begin
    father.objectmain.Pos.x=father.objectmain.Pos.x+cantidad*cos(father.ang[0])*cos(father.ang[1]);
    father.objectmain.Pos.y=father.objectmain.Pos.y+cantidad*sin(father.ang[0])*cos(father.ang[1]);
    father.objectmain.Pos.z=father.objectmain.Pos.z+cantidad*sin(father.ang[1]);
End


Y esto es todo lo que tengo...
Mi plan es crear las menos dificultades posibles, crear variables locales: objetos, texturas, coordenadas de rot pos y scale, angle. Y crear relatividad con la camara activa, es decir, la z coordenada horizontal (lejos, cerca) de la camara, y coordenada vertical (arriba, abajo) de la camara, x coordenada horizontal (derecha, izquierda) de la camara. Los angulos tambien con relatividad, es decir, un ang[0]=0 y ang[1]=0, seria un objeto mirando hacia adelante y la camara enfocando su espalda. Y asi no tener que usar calculos matematicos dificiles y "sin sentido".

Pido ayuda con los nombres, como quereis que se llamen las distintas variables y functiones para que no haya confusión con las demas de bennugd, que sean legibles, en ingles y sobre todo faciles de escribir.
Sugerencias por favor de lo que quieran en funciones.
Opiniones. Y cualquier critica la agradezco tambien xD.
Title: Re:api de bennu3d, API3D
Post by: laghengar on March 04, 2013, 06:17:03 AM
Si quieres, para no confundirlas, podrías agregar un prefijo 3d_ a todas las variables :). Respecto a todo lo demás que pides, supongo que es mucho mejor si cada uno nos lo podemos trabajar por métodos propios, agregar este tipo de cosas, aunque ayuda en el trabajo, siempre es un aumento del consumo y por tanto, pérdida de rendimiento. De todos modos está bien lo que dices.
Title: Re:api de bennu3d, API3D
Post by: Drumpi on May 29, 2013, 07:10:24 PM
¿No hubo hace tiempo alguien (lo siento, los nombres, ya sabeis ^^U) que ya se tomó las molestias en hacer algo así? ¿prg? ¿Free?