
Envoyé par
lougne
1/Je constate qu'il ya l'utilisation d'une fonction générique Load<T>(string). De un j'imagine que tous les générique hérite d'une classe du genre Material(T), mais ce que je ne comprends pas c'est le fait que tu ne spécifie pas l'extension comme dans
Engine.Contents.Load<TextureCube>("TextureCube")
.
Le string ne posséde pas d'extension .jpd,.dds..... cela signifie t-il que le paramétre générique donne lieu à l'ajout d'une extension (ex:TextureCube.dds), et si c'est le cas, est-il possible qu'il octroie pluisieurs type (jpg,png..) ou chaque paramétre ne donne qu'un type (là ça en fait beaucoup). Explication PLZ
Le moteur pour charger des médias utilise des codecs. Les codecs s'appuient sur l'interface "IContentCodec". Le codec contient toutes les infos afin de charger le média. Le codec défini (entre autre) :
* le type de médias en entrée-sortie (dans ton exemple il défini une instance de "ITexture")
* les extensions affectées au médias (le codec chargé d'importer les "ITexture" par exemple admet les extensions "dds", "bmp", "tga", "png", "jpg", "hdr")
et diverses autres choses que j'aborderais dans un tuto la dessus.
Pour résumé voilà ce qui ce passe lors de l'appel de la fonction
Engine.Contents.Load<TextureCube>("MonFichier")
* Recherche d'un codec correspondant au type "TextureCube" -> Trouve un codec pour les objets interfacés avec "ITexture" donc le type "TextureCube" à un codec d'import/export valide.
* Lit le/les extensions supportées par ce codec et cherche récursivement dans le répertoire des médias que tu as spécifié un fichier correspondant. (Trouve par exemple "MonFicher.dds")
* Appel la procédure d'import qui va charger le média et retourne l'objet "TextureCube" utilisant la ressource que tu viens de spécifier.
Tu peux accessoirement fixer l'extension en spécifiant "MonFichier.dds" mais cela ne pourrait être utile que si tu as par exemple un "MonFichier.hdr" dans tes médias. Mais le fait de ne pas renseigner l'extension présente 2 avantages majeurs :
* Le moteur n'importera que les médias pour lequel il possède un codec valide avec une extension valide
* C'est moins long à taper

Envoyé par
lougne
2/En lisant le code, je constate que mon concept de Node, ou SceneManager est un peu léger. As-tu des bons tuto , livres whatever, j'accepte tout.
Non pas vraiment...
C'est plus l'expérience et tes besoins qui vont définir la structure et le fonctionnement de cette partie. Comme je l'ai dit dans un autre post je ne suis pas trés satisfait de cette partie qui va surement subir pas mal de chamboulement d'ici peu... grosso modo les "nodes" représente des entitées indispensables au rendu (transformations, matériaux, données diverses pour le rendu...) et le scenegraph est là pour organiser le tout afin que le rendu soit correctement effectué et le plus rapidement possible.

Envoyé par
lougne
3/Je demande, non je supplie pour une explication approfondie. En fait ce qui m'intérresse ici, c'est comment sont passés les paramétres au shader. a quel niveau va t-on retrouver le commun effect.setvalue("X",xX);
Les shaders dans le nxEngine sont virtualisés... donc pas de Effect.SetValue. En effet aucun type utiliser par DirectX (Matrices, Vecteurs, Couleurs et autres) n'est utilisé par le moteur dans la mesure ou il utilise des classe propriétaires pour toutes ces données. De plus, un tampon de données est utilisé entre le shader et les paramètres ce qui interdit toutes modifications en direct des paramètres du shader. Mais pour répondre à ta question, la commande "AtmosphereMaterial["ViewPow"].Set(1.0f);" équivaut à un "Effet.SetValue("ViewPow", 1.0f)".
Donc quand tu importes un shader externe dans le nxEngine, il faudra toujours l'affecter à un matériau. Ensuite tu modifieras le matériau comme indiqué dans l'exemple afin d'accedes aux differents paramètres de ton shader.
Par exemple le .fx associé à cet exemple contient les déclarations suivantes :
1 2 3
| half ViewPow;
half LightPow;
half4 DiffuseColor; |
tu vois donc que "AtmosphereMaterial["ViewPow"].Set(1.0f);" équivaut à un "Effet.SetValue("ViewPow", 1.0f)"
Partager