begin process at 2012 05 27 18:58:09
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

.Net

 > NOUVELLE VERSION DE "JEU DE LUMIÈRE" EN OPENGL

NOUVELLE VERSION DE "JEU DE LUMIÈRE" EN OPENGL


 Information sur la source

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :.Net Classé sous :jeudelumière, lumière, opengl Niveau :Initié Date de création :01/09/2003 Date de mise à jour :02/09/2003 02:56:57 Vu / téléchargé :8 195 / 332

Auteur : Arkain

Ecrire un message privé
Site perso
Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note

 Description

J'ai essayé des rajouter des entrez sortie avec les clavier et la souris. Sa a marché, mais bon, comme je suis pas sur que ça marcheà tout les ordinateur, j'attend vos commentaires.

j'ai essayé de mettre quelque petit commentaires, mais bon je sais pas si ils vous aident vraiment.

Juste les fonction sont:
Esc pour sortir
w/s pour une teillère (Solid ou Wire)
x/d pour une sphère (Solid ou Wire)
c/f pour un cube (Solid ou Wire)
v/g pour un cone (Solid ou Wire)
b/h pour un Dodecahedron (Solid ou Wire)
n/j pour un Octahedron (Solid ou Wire)

Cliquer dans les coins avec la souris pour quelque changement de couleur du fond.  

Source

  • #include <gl/glut.h>
  • #include <math.h>
  • ////////////////////////////////////////////////////////
  • //Fenêtre GLUT
  • int Win;
  • double a=0,b=0,z=5;
  • //Fonction d'initialisation
  • void InitGL();
  • //Fonction de redimensionnement
  • void Reshape(int w,int h);
  • //Fonction de dessin
  • void Draw();
  • float MatSpec[4] = {1.f,1.f,1.f,1.f};
  • float MatDif[4] = {.8f,.8f,.5f,1.f};
  • float MatAmb[4] = {.8f,.8f,.5f,1.f};
  • int LightPos[4] = {0,0,2,0};
  • float LightDif[4] = {.6f,1.f,1.f,1.f};
  • float LightSpec[4] = {.6f,1.f,1.f,1.f};
  • float LightAmb[4] = {.0f,.0f,1.1f,1.f};
  • int type;
  • bool rouge=false;
  • #define RESO_X 640
  • #define RESO_Y 480
  • #define RESO_BIT 16
  • #define RESO_REF 60
  • #define WIDTH 640
  • #define HEIGHT 480
  • ////////////////////////////////////////////////////////
  • //souris
  • void Mouse(int button, int state, int x, int y)
  • {
  • if(state==GLUT_UP)
  • {
  • if(x<=100 && y<=100)
  • {
  • if(rouge==false)
  • {
  • glClearColor(1,1,0,1);
  • rouge=true;
  • }
  • else
  • {
  • glClearColor(2,0,1,1);
  • rouge=false;
  • }
  • }
  • if(x>=600 && y>=400)
  • {
  • if(rouge==false)
  • {
  • glClearColor(0,0,1,1);
  • rouge=true;
  • }
  • else
  • {
  • glClearColor(0,0,0,1);
  • rouge=false;
  • }
  • }
  • }
  • }
  • //clavier
  • void Clavier(unsigned char key, int x, int y)
  • {
  • switch(key) {
  • case 'm':
  • z++;
  • break;
  • case 'p':
  • z--;
  • break;
  • case 'w':
  • type = 2;
  • break;
  • case 's':
  • type = 1;
  • break;
  • case 'x':
  • type = 3;
  • break;
  • case 'd':
  • type = 4;
  • break;
  • case 'c':
  • type = 5;
  • break;
  • case 'f':
  • type = 6;
  • break;
  • case 'v':
  • type = 7;
  • break;
  • case 'g':
  • type = 8;
  • break;
  • case 'b':
  • type = 9;
  • break;
  • case 'h':
  • type = 10;
  • break;
  • case 'n':
  • type = 11;
  • break;
  • case 'j':
  • type = 12;
  • break;
  • case 27:
  • exit (0);
  • break;
  • }
  • }
  • int main( int argc, char *argv[ ])
  • {
  • glutInit(&argc,argv);
  • glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH );
  • glutInitWindowSize(WIDTH,HEIGHT);
  • glutInitWindowPosition(50,50);
  • Win=glutCreateWindow("Figures, couleurs, lumières");
  • glutReshapeFunc(Reshape);
  • glutDisplayFunc(Draw);
  • InitGL();
  • glutKeyboardFunc(Clavier);
  • glutMouseFunc(Mouse);
  • glutMainLoop();
  • return 0;
  • }
  • ////////////////////////////initialisation
  • void InitGL()
  • {
  • glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,MatSpec);
  • glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,MatDif);
  • glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,MatAmb);
  • glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,50);
  • glLightfv(GL_LIGHT0,GL_DIFFUSE,LightDif);
  • glLightfv(GL_LIGHT0,GL_SPECULAR,LightSpec);
  • glLightfv(GL_LIGHT0,GL_AMBIENT,LightAmb);
  • glEnable(GL_DEPTH_TEST);
  • glEnable(GL_LIGHTING);
  • glEnable(GL_LIGHT0);
  • glMatrixMode(GL_MODELVIEW);
  • glPointSize(3);
  • }
  • ////////////////////////////taille de la fenetre
  • void Reshape(int w,int h)
  • {
  • glViewport(0,0,w,h);
  • glMatrixMode(GL_PROJECTION);
  • glLoadIdentity();
  • gluPerspective(45.,float(w)/float(h),0.1,200);
  • glMatrixMode(GL_MODELVIEW);
  • }
  • ////////////////////////////
  • void Draw()
  • {
  • glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  • //gestion de la lumière//
  • glLoadIdentity();
  • glTranslated(0,0,-z);
  • glRotated(-2*a,0,1,0);
  • glRotated(-3*b,1,0,0);
  • glLightiv(GL_LIGHT0,GL_POSITION,LightPos);
  • //creation d'un point representant la position de la lumiere//
  • glDisable(GL_LIGHTING);
  • glBegin(GL_POINTS);
  • glVertex3iv(LightPos);
  • glEnd();
  • glEnable(GL_LIGHTING);
  • //fin//
  • //creation d'une figure "glut"//
  • glLoadIdentity();
  • glTranslated(0,0,-z);
  • glRotated(a,0,1,0);
  • glRotated(b,0,1,1);
  • switch(type)
  • {
  • case 2:
  • glutWireTeapot(1);
  • break;
  • case 1:
  • glutSolidTeapot(1);
  • break;
  • case 3:
  • glutWireSphere(1,50,50);
  • break;
  • case 4:
  • glutSolidSphere(1,50,50);
  • break;
  • case 5:
  • glutWireCube(1);
  • break;
  • case 6:
  • glutSolidCube(1);
  • break;
  • case 7:
  • glutWireCone(0.2,2,50,50);
  • break;
  • case 8:
  • glutSolidCone(0.2,2,50,50);
  • break;
  • case 9:
  • glutWireDodecahedron();
  • break;
  • case 10:
  • glutSolidDodecahedron();
  • break;
  • case 11:
  • glutWireOctahedron();
  • break;
  • case 12:
  • glutSolidOctahedron();
  • break;
  • }
  • //fin//
  • b+=2;
  • a+=1;
  • glutSwapBuffers();
  • glutPostRedisplay();
  • }
