IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

directx managed affichage simple mesh


Sujet :

DirectX

  1. #1
    Membre habitué

    Profil pro
    Consultant Business Intelligence
    Inscrit en
    Novembre 2005
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant Business Intelligence

    Informations forums :
    Inscription : Novembre 2005
    Messages : 284
    Points : 186
    Points
    186
    Par défaut directx managed affichage simple mesh
    Bonjour
    je suis débutant c# managed 2.0 j'aimerai simplement afficher un simple mesh cube torus ou teapot. Mais j'ai une erreur
    voici une partie de mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    privateMesh myMesh = null;
     
     
    publicvoid InitializeGraphics()
    {
    // Paramètre de présentation
    presentParams = newPresentParameters();
    presentParams.BackBufferHeight = this.Height;
    presentParams.BackBufferWidth = this.Width;
    presentParams.IsWindowed = true;
    presentParams.SwapEffect = SwapEffect.Discard;
    // Depth Buffer
    presentParams.EnableAutoDepthStencil = true;
    presentParams.AutoDepthStencilFormat = DepthFormat.D16;
    presentParams.DeviceWindowHandle = this.Handle;
    // Créer le device
    device = newDevice(0, DeviceType.Hardware, this.Handle,
    CreateFlags.SoftwareVertexProcessing, presentParams);
    myMesh = Mesh.Teapot(device);
    // Device.IsUsingEventHandlers = true;
    // device.DeviceRisizing += new CancelEventHandler(this.CancelResize);
    // Register an event-handler for DeviceReset and call it to continue
    // our setup.
    // N'a pas l'air de fonctionner !!!
    device.DeviceLost += newEventHandler(device_DeviceLost); // Ok !
    device.Disposing += newEventHandler(device_Disposing); // Ok !
    device.DeviceReset += newEventHandler(device_DeviceReset); // not Ok !
    // device.DeviceReset += new System.EventHandler(this.OnResetDevice);
    OnResetDevice(device, null);
    }
     
    protectedoverridevoid OnPaint(System.Windows.Forms.PaintEventArgs e)
    {
    device.Clear(ClearFlags.Target | ClearFlags.ZBuffer,
    System.Drawing.Color.CornflowerBlue,
    1.0f, 0);
    SetLights();
    SetupCamera();
    device.Transform.World = Matrix.RotationX(angleX);
    device.Transform.World *= Matrix.RotationY(angleY);
    device.BeginScene();
    myMesh.DrawSubset(0);
    device.EndScene();
    
    device.Present();
    }
    
    Et ça plante à la ligne myMesh.DrawSubset(0)
    comme erreur ça me marque l'exception InvalidCallException n'a pas été gérée
    Est-ce que quelqu'un peut m'aider svp.

  2. #2
    Membre habitué

    Profil pro
    Consultant Business Intelligence
    Inscrit en
    Novembre 2005
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant Business Intelligence

    Informations forums :
    Inscription : Novembre 2005
    Messages : 284
    Points : 186
    Points
    186
    Par défaut
    dans l'initialize des j'ai déplacé
    myMesh = Mesh.Teapot(device);
    après l'instruction on resetdevice
    Ainsi ça m'affiche mon teatpot mais le problème est que dès que je modifie la taille de ma fenetre, le teapot disparait.
    pouvez vous m'aider?

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    dans l'initialize des j'ai déplacé
    myMesh = Mesh.Teapot(device);
    après l'instruction on resetdevice
    Oui, un reset du device invalide toutes les données chargées dans le pool DEFAULT. Voir la FAQ à ce sujet.

    Pour l'histoire du redimensionnement, quelqu'un a eu le même problème il n'y a pas si longtemps, essaye de retrouver le sujet avec la recherche avancée.

  4. #4
    Membre habitué

    Profil pro
    Consultant Business Intelligence
    Inscrit en
    Novembre 2005
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant Business Intelligence

    Informations forums :
    Inscription : Novembre 2005
    Messages : 284
    Points : 186
    Points
    186
    Par défaut
    Ok merci, pour le redimmenssionement j'ai procédé de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    ///<summary>Changes the device with new settings.</summary>
    publicvoid ChangeDevice(PresentParameters pP)
    {
    if (device != null)
    {
    if (myMesh != null)
    {
    myMesh.Dispose();
    myMesh = null;
    }
    device.Dispose();
    device = null;
    }
    try
    {
    device = newDevice(0, DeviceType.Hardware, this.Handle,
    CreateFlags.SoftwareVertexProcessing, pP);
    }
    catch (DirectXException)
    {
    thrownewDirectXException("Unable to create the Direct3D device.");
    }
    
    meshMaterial.Ambient = Color.Blue;
    meshMaterial.Diffuse = Color.Blue;
    myMesh = Mesh.Torus(device, 0.25f, 0.5f, 20, 20);
    }
    
    Maintenant mon problème est que j'aimerai ajouter de la couleur a mon mesh. j'aimerai bien qu'ils soit bleu mais je vois pas trop comment faire je pense qu'il faut utiliser les material.

    Mais lorsque je lance le programme le mesh est noir

Discussions similaires

  1. [C#][DirectX] Probleme affichage Meshes
    Par Malko06 dans le forum Moteurs 3D
    Réponses: 2
    Dernier message: 07/02/2008, 11h08
  2. Réponses: 2
    Dernier message: 03/06/2006, 00h34
  3. directx managed primitive point
    Par t-die dans le forum DirectX
    Réponses: 2
    Dernier message: 03/05/2006, 13h14
  4. Conseil bon bouquin DirectX (managé)
    Par Sphax dans le forum DirectX
    Réponses: 2
    Dernier message: 13/03/2006, 12h41
  5. Réponses: 4
    Dernier message: 18/08/2003, 09h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo