api de bennu3d, API3D

Started by alex, March 03, 2013, 03:00:53 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

alex

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.

laghengar

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.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

Drumpi

¿No hubo hace tiempo alguien (lo siento, los nombres, ya sabeis ^^U) que ya se tomó las molestias en hacer algo así? ¿prg? ¿Free?
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)