1 : obtenir des infos des éléments
Le problème ici est d'arriver à créer assez de fonctions (si on commence par le nom, pourquoi ne pas proposer la taille, le mesh associé, ...). La solution de la macro est originale mais pose un problème au niveau des bindings de Raydium (PHP et Python à l'heure actuelle) qui ne vont pas voir cette macro.
Je pense que la solution (temporaire ?) va passer par une macro "avec avertissement dans la doc". Je regarde ça ASAP.
2 : adapter la taille du mesh en fonction des infos de création
Problème ici : et si je souhaite créer un objet dont la taille du modèle ne doit pas correspondre avec celle de l'objet physique ? C'est par exemple le cas avec la Clio de ManiaDrive, dont la "boite" physique est plus petite que le modèle (pour moins "accrocher" les bords, en particulier au niveau des rétros). Mais l'idée est intéressante ... Il faudrait ici ajouter une fonction de "scale" au niveau de l'élément (RayODE) ou même au niveau de Raydium lui même (object.c). A rajouter sur la TODO
3 : changement de la gravité
Oui, c'est légitime. C'est maintenant dispo dans la rev 432.
4 : raydium_ode_ground_set_name(...) ne recharge pas l'objet
Effectivement, et c'est valable pour toutes les fonctions qui utilisent des noms de fichiers .tri ... Tout chargement inscrit le modèle dans le cache. Il y'a a l'heure actuelle aucune solution pour contourner le problème, Raydium n'offrant aucune fonction de "déchargement" ... (cf la manière dont ManiaDrive gère la chose en accumulant les circuits en RAM).
Voilà au passage une importante feature à rajouter à la roadmap "long terme" !
5 : raydium_camera_smooth() et les erreurs de "sound.c"
Le lien entre la caméra et le son se situe au niveau de la fonctionnalité "son spatial" de Raydium, qui doit déplacer "l'oreille" d'OpenAL avec la caméra. Tu as un exemple simple qui génère ce problème ?
6 : autre rendu de la scène dans un coin de l'écran
Il est déjà possible de réaliser ça avec quelques astuces :
1 : créer une "fausse" texture :
raydium_texture_load_internal("","camera",1,256,256,4,-1);
(texture de 256*256*RGBA de nom "camera")
2 : avoir une boucle de rendu de ce style :
Code:
...
raydium_clear_frame();
... placement de la camera "vignette" avec les fonctions habituelles ...
glViewport(0,0, 256, 256); // on limite la zone de rendu à 256x256 pixels
raydium_sky_box_render(raydium_camera_x,raydium_camera_y,raydium_camera_z)
raydium_camera_replace();
raydium_ode_draw_all(RAYDIUM_ODE_DRAW_NORMAL);
glBindTexture(GL_TEXTURE_2D,raydium_texture_find_by_name("camera"));
glCopyTexSubImage2D(GL_TEXTURE_2D,0, 0,0, 0,0, 256, 256);
raydium_rendering_internal_restore_render_state();
A partir de cette instant, la scène est rendue dans la texture "camera"
Ensuite, on repart sur un affichage habituel (ou presque) :
Code:
glViewport(0, 0, raydium_window_tx, raydium_window_ty);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
raydium_sky_box_render(raydium_camera_x,raydium_camera_y,raydium_camera_z);
raydium_camera_replace();
...
raydium_ode_draw_all(RAYDIUM_ODE_DRAW_NORMAL);
...
raydium_rendering_finish();
C'est utilisé par deux fois dans volcano.c par exemple (pour rendre le reflet et le fond de l'eau). Alors bien sur, il serait possible de rendre ça beauuucoup plus facile et transparent pour l'utilisateur, mais pour l'heure ....