#include <gl/glut.h>
#include <math.h>



////////////////////////////////////////////////////////


//Fenêtre GLUT
int		Win;
double		a=0,b=0,z=5;
//Fonction d'initialisation
void	InitGL();
//Fonction de redimensionnement
void	Reshape(int w,int h);
//Fonction de dessin
void	Draw();

float MatSpec[4] = {1.f,1.f,1.f,1.f};
float MatDif[4] = {.8f,.8f,.5f,1.f};
float MatAmb[4] = {.8f,.8f,.5f,1.f};
int   LightPos[4] = {0,0,2,0};
float LightDif[4] = {.6f,1.f,1.f,1.f};
float LightSpec[4] = {.6f,1.f,1.f,1.f};
float LightAmb[4] = {.0f,.0f,1.1f,1.f};
int type;
bool rouge=false;


#define RESO_X		640
#define RESO_Y		480
#define RESO_BIT	16
#define RESO_REF	60
#define WIDTH 640
#define HEIGHT 480	

////////////////////////////////////////////////////////
//souris
void Mouse(int button, int state, int x, int y)
{
if(state==GLUT_UP)
    {
        if(x<=100 && y<=100)
        { 
            if(rouge==false)
            {
                glClearColor(1,1,0,1);
                rouge=true;
            }
            else
            {
                glClearColor(2,0,1,1);
                rouge=false;
            }
        }
        if(x>=600 && y>=400)
        { 
            if(rouge==false)
            {
                glClearColor(0,0,1,1);
                rouge=true;
            }
            else
            {
                glClearColor(0,0,0,1);
                rouge=false;
            }
        }
    }
} 

