Soyer indulgent je debute ! :-)
Compiler avec Visual C++ 6
Source / Exemple :
//******************************************
// Moteur 3d Opengl par Dufour Christophe **
//******************************************
#include <stdio.h>
#include <GL/glut.h>
#include <math.h>
#define PI 3.1415926535898
//***************************
// Prototype des fonctions *
//***************************
void Init();
void Display();
void Reshape(int w, int h);
void Clavier(unsigned char key, int x, int y);
int LoadBMP(char *File);
double a=0,b=-5,angle=0; // Pour la mise au point camera (mouvement)
GLuint Mur,Sol;
//***************************
// Programme Principal *
//***************************
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutCreateWindow("Moteur 3D");
Init();
glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
glutKeyboardFunc(Clavier);
glutMainLoop();
return 0;
}
//***************************
// Definition des fonctions *
//***************************
////////////////////////////////////////////////////////
//LoadBMP : charge une image 24bpp
#define EXIT {fclose(fichier);return -1;}
#define CTOI(C) (*(int*)&C) //récupère en int un nombre pointé par un char*
int LoadBMP(char *File)
{
unsigned char *Data;
FILE *fichier;
unsigned char Header[0x36];
GLuint DataPos,DataSize;
GLint Components;
GLsizei Width,Height;
GLenum Format,Type;
GLuint Name[1];
//Lit le fichier et son header
fichier = fopen(File,"rb");if (!fichier) return -1;
if (fread(Header,1,0x36,fichier)!=0x36) EXIT;
if (Header[0]!='B' || Header[1]!='M') EXIT;
if (CTOI(Header[0x1E])!=0) EXIT;
if (CTOI(Header[0x1C])!=24) EXIT;
//Récupère les infos du fichier
DataPos = CTOI(Header[0x0A]);
DataSize = CTOI(Header[0x22]);
//Récupère les infos de l'image
Width = CTOI(Header[0x12]);
Height = CTOI(Header[0x16]);
Type = GL_UNSIGNED_BYTE;
Format = GL_RGB;
Components = 3;
//!!!!
if (DataSize==0) DataSize=Width*Height*Components;
if (DataPos==0) DataPos=0x36;
//Charge l'image
fseek(fichier,DataPos,0);
Data = new unsigned char[DataSize];
if (!Data) EXIT;
if (fread(Data,1,DataSize,fichier)!=DataSize)
{
delete Data;
fclose(fichier);
return -1;
}
fclose(fichier);
//Inverse R et B
unsigned char t;
for (int x=0;x<Width*Height;x++)
{
t=Data[x*3];
Data[x*3]=Data[x*3+2];
Data[x*3+2]=t;
}
//Envoie la texture à OpenGL
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
glGenTextures(1, Name);
glBindTexture(GL_TEXTURE_2D, Name[0]);
glTexImage2D
(
GL_TEXTURE_2D, //target
0, //mipmap level
Components, //nb couleurs
Width, //largeur
Height, //hauteur
0, //largeur du bord
Format, //type des couleurs
Type, //codage de chaque composante
Data //Image
);
return Name[0];
}
///////////////////////////
void Init()
{
glClearColor(0.0,0.0,0.0, 0.0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR);
glEnable(GL_TEXTURE_2D);
}
void Display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(a, 6, b, a+(sin(angle)), 6, b+(cos(angle)), 0.0, 1.0, 0.0); // point de vue visé grace a l'angle
Mur = LoadBMP("Texture.bmp");
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
/*glRotated(a,0,1,0);
glRotated(b,1,0,0);
a+=2;
b+=1.6;
glBegin(GL_QUADS);
glColor3d(1,0,0);glVertex3i(1,5,1);
glColor3d(0,1,0);glVertex3i(1,3,1);
glColor3d(0,0,1);glVertex3i(-1,3,1);
glColor3d(1,0,1);glVertex3i(-1,5,1);
glColor3d(1,1,0);glVertex3i(1,5,-1);
glColor3d(0,1,1);glVertex3i(1,3,-1);
glColor3d(1,0,0);glVertex3i(-1,3,-1);
glColor3d(1,1,1);glVertex3i(-1,5,-1);
glColor3d(1,0,0);glVertex3i(1,5,1);
glColor3d(0,1,0);glVertex3i(1,3,1);
glColor3d(0,1,1);glVertex3i(1,3,-1);
glColor3d(1,1,0);glVertex3i(1,5,-1);
glColor3d(1,0,1);glVertex3i(-1,5,1);
glColor3d(0,0,1);glVertex3i(-1,3,1);
glColor3d(1,0,0);glVertex3i(-1,3,-1);
glColor3d(1,1,1);glVertex3i(-1,5,-1);
glColor3d(1,1,1);glVertex3i(-1,5,-1);
glColor3d(1,0,1);glVertex3i(-1,5,1);
glColor3d(1,0,0);glVertex3i(1,5,1);
glColor3d(1,1,0);glVertex3i(1,5,-1);
glColor3d(1,0,0);glVertex3i(-1,3,-1);
glColor3d(0,0,1);glVertex3i(-1,3,1);
glColor3d(0,1,0);glVertex3i(1,3,1);
glColor3d(0,1,1);glVertex3i(1,3,-1);
glEnd();
// Dessin de la scene
/*glBegin(GL_QUADS);
// 1ere face
glColor3d(1,0,0);
glVertex3i(0,2,0);
glVertex3i(1,2,0);
glVertex3i(1,3,0);
glVertex3i(0,3,0);
//2eme face
glColor3d(0,1,0);
glVertex3i(0,3,0);
glVertex3i(0,3,1);
glVertex3i(1,3,1);
glVertex3i(1,3,0);
//3eme face
glColor3d(0,0,1);
glVertex3i(1,3,0);
glVertex3i(1,3,1);
glVertex3i(1,2,1);
glVertex3i(1,2,0);
//4eme face
glColor3d(1,0,1);
glVertex3i(0,2,0);
glVertex3i(0,2,1);
glVertex3i(1,2,1);
glVertex3i(1,2,0);
//5eme face
glColor3d(1,1,0);
glVertex3i(0,2,1);
glVertex3i(0,3,1);
glVertex3i(1,3,1);
glVertex3i(1,2,1);
//6eme face
glColor3d(0,1,1);
glVertex3i(0,2,0);
glVertex3i(0,3,0);
glVertex3i(0,3,1);
glVertex3i(0,2,1);
glBegin(GL_QUADS);
// Les 4 murs
glColor3d(0.5,0.5,0.5);
glTexCoord2i(0,0);glVertex3i(-30,0,-30);
glTexCoord2i(5,0);glVertex3i(-30,0,30);
glTexCoord2i(5,5);glVertex3i(-30,30,30);
glTexCoord2i(0,5);glVertex3i(-30,30,-30);
glTexCoord2i(0,0);glVertex3i(-30,0,30);
glTexCoord2i(5,0);glVertex3i(30,0,30);
glTexCoord2i(5,5);glVertex3i(30,30,30);
glTexCoord2i(0,5);glVertex3i(-30,30,30);
glTexCoord2i(0,0);glVertex3i(30,0,30);
glTexCoord2i(5,0);glVertex3i(30,0,-30);
glTexCoord2i(5,5);glVertex3i(30,30,-30);
glTexCoord2i(0,5);glVertex3i(30,30,30);
glTexCoord2i(0,0);glVertex3i(-30,0,-30);
glTexCoord2i(5,0);glVertex3i(30,0,-30);
glTexCoord2i(5,5);glVertex3i(30,30,-30);
glTexCoord2i(0,5);glVertex3i(-30,30,-30);
glEnd();
Sol = LoadBMP("Sol.bmp");
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glBegin(GL_QUADS);
// Le sol
glColor3d(0.5,0.5,0.5);
glTexCoord2i(0,0);glVertex3i(-50,0,-50);
glTexCoord2i(5,0);glVertex3i(-50,0,50);
glTexCoord2i(5,5);glVertex3i(50,0,50);
glTexCoord2i(0,5);glVertex3i(50,0,-50);
glEnd();
glutSwapBuffers();
glutPostRedisplay();
}
void Reshape(int w, int h)
{
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity(); // Vide la matrice
gluPerspective(45,float(w)/float(h),0.01,100);
glMatrixMode(GL_MODELVIEW); // Pour revenir toujours a ModelView
}
void Clavier(unsigned char key, int x, int y)
{
// sin et cos marche pas en degré mais en radian
// marche avant
if (key==27) exit(0); // Touche echap
if (key=='t')
{
a=a-0.3*cos((PI/2)+angle); // D'apres trigo : x=-1*cos a
b=b+0.3*sin((PI/2)+angle); // D'apres trigo : y=1*sin a
}
// marche arriere
if (key=='g')
{
a=a+0.3*cos((PI/2)+angle); // Inverse de marche avant
b=b-0.3*sin((PI/2)+angle);
}
// tourner a gauche
if (key=='f')
{
angle=angle+PI/60; // Angle permet de calculer sin et cos du point de visé
}
// tourner a droite
if (key=='h')
{
angle=angle-PI/60;
}
}
14 févr. 2006 à 15:39
14 févr. 2006 à 15:38
28 oct. 2005 à 12:00
mais le fait qu'il charge a chaque frame la texture ca vous choque pas?
18 déc. 2004 à 22:39
Integrated Development Environment
Kif kif bouriko.
"Si on prend le compilateur de VB (Pascal ou je ne sais quoi)"
Pascal, à ma connaissance du moins, c'est un langage de programmation, pas un compilateur VB.
"DevC++ et OpenGl s'est moin bon en Fps que avec vc++7 avec DirectX et opengl"
Mais c'est ce que je viens de dire dans mon message: tu mets ce que tu veux comme compilo avec ce que tu veux comme EDI/IDE, ça ne tient qu'à toi (et à ton budget). Dev-C++ ça n'a jamais compilo le moindre code-source, ça ne fait qu'appeler le compilo que tu lui indiques. Aucun rapport quoi.
17 déc. 2004 à 10:12
Et se que je voulais dire est que l'on peu choisir n'importe quelle language le plus important est le compilateur.
Si on prend le compilateur de VB (Pascal ou je ne sais quoi) il sera assez performant pour de petite application, petit utilitaire, mais souvent les petits jeunes l'oubli et se tape des moteurs 3D en VB résultat les jeux tourn a 25 Fps au lieux de 60 a 70 fps.
Vc++ 6 ou 7 non pas le même compilateur ni devc++ ni bc++ ... Il sont spécifique a chacun, je ne suis pas un pro des compilateurs mais se que j'en est retenu s'est qu'avec DevC++ et OpenGl s'est moin bon en Fps que avec vc++7 avec DirectX et opengl voila mon avis, après tous le monde prend se qu'il veu comme il veu !
Thyraël
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.