Historique des modifications - Message

Message #11157

Sujet: Afficher, cacher et remplacer les sous-mesh d'un mesh


Type Date Auteur Contenu
Dernière modification 02-04-2013 07:03:55 Joeyy
Ca a l'air de plutôt bien marcher !

Cependant je rencontre un problème vraiment gênant que je n'arrive pas à surmonter, certaines parties de mes objets sont transparentes comme le montrent les images ci-dessous.

Au début j'ai pensé que cela était dû au fait que j'avais mis plusieurs node au même endroit - et que peut-être elles se gênaient mutuellement - mais ce n'est pas le cas car ce phénomène se produit même lorsqu'un seul objet est chargé comme le montrent les images ci-dessous.




En tatonnant j'ai determiné que cela a l'air de provenir d'un paramétrage de la caméra (j'utilise la camera FPS prédéfinie), car seules les faces (du mesh), qui font face à la caméra sont rendues transparentes. En déplacant la caméra les faces réaparaissent - mais les nouvelles qui sont visées disparaissent. J'ai d'abord pensé à la méthode des camera setNearValue(), mais cela se produit même si la caméra est très éloigné.

Voici mon code (très basique):

Code c++ :


 IrrlichtDevice device = IrrlichtDevice.CreateDevice(DriverType.Direct3D9, new Dimension2Di(640, 480));
            VideoDriver driver = device.VideoDriver;
            SceneManager smgr = device.SceneManager;

            AnimatedMesh mesh1 = smgr.GetMesh("../../media/TT_A.3ds");
            AnimatedMesh mesh2 = smgr.GetMesh("../../media/STRUCTURE.3ds");
            AnimatedMesh mesh3 = smgr.GetMesh("../../media/PIGNON_A.3ds");
            
            SceneNode node1 = null;
            SceneNode node2 = null;
            SceneNode node3 = null;

            node1 = smgr.AddMeshSceneNode(mesh1.GetMesh(0));
            node2 = smgr.AddMeshSceneNode(mesh2.GetMesh(0));
            node3 = smgr.AddMeshSceneNode(mesh3.GetMesh(0));
            
            node1.Position.Set(new Vector3Df(0, 0, 0));
            node2.Position.Set(new Vector3Df(0, 0, 0));
            node3.Position.Set(new Vector3Df(0, 0, 0));

            node1.SetMaterialTexture(0, driver.GetTexture("../../media/BOIS_FONCE.png"));
            node1.SetMaterialType(MaterialType.Solid);

            node2.SetMaterialTexture(0, driver.GetTexture("../../media/rockwall.jpg"));
            node2.SetMaterialType(MaterialType.Solid);

            node3.SetMaterialTexture(0, driver.GetTexture("../../media/stones.jpg"));
            node3.SetMaterialType(MaterialType.Solid);
                

            smgr.AmbientLight.Set(1,1,1);
            LightSceneNode light = smgr.AddLightSceneNode(null, new Vector3Df(0, 400, -200), new Colorf(1f, 1f, 1f),100f);
            node1.SetMaterialFlag(MaterialFlag.Lighting, false);
            node2.SetMaterialFlag(MaterialFlag.Lighting, false);
            node3.SetMaterialFlag(MaterialFlag.Lighting, false);

            smgr.AddCameraSceneNodeFPS(null, 4f,0.02f);
            device.CursorControl.Visible = false;


Je ne vois pas trop à quoi cela peut être dû hmm
PS: Ah oui, j'utilises Irrlicht Lime donc le code au dessus est en C#, mais je pense que c'est sensiblement la même chose.
Création du message 02-04-2013 06:56:08 Joeyy
Ca a l'air de plutôt bien marcher !

Cependant je rencontre un problème vraiment gênant que je n'arrive pas à surmonter, certaines parties de mes objets sont transparentes comme le montrent les images ci-dessous.

Au début j'ai pensé que cela était dû au fait que j'avais mis plusieurs node au même endroit - et que peut-être elles se gênaient mutuellement - mais ce n'est pas le cas car ce phénomène se produit même lorsqu'un seul objet est chargé comme le montrent les images ci-dessous.




En tatonnant j'ai determiné que cela a l'air de provenir d'un paramétrage de la caméra (j'utilise la camera FPS prédéfinie), car seules les faces (du mesh), qui font face à la caméra sont rendues transparentes. En déplacant la caméra les faces réaparaissent - mais les nouvelles qui sont visées disparaissent. J'ai d'abord pensé à la méthode des camera setNearValue(), mais cela se produit même si la caméra est très éloigné.

Voici mon code (très basique):

Code c++ :


 IrrlichtDevice device = IrrlichtDevice.CreateDevice(DriverType.Direct3D9, new Dimension2Di(640, 480));
            VideoDriver driver = device.VideoDriver;
            SceneManager smgr = device.SceneManager;

            AnimatedMesh mesh1 = smgr.GetMesh("../../media/TT_A.3ds");
            AnimatedMesh mesh2 = smgr.GetMesh("../../media/STRUCTURE.3ds");
            AnimatedMesh mesh3 = smgr.GetMesh("../../media/PIGNON_A.3ds");
            
            SceneNode node1 = null;
            SceneNode node2 = null;
            SceneNode node3 = null;

            node1 = smgr.AddMeshSceneNode(mesh1.GetMesh(0));
            node2 = smgr.AddMeshSceneNode(mesh2.GetMesh(0));
            node3 = smgr.AddMeshSceneNode(mesh3.GetMesh(0));
            
            node1.Position.Set(new Vector3Df(0, 0, 0));
            node2.Position.Set(new Vector3Df(0, 0, 0));
            node3.Position.Set(new Vector3Df(0, 0, 0));

            node1.SetMaterialTexture(0, driver.GetTexture("../../media/BOIS_FONCE.png"));
            node1.SetMaterialType(MaterialType.Solid);

            node2.SetMaterialTexture(0, driver.GetTexture("../../media/rockwall.jpg"));
            node2.SetMaterialType(MaterialType.Solid);

            node3.SetMaterialTexture(0, driver.GetTexture("../../media/stones.jpg"));
            node3.SetMaterialType(MaterialType.Solid);
                

            smgr.AmbientLight.Set(1,1,1);
            LightSceneNode light = smgr.AddLightSceneNode(null, new Vector3Df(0, 400, -200), new Colorf(1f, 1f, 1f),100f);
            node1.SetMaterialFlag(MaterialFlag.Lighting, false);
            node2.SetMaterialFlag(MaterialFlag.Lighting, false);
            node3.SetMaterialFlag(MaterialFlag.Lighting, false);

            smgr.AddCameraSceneNodeFPS(null, 4f,0.02f);
            device.CursorControl.Visible = false;


Je ne vois pas trop à quoi cela peut être dû hmm
PS: Ah oui, j'utilises Irrlicht Lime donc le code au dessus est en C#, mais je pense que c'est sensiblement la même chose.

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
137 invités en ligne
membre en ligne: -
RSS Feed