Debut de moteur d'affichage opengl avec rendu de skybox

Soyez le premier à donner votre avis sur cette source.

Vue 9 839 fois - Téléchargée 3 102 fois

Description

C'est vraiment le debut d'un moteur d'affichage en openGL
On peut afficher des surfaces rectangulaires et triangulaires texturées, en peut faire le rendu d'une skybox
La gestion du clavier et de la souris est integrée, le deplacement est le meme que dans les FPS classiques.
Dans le zip il y a le programme avec un exemple d'affichage d'une maison et d'une skybox et d 'un plan incliné, regardez le screen.
Le niveau est initialement chargé d'apres un fichier, il n'est plus codé en hard
La gestion des collisions avec le sol et les plan inclinés marche

Source / Exemple :


//==> ZIP
//Les textures ne pouvant pas rentrer dans le zip je vous invite a telecharger 
//le projet complet avec les textures ici 
//"http://maegisinstinct.free.fr/OpenGL%20Texture.rar"

//Je met 2 ou 3 bouts de code 

////////////////////////////////////////////////////
//Ma classe de camera

#include <windows.h>
#include <gl\glu.h>

#define PI 3.14159f

#ifndef CAMERA		//pour eviter les redefinitions
#define CAMERA

#define UP		0		//Flag pour les translations
#define LEFT	2
#define JUMP	4

#define GROUND_ARG_SIZE		10			//taille pour les tableau 2d
#define WALL_ARG_SIZE		9
#define TRIANGLE_ARG_SIZE	13
#define JUMP_INC			0.08f

/*--------------------------------------------------------------*/
//Classe de camera qui gerera les rotations et les translations
/*--------------------------------------------------------------*/
class Camera
{
	float	X,Y,Z;							//position de la camera
	float	Xlook,Ylook,Zlook;				//position du point ou l'on regarde
	float	Xvertical,Yvertical,Zvertical;	//coords de la verticale
	float	angleXZ;						//longitude		(coords spheriques)
	float	angleXY;						//latitude
	float	rayon;							//rayon

	int nbGrounds;							//Nombre desurfaces pour la gestion des collisions
	int nbWalls;
	int nbTriangles;

	void CalculCoords();				//Calcule le point que l'on vise en fonction des angles

public:

	int*	Grounds[GROUND_ARG_SIZE];		//Va contenir les caracteristiques des surfaces
	int*	Walls[WALL_ARG_SIZE];
	float* Triangles[TRIANGLE_ARG_SIZE];
	int skybox[7];

	~Camera(void);									//destructeur
	void SetCamera(float tab[11]);

	void PlaceCamera()					//set la camera
	{
		gluLookAt(X,Y,Z,Xlook,Ylook,Zlook,Xvertical,Yvertical,Zvertical);
	};

	void Setnb(int ng,int nw,int nt)
	{
		nbGrounds = ng;
		nbWalls = nw;
		nbTriangles = nt;
	};

	void RotateCamera(char axex,char axey,float angle);		//gere les rotations
	void TranslateCamera(int flag,float inc);				//gere les translations
	void Paint(HDC);												//fonction de dessin
	BOOL CollisionGround();									//gere les collisions avec le sol
	BOOL CollisionWall();									//gere les collisions avec les murs
};

Conclusion :


J'ai pris les textures de bois et de brique sur la source de djl : Labyrinthe 3d
Et les textures de la skybox on été prises sur le CD d'un numero de Coder

Ma classe camera va etre renomée, elle gere aussi bien la camera que les collisions et contient la structure du niveau

Je vais essayer progressivement rajouter :
-la gestion des collisions des murs et des plans tres inclinés
-regrouper les infos dans un fichier ini
-gerer le jump et le crouch
-essayer de mettre des models
-affichage des sprites
-gerer la lumiere [...]

Je vais essayer de faire un max pendant ces vacances parce qu'apres le projet ne pourra pas avancer tres vite

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Maegis
Messages postés
101
Date d'inscription
vendredi 15 février 2002
Statut
Membre
Dernière intervention
6 août 2007
-
Non, aucun probleme de lock avec ma camera à ma connaissance.
Sinon pour glut c'est simplement que je suis pas trop fan, mais c'est sur que la comme je l'ai fait c'est pas portable sous un autre OS du coup ^^
Utilisateur anonyme -
bonjour

Je vois que tu as fait une caméra en opengl dans ton programme. Je vais jeter un coup d'oeil à tes sources. As-tu des problèmes de "gimbal lock"? J'essaie de me fabriquer une caméra depuis 2 mois sans succès. Ca marche un peu mais ça me crée des rotations indésirables. J'ai essayé de faire une caméra d'Euler (qui marche en déplacement centré en 0) puis une caméra UVN et enfin j'ai fait 2 caméras à base de quaternions...toujours le même problème. Pourquoi n'as-tu pas utilisé la glut? Ce serait plus portable, non?
cppdupdup34
Messages postés
212
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
13 mai 2006
-
danke
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
5 -
cppdupdup34
Messages postés
212
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
13 mai 2006
-
juste un truc dans le source que tu a posté il y a pas les textures
le prog me dis

"Il manque des textures"
"elles doivent se trouver dans le repertoire texture"

:-)

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.