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 :

Perlin Noise en C# XNA


Sujet :

XNA/Monogame

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Points : 46
    Points
    46
    Par défaut Perlin Noise en C# XNA
    Salut a tous !


    J'aimerais me lancé dans la génération de terrain par l'algorithme de noise.

    Mais avec tout ce que j'ai vu sur le Web je n'ai pas trouver de tutorial vraiment bien, avec "comment le mettre en place" etc...

    J'ai trouver cet algo sur http://ploobs.com.br/?p=1742

    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace WindowsGame1
    {
        class Class1
        {
            /// Perlin Noise Constructot
            public Class1(int width, int height)
            {
                this.MAX_WIDTH = width;
                this.MAX_HEIGHT = height;                
            }
     
            public int MAX_WIDTH = 256;
            public int MAX_HEIGHT = 256;
     
            /// Gets the value for a specific X and Y coordinate
            /// results in range [-1, 1] * maxHeight
            public float GetRandomHeight(float X, float Y, float MaxHeight,
                float Frequency, float Amplitude, float Persistance,
                int Octaves)
            {
                GenerateNoise();
                float FinalValue = 0.0f;
                for (int i = 0; i < Octaves; ++i)
                {
                    FinalValue += GetSmoothNoise(X * Frequency, Y * Frequency) * Amplitude;
                    Frequency *= 2.0f;
                    Amplitude *= Persistance;
                }
                if (FinalValue < -1.0f)
                {
                    FinalValue = -1.0f;
                }
                else if (FinalValue > 1.0f)
                {
                    FinalValue = 1.0f;
                }
                return FinalValue * MaxHeight;
            }
     
            //This function is a simple bilinear filtering function which is good (and easy) enough.        
            private float GetSmoothNoise(float X, float Y)
            {
                float FractionX = X - (int)X;
                float FractionY = Y - (int)Y;
                int X1 = ((int)X + MAX_WIDTH) % MAX_WIDTH;
                int Y1 = ((int)Y + MAX_HEIGHT) % MAX_HEIGHT;
                //for cool art deco looking images, do +1 for X2 and Y2 instead of -1...
                int X2 = ((int)X + MAX_WIDTH - 1) % MAX_WIDTH;
                int Y2 = ((int)Y + MAX_HEIGHT - 1) % MAX_HEIGHT;
                float FinalValue = 0.0f;
                FinalValue += FractionX * FractionY * Noise[X1, Y1];
                FinalValue += FractionX * (1 - FractionY) * Noise[X1, Y2];
                FinalValue += (1 - FractionX) * FractionY * Noise[X2, Y1];
                FinalValue += (1 - FractionX) * (1 - FractionY) * Noise[X2, Y2];
                return FinalValue;
            }
     
            float[,] Noise;
            bool NoiseInitialized = false;
            /// create a array of randoms
            private void GenerateNoise()
            {
                if (NoiseInitialized)                //A boolean variable in the class to make sure we only do this once
                    return;
                Noise = new float[MAX_WIDTH, MAX_HEIGHT];    //Create the noise table where MAX_WIDTH and MAX_HEIGHT are set to some value>0            
                for (int x = 0; x < MAX_WIDTH; ++x)
                {
                    for (int y = 0; y < MAX_HEIGHT; ++y)
                    {
                        Noise[x, y] = ((float)(StaticRandom.Random()) - 0.5f) * 2.0f;  //Generate noise between -1 and 1
                    }
                }
                NoiseInitialized = true;
            }
     
        }
    }

    Mais bon avec deja une erreur dans les dernieres ligne etc, ca ne donne pas envie de continuer.

    Vous auriez pas un site web avec l'explication du perlin noise, comment ca fonctionne etc ?


    Merci !

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 815
    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 815
    Points : 218 179
    Points
    218 179
    Billets dans le blog
    117
    Par défaut
    Bonjour,

    Il y a ces ressources :
    Introduction au bruit de Perlin
    Génération de terrain par l'algorithme de Perlin
    Génération de textures de terrain


    Après, vous dites avoir une erreur, pouvez vous nous copier le message d'erreur, s'il vous plait.
    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.

Discussions similaires

  1. Générateur de map 2D avec Perlin Noise (Problème)
    Par firepolo dans le forum Création de jeux vidéo
    Réponses: 2
    Dernier message: 23/10/2013, 23h37
  2. [GLSL] perlin noise
    Par venomelektro dans le forum OpenGL
    Réponses: 17
    Dernier message: 17/01/2011, 17h29
  3. Implémentations Perlin Noise
    Par benDelphic dans le forum Contribuez
    Réponses: 2
    Dernier message: 25/07/2010, 14h03

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