//clavier
 
void Clavier(unsigned char key, int x, int y) 
{
  switch(key) {
  case 'm': 
    z++;
    break;
  case 'p': 
    z--;
  break;
  case 'w': 
    type = 2;
  break;
  case 's': 
    type = 1;
  break;
  case 'x': 
    type = 3;
  break;
  case 'd': 
    type = 4;
  break;
  case 'c': 
    type = 5;
  break;
  
  case 'f': 
    type = 6;
  break;
  case 'v': 
    type = 7;
  break;
  case 'g': 
    type = 8;
  break;
  case 'b': 
    type = 9;
  break;
    case 'h': 
    type = 10;
  break;
  case 'n': 
    type = 11;
  break;
  case 'j': 
    type = 12;
  break;
  case 27: 
    exit (0);
  break;
  }
}



int main( int argc, char *argv[ ])
{
	glutInit(&argc,argv);
	glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH );
    glutInitWindowSize(WIDTH,HEIGHT);
	glutInitWindowPosition(50,50);	
    Win=glutCreateWindow("Figures, couleurs, lumières");
	
	
	glutReshapeFunc(Reshape);
	glutDisplayFunc(Draw);
	InitGL();
	glutKeyboardFunc(Clavier);
	glutMouseFunc(Mouse); 

    glutMainLoop();

	return 0;

}


////////////////////////////initialisation

void	InitGL()
{
	glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,MatSpec);
	glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,MatDif);
	glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,MatAmb);
	glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,50);
	glLightfv(GL_LIGHT0,GL_DIFFUSE,LightDif);
	glLightfv(GL_LIGHT0,GL_SPECULAR,LightSpec);
	glLightfv(GL_LIGHT0,GL_AMBIENT,LightAmb);
	
	glEnable(GL_DEPTH_TEST);
	glEnable(GL_LIGHTING);
	glEnable(GL_LIGHT0);
	glMatrixMode(GL_MODELVIEW);

	glPointSize(3);
}


////////////////////////////taille de la fenetre


