begin process at 2012 05 30 00:31:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

OpenGL

 > 

OpenGL (glut) & rafraichissement par rapport à un array


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

OpenGL (glut) & rafraichissement par rapport à un array

mardi 6 octobre 2009 à 22:14:35 | OpenGL (glut) & rafraichissement par rapport à un array

BirD

Hello tout le monde,

Je débute avec Glut et j'ai une petite question concernant le rafraichissement d'une animation.

J'ai fait un petit algo de percolation (le grand classique : une foret qui brule). Cet algo consiste en la mise à jour d'une matrice N * N (N = 700 dans mon cas). Chaque case de la matrice contient soit :
- 0 : pas d'arbre
- 1 : un arbre
- 2 : un arbre qui brule
- 3 : un arbre qui a brulé

Au fur et à mesure de l'algo, la matrice évolue, des arbres brulent, d'autre cessent, etc. Mon objectif est de représenter cette évolution avec openGL (via glut). 1 pixel = 1 arbre.

J'ai donc d'un coté mon algo et d'un autre un fichier que j'ai nommé draw.h qui s'occupera de la représentation graphique. J'aimerais faire en sorte que chaque fois que je parcours ma matrice (pour mettre à jour la progression du feu), alors l'image se mette à jour. J'appelle donc la fonction suivante à chaque boucle :
Code C/C++ :
int draw(int argc, char **argv, int *vlat,const int &vlx, const int &vly)

ou
- *vlat est un pointeur sur ma matrice
- vlx = vly = N
Mais mon problème est que l'image générée est statique... aucune évolution.

Voici le code de draw.h (il y a encore quelque trucs moche car c'est un brouillon)

Code C/C++ :
#include <iostream>
#include <cstdlib>
#include <gl/glut.h>
using namespace std;

// function prototypes
void disp(void);
int xmax, ymax, *lat;

// window identifier
static int win;

void timer(int extra)
	{
	glutpostredisplay();
	gluttimerfunc(30,timer,0);
	}

int draw(int argc, char **argv, int *vlat,const int &vlx, const int &vly){

	//makes the variables global
	xmax = vlx;
	ymax = vly;
	lat = vlat;


	//////////
	// init //
	//////////

	// initialize glut
	glutinit(&argc, argv);
	glutinitdisplaymode(glut_rgba | glut_double);

	// define the size
	glutinitwindowsize(700,700);

	// the position where the window will appear
	glutinitwindowposition(100,100);

	// create the window, set the title and keep the 
	// window identifier.
	win = glutcreatewindow("percolation");

	//////////////
	// callback //
	//////////////

	glutdisplayfunc(disp);

	////////////
	// opengl //
	////////////

	// define the color we use to clearscreen 
	glclearcolor(0.0,0.0,0.0,0.0);
	gluttimerfunc(0,timer,0);

	
	
	// enter the main loop
	glutmainloop();

	return 0;
}


	void disp(void){

		glclear(gl_color_buffer_bit);
		int r[5], g[5], b[5];
		
		//define the colours we will use
		r[0]= 1; g[0]= 1; b[0]= 1; //white
		r[1]= 0; g[1]= 1; b[1]= 0; //green
		r[2]= 1; g[2]= 0; b[2]= 0; //red
		r[3]= 0; g[3]= 0; b[3]= 0; //black

		//begin of drawing
		glbegin(gl_points);
		for (int y=0; y<ymax; y++){
			for (int x=0; x<xmax; x++){
				glcolor3f(r[lat[y*xmax + x]], g[lat[y*xmax + x]],b[lat[y*xmax + x]]);
				glvertex2d(((double)x/xmax*1.8)-0.9,((double)y/ymax*1.8)-0.9);	
			}
		}		 
		glend();
		//glflush();

		glutswapbuffers();
		
		//glutpostredisplay();



	}


En gros, je sais pas comment faire. Si j'appelle draw(...) à chaque parcours de boucle, alors tout l'initialisation se refait (en théorie, car en pratique rien ne se passe). Si j'appelle la fonction disp, rien ne se passe non plus.

Il faudrait appeler draw(....) et que la fonction attendent chaque modification sur la matrice... enfin, j'en ai aucune idée et ca fait trois heures que je poirotte la dessus.

Merci d'avance les collègues

BirD
mercredi 7 octobre 2009 à 17:49:48 | Re : OpenGL (glut) & rafraichissement par rapport à un array

BirD


Hello,

Alors premièrement, oups, je me suis trompé. J'ai posté dans OpenGL/C plutot que OpenGL/C++

Ensuite, j'ai réussi à trouver une solution à mon problème. J'ai finalement créer un objet global percolation que je fais évoluer depuis ma fonction Display, sachant que glutDisplayFunc(Display);

Voila, peut-etre que ca aidera un autre newbe.

++ tous.

BirD


Cette discussion est classée dans : int, draw, matrice, glut, xmax


Répondre à ce message

Sujets en rapport avec ce message

Problème pour dériver une classe [ par arc59 ] J'ai créé une classe Matrice comportant des fonctions get_ele, set_ele (toutes les 2 sont "virtual") et la redéfinition de l'opérateur +.Dans ma class PB de matrice [ par limax84 ] J'ai un probleme d'allocation dynamique de memoire pour une matrice.pour un tableau, je procede comme ceci:int * t;t = new int [30];mais pour une matr Matrice constante. [ par nsoualem ] j'ai crée une classe matrice avec un constructeurdu type:matrice(int nbligne,int nbcolonne)...elle marche a merveille!!!Lors de la création d'un code, Glut et console [ par JoebarGlut ] Salut, eske kelkun sait comment empecher d'avoir la console MS-dos qui s'affiche apres le mode fullscreen de glut ? La console me sert pour entrer un pb de Z-buffer ac openGL -> Help! [ par Arnaud16022 ] bonjour tt le monde!quelqun pourrait me dire pourqoui le Z-buffer marche pas?pasque le dernier (4ème) triangle dessiné apparait tjs au dessus, meme s' créer une fenetre en plus d'une fenetre glut [ par ldllaurent82 ] Bonjour,J'aimerais pouvoir créer un interface (avec boutons et autres) en plus de ma fenetre opengl ouverte avec glut.Le problème c'est que je ne peux fonction et matrice [ par herve_blondel ] bonjour a tous.je suis un debutant en C++ et j'aimerais ecrire un fonction qui prend en argument une matrice et me retourne une matrice(je sais ce que Mélanger OpenGL et Glut [ par tintin72 ] SalutJ'aimerai me servir des fonctions d'entrée clavier/souris proposées par Glut, mais j'ai vu que Glut s'initialise avec une fonction main façon C.i opengl.glut : gestion clavier [ par _Jonathan ] salut a tousvoila, j'arrive pas a utiliser la fonction glutSpecialUpFunc (chui sous devc++).glutSpecialFunc marche.Si kelkun pourrai m'expliker : ---- Multiplication d'une matrice par un scalaire [ par skrime ] Bonjour, j'ai un exercice à faire qui consiste à multiplier une matrice par un scalaire en C (la prof ne veut pas qu'on se serve des boucles FOR), je


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales