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 :

Probleme avec le vertex buffer


Sujet :

DirectX

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 133
    Points : 112
    Points
    112
    Par défaut Probleme avec le vertex buffer
    J'ai un probleme sur ce vertex buffer, kle code est en c# mais je pense que meme un devellopeur c++ pourrait me décaller. J'ai remarqé que c'est lors de l'appel de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    device.DrawPrimitives(PrimitiveType.TriangleList,0,1);
    que ca pose un probleme. Voyez vous quelque chose d'anormal ?

    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
    49
    50
    51
    52
    53
    54
    55
    56
    		public void InitializeGraphics()
    		{
    			// Set our presentation parameters
    			PresentParameters presentParams = new PresentParameters();
     
    			presentParams.Windowed = true;
    			presentParams.SwapEffect = SwapEffect.Discard;
     
    			// Create our device
    			device = new Device(0, DeviceType.Hardware, this,CreateFlags.SoftwareVertexProcessing, presentParams);
    			// Vertex use
    			vb = new VertexBuffer(typeof(CustomVertex.PositionColored), 3, device, Usage.Dynamic |
    				Usage.WriteOnly, CustomVertex.PositionColored.Format, Pool.Default);
    			vb.Created += new EventHandler(this.OnVertexBufferCreate);
    			OnVertexBufferCreate(vb, null);
    		}
     
    		private void OnVertexBufferCreate(object sender, EventArgs e)
    		{
    			VertexBuffer buffer = (VertexBuffer)sender;
     
    			CustomVertex.PositionColored[] verts = new CustomVertex.PositionColored[3];
    			verts[0].SetPosition(new Vector3(0.0f, 1.0f, 1.0f));
    			verts[0].Color = System.Drawing.Color.Aqua.ToArgb();
    			verts[1].SetPosition(new Vector3(-1.0f, -1.0f, 1.0f));
    			verts[1].Color = System.Drawing.Color.Black.ToArgb();
    			verts[2].SetPosition(new Vector3(1.0f, -1.0f, 1.0f));
    			verts[2].Color = System.Drawing.Color.Purple.ToArgb();
     
    			buffer.SetData(verts, 0, LockFlags.None);
    		}
     
    		protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
    		{
    			device.Clear(ClearFlags.Target, System.Drawing.Color.CornflowerBlue, 1.0f, 0);
    			SetupCamera();
     
    			device.RenderState.Lighting = true;
    			device.Lights[0].Type = LightType.Point;
    			device.Lights[0].Position = new Vector3();
    			device.Lights[0].Diffuse = System.Drawing.Color.White;
    			device.Lights[0].Attenuation0 = 0.2f;
    			device.Lights[0].Range = 10000.0f;
    			device.Lights[0].Commit();
    			device.Lights[0].Enabled = true;
     
    			device.RenderState.CullMode = Cull.None;
    			device.BeginScene();
     
    			device.SetStreamSource(0, vb, 0);
    			device.DrawPrimitives(PrimitiveType.TriangleList,0,1);
     
    			device.EndScene();
    			device.Present();
    			this.Invalidate();
    		}

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    bonjour

    J'ai grosso modo le même code pour une de mes appli qui vient du sdk.
    je n'ai rien vu de bizare, j'ai noté une différence ; tu ne fait pas appel aux méthodes Lock() et UnLock() de VertexBuffer, moi si...
    En ce qui me concerne, j'ai eut le plus de problèmes pour me repérer avec les caméras, les distances de visibilité.
    Mon conseil : commencer par des points dont tu as la certitude de leur visibilité et metre en commentaire quelques lignes de code comme la lumière pour vérifier déjà que tu vois bien les points.

    mabu qui reste à l'écoute

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 133
    Points : 112
    Points
    112
    Par défaut
    je veux bien mais mon applic fonctionnait bien avant que je mette des vertex, donc je suppose que ma camera est bien placée. De plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    buffer.SetData(verts, 0, LockFlags.None);
    ne devrait pas reclamer de lock

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Alors je te conseile d'essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       private void OnVertexBufferCreate(object sender, EventArgs e)
          {
             VertexBuffer buffer = (VertexBuffer)sender; 
             CustomVertex.PositionColored[] verts =buffer.Lock(0,0)
             //remplissage de verts[]
             //sans appel à buffer.SetData() 
     
     
             buffer.Unlock();
    }
    je n'ai pas réussi à faire fonctionner SetData
    PS : je n'ai que la version 9b du sdk

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 133
    Points : 112
    Points
    112
    Par défaut
    ca passe pas non plus et j'ai essaye ca aussi mais ca marche tjs pas :
    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
    		private void OnVertexBufferCreate(object sender, EventArgs e)
    		{
    			VertexBuffer buffer = (VertexBuffer)sender;
     
    			GraphicsStream stm = vb.Lock(0, 0, 0);
     
    			CustomVertex.PositionColored[] verts = new CustomVertex.PositionColored[3];		
    			verts[0].SetPosition(new Vector3(0.0f, 1.0f, 1.0f));
    			verts[0].Color = System.Drawing.Color.Aqua.ToArgb();
    			verts[1].SetPosition(new Vector3(-1.0f, -1.0f, 1.0f));
    			verts[1].Color = System.Drawing.Color.Black.ToArgb();
    			verts[2].SetPosition(new Vector3(1.0f, -1.0f, 1.0f));
    			verts[2].Color = System.Drawing.Color.Purple.ToArgb();
    			vb.Unlock(); 
    			//buffer.SetData(verts, 0, LockFlags.None);
    		}
    J'ai regardé la doc de directx pour cet exemple mais ca marche pas

  6. #6
    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 Re: Probleme avec le vertex buffer
    Citation Envoyé par nicoo
    J'ai remarqé que c'est lors de l'appel de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    device.DrawPrimitives(PrimitiveType.TriangleList,0,1);
    que ca pose un probleme.
    Quel genre de problème ? Es-tu sûr que ça vient de là ? Tu as essayé le debug ? Le reference rasterizer ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 133
    Points : 112
    Points
    112
    Par défaut Re: Probleme avec le vertex buffer
    Citation Envoyé par Loulou24
    Citation Envoyé par nicoo
    J'ai remarqé que c'est lors de l'appel de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    device.DrawPrimitives(PrimitiveType.TriangleList,0,1);
    que ca pose un probleme.
    Quel genre de problème ? Es-tu sûr que ça vient de là ? Tu as essayé le debug ? Le reference rasterizer ?
    merci pour ton aide loulou mais j'ai trouve, j'avais oublie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    device.VertexFormat = CustomVertex.TransformedColored.Format;
    bref mnt ca passe mais mon triangle est noir.


    Au fait cest koi le rasterizer ?

  8. #8
    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
    Citation Envoyé par Documentation du SDK DirectX
    Reference Device

    Direct3D supports an additional device type called a reference device or reference rasterizer. Unlike a software device, the reference rasterizer supports every Direct3D feature. Because these features are implemented for accuracy rather than speed and are implemented in software, the results are not very fast. The reference rasterizer does make use of special CPU instructions whenever it can, but it is not intended for retail applications. Use the reference rasterizer only for feature testing or demonstration purposes. To create a reference device, call IDirect3D9::CreateDevice method using D3DDEVTYPE_REF as the device type
    En gros ça te permet de mettre en évidence certaines fausses manips de ta part, ou de voir si le problème vient de ton hardware. Il est toujours utile de tester ton application avec ça lorsque tu as un bug apparemment inexpliqué.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 133
    Points : 112
    Points
    112
    Par défaut
    ou peux tu le trouver? cest fournit avec le sdk ? je suis passé à coté surement si cest le cas.

    Sinon quelqu'un à une idee sur mon triangle qui est noir ?

  10. #10
    Invité(e)
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    device.VertexFormat = CustomVertex.TransformedColored.Format;
    ne correspond pas au format que tu as donné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CustomVertex.PositionColored
    il te faut donc remplacer TransformedColored par PositionColored
    en fait les points que tu défini (vertex) avec PositionColored tu les déclares avec :
    -Une position
    -Une couleur

    Avec TransformedColored, tu définis autre chose qui as comme seul point commun une position. (grosso modo)

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 133
    Points : 112
    Points
    112
    Par défaut
    scuse j'etais pas chez moi quand j'ai ecrit c amais cest ce que je voulais dire mais j'ai toujours pas la couleur par contre si je met mon lighting a false la je l'ai

  12. #12
    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
    Essaie de définir les normales de tes vertices, ça devrait mieux marcher.

    Et puis pour ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    device.Lights[0].Position = new Vector3()
    Même s'il y a des chances que par défaut un Vector3 vale (0, 0, 0), je te conseille de l'écrire explicitement, tu y gagneras en clarté et tu éviteras une future erreur bêbête.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 133
    Points : 112
    Points
    112
    Par défaut
    oué ca c'est plus hard sinon mon probleme est resolu merci a tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec les Vertex Buffer Objects
    Par mysth dans le forum OpenGL
    Réponses: 0
    Dernier message: 18/05/2009, 21h31
  2. Réponses: 3
    Dernier message: 11/04/2006, 09h37
  3. Probleme avec doskey et buffer...
    Par shaiton dans le forum C
    Réponses: 8
    Dernier message: 08/01/2006, 15h59
  4. [VB.NET] Probleme avec un buffer
    Par Aspic dans le forum VB.NET
    Réponses: 1
    Dernier message: 14/12/2005, 16h17
  5. probleme avec le stencil buffer
    Par conrad dans le forum DirectX
    Réponses: 7
    Dernier message: 05/08/2005, 21h48

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