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

XNA/Monogame Discussion :

Tatonnement sur la 3D


Sujet :

XNA/Monogame

  1. #1
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut Tatonnement sur la 3D
    Bonjour à tous.

    J'avance doucement sur un autre tuto pour mettre en oeuvre de manière embryonnaire de la 3D.

    Là, je sèche sur l'implantation de deux triangle avec la méthode TraingleFan.
    Alors l'adresse du tuto suivi pour avoir une vue d'ensemble :
    http://msmvps.com/blogs/valentin/arc...et-effets.aspx.

    Et en bas de message le code complet de l'unique classe du projet.

    Voyons plus précisement l'endorit où je plante :
    Dans l'initialize je place des vertices à base d'un tableau de Vector3. Tant que j'en mets 3 et je dis de me faire un seul triangle, tout va bien.
    Dés que j'en mets un 4 et je dis de me faire deux triangles, j'ai plus rien du tout dans ma fenêtre, juste le fond bleu !!!
    Et je comprends pas pourquoi, je vois pas où je me plante. J'ai dessiné sur papier quadrillé mes triangles avec les coordonnées et je vois pas ce qui le perturbe à ce point.

    Pouvez vous m'aider ?




    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Audio;
    using Microsoft.Xna.Framework.Content;
    using Microsoft.Xna.Framework.GamerServices;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Media;
    using Microsoft.Xna.Framework.Net;
    using Microsoft.Xna.Framework.Storage;
     
    namespace Tuto3d2
    {
        /// <summary>
        /// This is the main type for your game
        /// </summary>
        public class Game1 : Microsoft.Xna.Framework.Game
        {
            GraphicsDeviceManager graphics;
            SpriteBatch spriteBatch;
     
            Effect effect;
            VertexPositionColor[] vertices;
     
     
            public Game1()
            {
                graphics = new GraphicsDeviceManager(this);
                Content.RootDirectory = "Content";
                graphics.PreferredBackBufferHeight = 600;
                graphics.PreferredBackBufferWidth = 800;
            }
     
            protected override void Initialize()
            {
                // TODO: Add your initialization logic here
                vertices = new VertexPositionColor[5];
                vertices[0].Position = new Vector3(-0.1f, -0.1f, 0f);
                vertices[0].Color = Color.Yellow;
     
                vertices[1].Position = new Vector3(0.1f, -0.1f, 0f);
                vertices[1].Color = Color.Green;
     
                vertices[2].Position = new Vector3(0.1f, 0.1f, 0f );
                vertices[2].Color = Color.Red;
     
                vertices[3].Position = new Vector3(-0.1f, 0.1f, 0f);
                vertices[3].Color = Color.Blue;
     
                vertices[4].Position = new Vector3(0.2f, 0.2f, 0f);
                vertices[4].Color = Color.Maroon;
     
                base.Initialize();
            }
     
            protected override void LoadContent()
            {
                // Create a new SpriteBatch, which can be used to draw textures.
                spriteBatch = new SpriteBatch(GraphicsDevice);
                this.effect = Content.Load<Effect>("Effect");
     
            }
     
            protected override void UnloadContent()
            {
                // TODO: Unload any non ContentManager content here
            }
     
            protected override void Update(GameTime gameTime)
            {
                // Allows the game to exit
                if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                    this.Exit();
                if (Keyboard.GetState().IsKeyDown(Keys.Escape))
                    this.Exit();
     
                // TODO: Add your update logic here
     
                base.Update(gameTime);
            }
     
            protected override void Draw(GameTime gameTime)
            {
                GraphicsDevice.Clear(Color.CornflowerBlue);
                this.effect.CurrentTechnique=effect.Techniques["Technique1"];
                this.effect.Parameters["World"].SetValue(Matrix.Identity);
                this.effect.Parameters["View"].SetValue(Matrix.CreateLookAt(new Vector3(0, 0, -2), Vector3.Zero, Vector3.Up));
                this.effect.Parameters["Projection"].SetValue(Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, this.GraphicsDevice.Viewport.AspectRatio, 0.1f, 100f)); 
     
                this.effect.Begin();
                foreach (EffectPass pass in this.effect.CurrentTechnique.Passes)
                {
                    pass.Begin();
                    pass.End();
                }
                this.effect.End();
                this.graphics.GraphicsDevice.VertexDeclaration = new VertexDeclaration(this.graphics.GraphicsDevice, VertexPositionColor.VertexElements);
                this.graphics.GraphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleFan, vertices, 0, 3);
     
     
                // TODO: Add your drawing code here
     
                base.Draw(gameTime);
            }
        }
    }
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  2. #2
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Bon, j'ai réussi à avancer pour faire un carré.
    J'ai pas compris pourquoi ni comment, mais en modifiant l'ordre des vertice dans le tableau, j'ai pu faire un carré.

    Maintenant, je voudrais faire une maison, en rajoutant un point pour faire un nouveau triangle au dessus du carré et j'ai donc rajouté un vertex dans le talbleau et j'ai passé à 3 l'ragument des primitives dans le Draw.
    Sauf que là, pas de nouveau triangle et je ne comprends pas pourquoi.

    J'ai beau tourner et retourner les idées dans ma tête je vois pas comment faire pour comprendre ce qu'il veut, ce n'est pas clair du tout, en fait.

    J'ai mis à jour mon code dnas le premier message.

    Pouvez m'expliquer le fonctionnement de ces points pour que je comprennes comment ils doivent être placé pour être ajusté les uns aux autres ?
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Je pense que c'est un problème de backface culling. Mais qu'est ce don au juste ?
    Le backface culling est une optimisation afin de ne dessiner qu'une seule face (sur les deux) du triangle. Pourquoi ? Parce que, si nous prenons un carré, et nous ne plaçons jamais la caméra à l'intérieur, il n'y a pas besoin de dessiner les faces internes de celui-ci. Ainsi, on gagne du temps, car nous ne dessinons pas les faces que nous ne verrons jamais.

    Maintenant, comment cela fonctionne ?
    La carte graphique se base sur l'orientation des triangles. L'orientation est défini par la normale. Le sens (direction) de la normale est définie avec l'ordre des points du triangles. Ainsi, si nous dessinons le triangle dans l'ordre horaire ( bas gauche / haut / bas droite ) la normale sera vers nous. Si nous dessinons dans le sens anti horaire ( haut / bas gauche / bas droit ) alors la normale ira dans l'écran (et le triangle ne sera pas dessiné).

    Bon, retour sur XNA. Soit vous dessiner tout les triangles dans le bon sens (ce qui demande à être stricte dans l'ordre des ponts), soit vous désactivez simplement le backface culling.
    Pour XNA 3.1 -> http://msdn.microsoft.com/en-us/libr....cullmode.aspx
    Pour XNA 4 -> http://msdn.microsoft.com/en-us/libr....cullmode.aspx
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Merci, pour les liens, j'ai compris maintenant.

    Un peu plus de mal avec le bon ordre des points, mais ça devrait le faire, enfin, j'espère.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

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

Discussions similaires

  1. Débat sur l'I.A (Intelligence Artificielle)
    Par Anonymous dans le forum Intelligence artificielle
    Réponses: 457
    Dernier message: 05/07/2016, 01h11
  2. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28
  3. [Kylix] Kylix embarqué sur PDA ?
    Par Anonymous dans le forum NoSQL
    Réponses: 10
    Dernier message: 29/11/2002, 13h59
  4. Réponses: 4
    Dernier message: 27/03/2002, 11h03
  5. F.A.Q, Doc, cours, tutoriels sur JBuilder
    Par Ricky81 dans le forum JBuilder
    Réponses: 0
    Dernier message: 14/03/2002, 15h28

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