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

 Java Discussion :

Comment créer un bruit de Perlin


Sujet :

Java

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 162
    Points : 73
    Points
    73
    Par défaut Comment créer un bruit de Perlin
    Bonjour,

    je dois coder un jeu en java, j’utilise Graphics2D (je crois qu’on l’appel comme ça). Je sais que certains me diront que c’est de loin le meilleur moyen de créer un jeu, mais je n’ai pas le temps d’en apprendre un nouveau et le jeu que je dois réaliser est en 1D (si ça veut dire quelque chose).

    J’ai vu l’article de Jérémy Cochoy sur le bruit de Perlin. Malheureusement, je suis bloqué à la première étape, mon code est le suivant :
    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
    package Terrain;
     
    import java.awt.Color;
    import java.awt.Graphics;
     
    public class Terrain{
     
    	public Terrain(){
     
     
    	}
     
    	public void draw(Graphics g){
     
    		g.setColor(Color.GREEN);
    		for(int i = 0 ; i < 640 ; i++){
    			g.drawLine(i, (int)dessinTerrain(x), i+1, (int)dessinTerrain(x+1));
    		}
    	}
     
            public double dessinTerrain(int x){
            return (Math.cos(x*7)*Math.sin(x/4)+5);
            }
     
     
    }
    Le problème est que la courbe s’affiche, mais tout en haut de l’écran et n’est pas très variante vers le bas ou vers le haut.

    Merci pour vos futures réponses.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 980
    Points
    7 980
    Par défaut
    C'est normal que ca ne "varie" pas beaucoup tu as utiliser une multiplication de sinus sans mettre de facteur (ce qui fait que tu auras un interval qui va de -1 a 1).

    Ensuite tu n'as décalér la courbe que de 5 pixel (donc 5 pixel en dessous du dessus du composant).

    Après une petite correction du code voici ce que tu pourrais utiliser :

    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
    import java.awt.Color;
    import java.awt.EventQueue;
    import java.awt.Graphics;
     
    import javax.swing.JFrame;
     
     
    public class okok extends JFrame
    {
    	/**
             * Launch the application.
             */
    	public static void main(String[] args)
    	{
    		EventQueue.invokeLater(new Runnable()
    		{
    			public void run()
    			{
    				try
    				{
    					okok frame = new okok();
    					frame.setVisible(true);
    				} catch (Exception e)
    				{
    					e.printStackTrace();
    				}
    			}
    		});
    	}
     
    	/**
             * Create the frame.
             */
    	public okok()
    	{
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setSize(640, 480);
    	}
     
    	@Override
    	public void paint(Graphics g)
    	{
    		g.setColor(Color.GREEN);
    		for (int i = 0; i < 640; i++)
    		{
    			g.drawLine(i, (int) dessinTerrain(i), i + 1, (int) dessinTerrain(i + 1));
    		}
    	}
     
    	public double dessinTerrain(int x)
    	{
    		return 10 * (Math.cos(x * 7) * Math.sin(x / 4)) + getHeight()/2.0;
    	}
     
    }
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 162
    Points : 73
    Points
    73
    Par défaut
    Oh, merci pour cette réponse, je la testerai sûrement ce soir, sinon demain; pour l'instant c'est pas possible.
    On m'a aussi parlé de la méthode Graphics.quadTo(...) ; est elle aussi efficace voire plus?

    Merci.

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 980
    Points
    7 980
    Par défaut
    QuadTo pour faire du bruit de perlin ??? J'ai dut louper un chapitre
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 162
    Points : 73
    Points
    73
    Par défaut
    Ah non, pas pour Perlin, mais pour une autre méthode de courbe pseudo-aléatoire en général.

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 980
    Points
    7 980
    Par défaut
    Si tu parles de quadTo venant de https://docs.oracle.com/javase/7/doc...om/Path2D.html ça ne sert qu'a dessiner une courbe (entre autres). Pas de générer quoique ce soit d'aléatoire... ou en gros ça pourrait remplacer le drawline pour avoire un "signal plus doux" et non lineaire comme avec le drawline. (non visible si la fréquence du signal est elevée).
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 162
    Points : 73
    Points
    73
    Par défaut
    Oui, la méthode que tu m'as passé fonctionne. Néanmoins, j'essaie de la rendre aléatoire. Mais si j'écris x = (int)(Math.random() *100)+1; par exemple, la courbe ne ressemble plus à une courbe... J'ai l'impression que la courbe est aléatoire à un moment donné puis est différente à un autre moment, mais en plein affichage.

    ici mon main et mon paint de ma classe principale :

    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
    public void paint(Graphics g){
    		//g.setColor(new Color(168,219,234));
    		g.setColor(Color.WHITE);
    		g.fillRect(0, 0, getWidth(), getHeight());
     
    		terrain.draw(g);
    		tank.draw(g);
     
    		g.dispose();
    		repaint();
    	}
     
    	public static void main(String[] args){
    		Affichage affichage = new Affichage();
    		JFrame frame = new JFrame("Jeu");
    		frame.add(affichage);
    		frame.pack();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setResizable(false);
    		frame.setVisible(true);
    	}

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 162
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par wax78 Voir le message
    Si tu parles de quadTo venant de https://docs.oracle.com/javase/7/doc...om/Path2D.html ça ne sert qu'a dessiner une courbe (entre autres). Pas de générer quoique ce soit d'aléatoire...
    Si je place un point aléatoire, alors la courbe crée le sera.

    Edit : Bon, même si le sujet est pas vraiment résolu, je le ferme.

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

Discussions similaires

  1. [FLASH 5] Comment créer un lien hypertexte
    Par ajit dans le forum Flash
    Réponses: 4
    Dernier message: 30/03/2006, 12h26
  2. Comment créer des barres de Menu ?
    Par MoKo dans le forum IHM
    Réponses: 5
    Dernier message: 30/07/2003, 14h58
  3. Comment créer un nouveau dossier par programmation ?
    Par annecyrond dans le forum Langage
    Réponses: 3
    Dernier message: 27/03/2003, 07h59
  4. Comment créer et executer un .EXE
    Par maher12 dans le forum Flash
    Réponses: 3
    Dernier message: 26/09/2002, 08h33
  5. [] [Stratégie] Comment créer un fichier log
    Par Skeezo dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 16/09/2002, 18h30

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