Solved Makefile problem and library added
[charmilia.git] / Demo / 02-MeshLoad.c
blob984a1391190a016468c9bbac27efe35783ebb396
1 /////////////////////////////////////////////////
2 //Este archivo forma parte del Revolution Engine.
3 //Coded by Technik
4 /////////////////////////////////////////////////
5 /*Licencia:
6 El Revolution Engine se proporciona "Tal Cual", es decir, no se ofrece ningun tipo de garantia
7 sobre su correcto funcionamiento. El autor no se hace responsable del uso que se haga de este
8 software ni de modificaciones o variaciones del mismo, ni de las consecuencias de dicho uso.
9 No obstante se intentara dar apoyo a cualquier duda o pregunta que se tenga sobre el, sobre su
10 uso o sobre su funcionamiento, pero sin ofrecer garantias de ello.
11 Una vez has obtenido una copia de la totalidad o parte de este software, podras redistribuirlo
12 siempre y cuando se cite al autor original del codigo (technik) y se añada una nota con la
13 procedencia original del codigo (www.revolutiongameengine.blogspot.com a fecha de 24 de julio de 2008).
14 Puedes modificar este codigo tanto como quieras siempre que las modificaciones sean notificadas al autor
15 y/o su resultado sea un codigo fuente publico, sobre el cual el autor del codigo original (este) tendra
16 derecho de copia, modificacion, inclusion en proyectos, o cualquier uso de forma totalmente libre y gratuita.
17 No se obliga a nadie a pagar por este software.
18 Cualquier redistribucion del software debe llevar al menos una copia de esta licencia.
19 El autor se reserva el derecho a modificar esta licencia en el futuro tanto como crea conveniente.
20 Se permite el uso de la totalidad o parte de este software en cualquier proyecto no comercial siempre que
21 se respete y conserve esta licencia.
22 Para el uso de la totalidad o parte de este software para cualquier fin comercial o que requiera de otra
23 licencia distinta sera necesario ponerse en contacto con el autor del software (technik) cuya autorizacion
24 expresa es indispensable.
27 /***Demo de Carga de Modelos***/
28 //En esta demo se carga un Modelo Estatico, un puntero, y se usa una camara.
29 //La camara se mueve con el puntero y la cruceta.
30 #include <stdio.h>
31 #include <stdlib.h>
32 #include <string.h>
33 #include <malloc.h>
34 #include <math.h>
35 #include <gccore.h>
36 #include <wiiuse/wpad.h>//Hasta aqui los archivos tipicos que solemos incluir
38 #include "REV.h"//Esto lo incluimos para usar el Engine
40 int main()
42 VIDEO_Init();//Iniciamos Libogc
43 WPAD_Init();//Iniciamos Wpad, para el mando.
44 REV_Init();//Iniciamos el Revolution Engine
45 WPADData *wiimote;
46 WPAD_SetDataFormat(0, WPAD_FMT_BTNS_ACC_IR);//Codigo para el Wiimote, no se explicara aqui
48 f32 posx = 320, posy = 240;
50 ROOT * mRoot = NewRoot();//Creamos una raiz.
52 MESH * WiiMesh = AbrirMesh("wii.rms");//Cargamos el modelo
53 MATERIAL * WiiMat = MatFromImg("wiitextcm7.png", Blanco, 32);//Cargamos su textura
54 OBJECT * WiiObj = NewObj(WiiMesh,WiiMat, (Vector){0.0, 0.0, 31.0}, (Vector){0.0, 0.0, 0.0}, 9);
55 //Ni los modelos ni las texturas valen de nada si no estan enlazados y se les concede
56 //una posicion en el espacio. Esta es la funcion de un OBJECT, tambien conocidos como Entitys
57 //en algunos sitios. Creamos el object con nuestro MESH (WiiMesh), nuestro MATERIAL (WiiMat)
58 //y un par de vectores que indican posicion y orientacion en el espacio. El ultimo parametro es
59 //un identificador, aun no es util, podeis poner un numero entero al azar.
60 AddObj(mRoot, WiiObj);
61 //Con AddObj añadimos un objeto nuevo a la raiz, ningun objeto que creemos aparecera en escena
62 //hasta que lo añadamos a la raiz.
64 IMAGE * Puntero = AbrirImagen("puntero.png");
65 PANEL * panel1 = NewPanel(Puntero, 220, 240, 3, 1);
66 AddPnl(mRoot, panel1);
67 //Esto ya se vio en la demo de panels, es un buen ejemplo
68 //de como funciona el engine, creas las cosas, las añades, y listo.
70 CAMERA mCamera;//Creamos una camara
71 mCamera.cam = (Vector){0.0, -100.0, 31.0};
72 mCamera.look = (Vector){0.0, -99.0, 31.0};
73 mCamera.up = (Vector){0.0, 0.0, 1.0};
74 //Damos valores a sus 3 vectores base
75 //Asi definimos su posicion y orientacion iniciales.
77 while(1) {//Ahora el bucle principal.
79 WPAD_ScanPads();
81 if (WPAD_ButtonsDown(0) & WPAD_BUTTON_HOME) exit(0);//Salir si pulsamos home
83 wiimote = WPAD_Data(0);
84 if(wiimote->ir.valid)
86 posx = wiimote->ir.x; //asignamos la posicion x
87 posy = wiimote->ir.y; //asignamos la posicion y
88 panel1->x = posx;
89 panel1->y = posy;
90 }//Hasta aqui es como en la demo de panels
92 ////////////Actualizamos la posicion de la camara
93 if(posy > 300)
94 MoveCam(&mCamera, ((300.0 - (f32)posy)/180.0), 0.0, 0.0);
95 if(posy < 180)
96 MoveCam(&mCamera, ((180.0 - (f32)posy)/180.0), 0.0, 0.0);
97 if(posx < 200)
98 RotateCamByAxis(&mCamera, 0.0, 0.0, 1.0, ((200.0 - (f32)posx)/2000.0));
99 if(posx > 440)
100 RotateCamByAxis(&mCamera, 0.0, 0.0, 1.0, ((440.0 - (f32)posx)/2000.0));
101 if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_UP)
102 MoveCam(&mCamera, 0.0, 0.0, 1.0);
103 if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_DOWN)
104 MoveCam(&mCamera, 0.0, 0.0, -1.0);
105 if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_LEFT)
106 MoveCam(&mCamera, 0.0, 1.0, 0.0);
107 if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_RIGHT)
108 MoveCam(&mCamera, 0.0, -1.0, 0.0);
109 ///////////////
111 REV_Process(*mRoot, &mCamera);//llamamos al engine para que haga el trabajo por nosotros.
114 //Fin.