void	Reshape(int w,int h)
{
	glViewport(0,0,w,h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(45.,float(w)/float(h),0.1,200);
	glMatrixMode(GL_MODELVIEW);
}


////////////////////////////


void	Draw()
{
	glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
	
	//gestion de la lumière//
	glLoadIdentity();
	glTranslated(0,0,-z);
	glRotated(-2*a,0,1,0);
	glRotated(-3*b,1,0,0);
	glLightiv(GL_LIGHT0,GL_POSITION,LightPos);
	
	//creation d'un point representant la position de la lumiere//

	glDisable(GL_LIGHTING);
	glBegin(GL_POINTS);
	 glVertex3iv(LightPos);
	glEnd();
	glEnable(GL_LIGHTING);
	
	//fin//
	//creation d'une figure "glut"//
 
    glLoadIdentity();
	glTranslated(0,0,-z);
	glRotated(a,0,1,0);  
	glRotated(b,0,1,1);
    switch(type)
    {
    case 2:
    glutWireTeapot(1);
    break;

    case 1:
    glutSolidTeapot(1);
    break;

    case 3:
    glutWireSphere(1,50,50);
    break;

    case 4:
    glutSolidSphere(1,50,50);
    break;

    case 5:
    glutWireCube(1);
    break;

    case 6:
    glutSolidCube(1);
    break;

    case 7:
    glutWireCone(0.2,2,50,50);
    break;

    case 8:
    glutSolidCone(0.2,2,50,50);
    break;

    case 9:
    glutWireDodecahedron();
    break;

    case 10:
    glutSolidDodecahedron();
    break;

    case 11:
    glutWireOctahedron();
    break;

    case 12:
    glutSolidOctahedron();
    break;
	
}
	
	//fin//
	
	b+=2;
	a+=1;
	glutSwapBuffers();
	glutPostRedisplay();
}  

 Conclusion

Ok, j'ai changé le zip aussi. tout beigne.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • GLU32.DLLTélécharger ce fichier [Réservé aux membres club]139 712 octets
  • glut32.dllTélécharger ce fichier [Réservé aux membres club]172 032 octets
  • main.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier4 693 octets
  • main.oTélécharger ce fichier [Réservé aux membres club]7 392 octets
  • Makefile.winTélécharger ce fichier [Réservé aux membres club]740 octets
  • snake.devTélécharger ce fichier [Réservé aux membres club]854 octets
  • snake.exeTélécharger ce fichier [Réservé aux membres club]108 172 octets
  • snake.layoutTélécharger ce fichier [Réservé aux membres club]189 octets

Télécharger le zip


 Sources du même auteur

Source avec Zip ARCHITECTURE COMMENTÉ DU PROJET NETAIM (NET ARTIFICIAL INTEL...
Source avec Zip DLL SCIENTIFIQUE, COMPILÉE AVEC VISUAL C++ 6
Source avec Zip UN T'CHAT EN C/C++
Source avec Zip WIN32 COMBINÉ AVEC GLUT...
Source avec Zip JEU DE LUMIÈRE AVEC GLUT

 Sources de la même categorie

Source avec Zip Source avec une capture ANALYSEUR LEXICAL par Donald180v
Source avec Zip Source avec une capture MAP_MAKER_JEU par seekplus
Source avec Zip Source avec une capture Source .NET (Dotnet) EMISSION D'UN OCTET SUR LE PORT SÉRIE - CLASSE SERIALPORT par jmchatelet01
Source avec Zip Source .NET (Dotnet) RESOLV EQU DE DEGRES N par darckangel731
Source avec Zip Source avec une capture Source .NET (Dotnet) INTEROP XCHAT / .NET : CHARGEUR DE PLUGINS MANAGÉS par TeBeCo

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture AFFIMOFF : UNE VISIONNEUSE 3D AVEC PARAMÉTRISATION ET TEXTUR... par pgl10
Source avec Zip Source avec une capture AFFICHER DES COURBES DE BEZIER par shorzy
Source avec Zip Source avec une capture BASE/MOTEUR 3D EN QT/OPENGL (COMPLET ET FONCTIONNEL!) POUR U... par envi33
Source avec Zip Source avec une capture MINIGOLF 3D EN OPENGL par mat74
Source avec Zip JEU DE LUMIÈRE AVEC GLUT par Arkain

Commentaires et avis

Commentaire de Kirua le 01/09/2003 20:19:31

utilise plutôt un switch pour définir quel objet dessiner. Comme ceci:

switch(type)
{
    case 2:
     glutWireTeapot(1);
     break;
    case 1:
     glutSolidTeapot(1);
     break;
    
    //......................

   default:
    //dessiner l'objet par défaut
}

ce sera qd même plus court. Aussi, sache que pr toutes les instructions du genre if, else, for, while, ..., s'il n'y a qu'une instruction dans le bloc, les parenthèses sont facultatives, donc tu aurais pu mettre ceci:

    if(type == 2)
     glutWireTeapot(1);
    if(type == 1)
     glutSolidTeapot(1);
    if(type == 3)
     glutWireSphere(1,50,50);
    if(type == 4)
     glutSolidSphere(1,50,50);
    if(type == 5)
     glutWireCube(1);
    if(type == 6)
     glutSolidCube(1);
    if(type == 7)
     glutWireCone(0.2,2,50,50);
    if(type == 8)
     glutSolidCone(0.2,2,50,50);
    if(type == 9)
     glutWireDodecahedron();
    if(type == 10)
     glutSolidDodecahedron();
    if(type == 11)
     glutWireOctahedron();
    if(type == 12)
     glutSolidOctahedron();

tu peux évidemment mettre la condition et l'instruction sur la même ligne (  if(condition) instruction;  )

voilà, je pense que c bon à savoir pr la clarté du code. Attention, une fonction qui n'a qu'une seule instruction doit qd meme etre limitée par des { }.

Commentaire de Arkain le 01/09/2003 20:33:56

Hum ok merci...mais bon, j'arrive plus a y voir clair quand c'est comme ça. Mais je peu changer le code si vous voulez. Quat au switch je n'y avait pas pensé!!

Commentaire de JCDjcd le 01/09/2003 22:52:39

Pour aller plus vite il faut faire :
if
else if
else if
...
else

car si type = par exemple 7, il ne vaut pas 12, forcement, alors pourquoi faire le teste ?

Commentaire de Kaid le 01/09/2003 22:53:24

Donc mettre deux switchs est la meilleure solution.

Commentaire de Arkain le 02/09/2003 00:46:37

Ok, je vais mettre 2 switch.

Commentaire de Arkain le 02/09/2003 01:11:23

Voila, le code est changé, mais je n'est pas encore eu le temps de changer le zip.

Commentaire de gillig le 02/09/2003 18:56:35

Je propose d'utiliser une table de correspondance touche-&gt;typeDeFigure, je trouve ça plus facile à lire (c'est plus concis), et aussi à faire évoluer :

- ajouter #include &lt;string.h&gt;
- ajouter une variable globale (puisque il y en a déjà...) : char mapping[256]; // 256=nb de valeurs possibles de l'unsigned char de la fonction Clavier

- dans l'init, ajouter l'initialisation de la table :
memset(mapping, 0, 256); // On remplit de zéros
mapping['w'] = 2; // correspondance touche -&gt; type
mapping['s'] = 1;
mapping['x'] = 3;
mapping['d'] = 4;
mapping['c'] = 5;
mapping['f'] = 6;
mapping['v'] = 7;
mapping['g'] = 8;
mapping['b'] = 9;
mapping['h'] = 10;
mapping['n'] = 11;
mapping['j'] = 12;
etc...

- remplacer la fonction Clavier par :
void Clavier(unsigned char key, int x, int y)
{
if (key == 27) exit(0);

if (key == 'm') { z++; return; }
if (key == 'p') { z--; return; }

char res = mapping[key];
if (res) // on ne modifie le type que si la touche est dans la table
type = (int) res;
}


Commentaire de Arkain le 02/09/2003 21:09:14

dsl, mais je ne connais pas la fonction mapping (je vient de l'apprednre grace a toi) et bon...bin patiente

Commentaire de Arkain le 07/09/2003 06:23:07

Ok, j'ai compris la. Je vais voir ce que je peu y faire.

Commentaire de Maegis le 16/09/2003 18:36:50

Une petite capture serait la bienvenue

Commentaire de Arkain le 23/09/2003 02:48:56

...pourquoi?

Commentaire de satellite34 le 23/09/2005 00:25:37

magnifique!

J' ai trop kiffé la teillére !

par contre ché pas si c'est moi mais les mouvements par rapport a la souris sont pas la ou peu cohérents

@+
ROOT_DIEU

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

[OpenGL] manque de lumière [ par asmanur ] Bonjour,En ce moment je travaille sur un prog de shoot à la 1e personne et lorsque des persos tire(Bot ou humain) une lumière s'allume et le prob :Ope Lumière OpenGL [ par PiX3L ] Salut,j'ai un problème avec les lumières d'openGL. Je m'explique : je réalise un fps en 3D. Mes murs sont des simples polygones auquels j'ajoute une t Lois de diffusion de la lumière [ par gilimcce ] Les lois proposées par OpenGl ne sont pas satisfaisantes dans le cas de mon études :Quelqu'un aurait-il une idée pour soit :coder la loi en question ( Lightmaps OpenGL [ par manolobis ] Bonjour, Après avoir épuisé les ressources de la gestion des lumières sous openGL (Windows / Dev++) qui sont trop limitées pour mon application je m gestion de la lumière [ par widwid ] bonjourje dois représenter une surface avec opengl ,j'ai déjà réussi à fabriquer les triangles qui forment la surface mais le rendu est très mauvais ( Problème de Link OpenGL [ par drummaniac ] Salut à tous!Encore un problème d'OpenGL...J'ai étudié les textures grâce au fabuleux site NeHe. Mais je voudrais maintenant implanter tout ça dans mo [Builder] Comment ouvrir une fenetre OpenGL à partir d'un simple bouton [ par drummaniac ] Bonjour à tous!Comme l'indique le titre de ce post, je voudrai savoir comment faire pour ouvrir une fenêtre OpenGL à partir d'une autre fenêtre. Autre Probleme application OpenGL/GLUT [ par zaraki21 ] Bonjour,actuellement en stage, je développe une application C++ utilisant OpenGL et GLUT. Mon programme lit des données à partir d' un fichier et génè POO C++ /openGL /avec win32 ....HELP [ par plasttoon ] comme sa fait un bout que je suis pas venus ici je ne sais pas si sa vas tomber dans le bon forum. voilas, je me suis taper une excellente lecture ht urgent probleme avec extention Opengl sous VC++ 2008 [ par gabriell ] bonjour voila j'ai un ptit moteur de jeu que jai converti vers visula C++ 2008 je suis sous win32 jutilise les extention mutly texturing de opengl ma


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,780 sec (4)

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