Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MOTEUR 3D ISOMÉTRIQUE EN OPENGL


Information sur la source

Catégorie :OpenGL Classé sous : isométrique, 3d, opengl, tgaloader, 2d Niveau : Initié Date de création : 11/09/2005 Date de mise à jour : 02/10/2005 13:35:31 Vu / téléchargé: 12 250 / 1 108

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (20)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
c'est un programme en 2D donnant l'impression de relief grace à la 3D isometrique( comme SimCity)
Fonctionnalités :Gestion du Terrain (gràce à des tableaux indiquant les tiles(la nature du tarrain) les objets(arbres batiments) et le relief
                 Commencement d'une interface utilisateur ( Théme de l'interface : Stargate)
                 Sauvegarde des map en binaire
 

Conclusion

il y a un probléme : c'est que la case qui est censé être sous la souris est décalé et je ne comprends pas pourquoi ... c'est surement tout bête alors si quelqu'un pouvait regarder un peu le code pour identifier le probléme

Merci au createur de hotpot2 : cela m'a servi de base et j'ai employé le systéme d'ecriture
Merci au createur de TGALoader : Funto
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   prog
    • arbre.tgaTélécharger ce fichier [Réservé aux membres club]16 428 octets
    • chevron_f.tgaTélécharger ce fichier [Réservé aux membres club]4 140 octets
    • chevron_n.tgaTélécharger ce fichier [Réservé aux membres club]4 140 octets
    • chevron_o.tgaTélécharger ce fichier [Réservé aux membres club]4 140 octets
    • error.tgaTélécharger ce fichier [Réservé aux membres club]4 140 octets
    • FONT.TGATélécharger ce fichier [Réservé aux membres club]131 116 octets
    • height.datTélécharger ce fichier [Réservé aux membres club]4 096 octets
    • herbe.tgaTélécharger ce fichier [Réservé aux membres club]16 402 octets
    • hotpot2.dspTélécharger ce fichier [Réservé aux membres club]Voir ce fichier4 224 octets
    • main.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier23 101 octets
    • map.datTélécharger ce fichier [Réservé aux membres club]4 096 octets
    • O_Stargate.tgaTélécharger ce fichier [Réservé aux membres club]16 428 octets
    • object.datTélécharger ce fichier [Réservé aux membres club]4 096 octets
    • sable.tgaTélécharger ce fichier [Réservé aux membres club]4 844 octets
    • SGT.dswTélécharger ce fichier [Réservé aux membres club]Voir ce fichier539 octets
    • SGT.exeTélécharger ce fichier [Réservé aux membres club]172 032 octets
    • Stargate_f.tgaTélécharger ce fichier [Réservé aux membres club]16 428 octets
    • Stargate_n.tgaTélécharger ce fichier [Réservé aux membres club]16 428 octets
    • Stargate_o.tgaTélécharger ce fichier [Réservé aux membres club]16 428 octets
    • TGALoader.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier6 559 octets
    • TGALoader.hTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 620 octets
    • tile.datTélécharger ce fichier [Réservé aux membres club]4 096 octets

Télécharger le zip

Historique

02 octobre 2005 13:35:31 :
Ajout du même Programme avec GLUT (il n'affiche que le Backcolor, si quelqu'un sait pourquoi merci de poster un commentaire)

Commentaires et avis

signaler à un administrateur
Commentaire de Mattpbem le 11/09/2005 19:12:14

je mets ce commentaire pour avoir la notificaiton par e-mail
n'hesitez pas à poster ;°)

signaler à un administrateur
Commentaire de MuPuF le 11/09/2005 20:50:35

tu peux dire dans tes parametres de compte de recevoir un email quand on ajoute un commentaire a ta source. On se demande quel type de jeu tu va faire mdr. Vive stargate. je vais regarder ton code.

signaler à un administrateur
Commentaire de MuPuF le 11/09/2005 20:58:37

il faut glut.h, je vais ça apres manger, mais la capture a l'air pas mal. Le code est bien structuré, le seul reproche qu'on peux faire c'est le manque de commentaire (meme si ça me parait clair a moi qui n'ait jamais fais de 3D avec glut) et le fait que tu commentes des lignes de code au milieu de nulle part, en général commenter des lignes c'est une solution de debug rapide, mais c'est pas grave ... bravo, ça m'a l'air vraiment tres bien

signaler à un administrateur
Commentaire de MoDDiB le 12/09/2005 11:22:06

Le code est immangeable ; par exemple au lieu de
case 1023 :
il serait préférable de mettre
( tout en haut )
#define ALLER_A_DROITE 1023
case ALLER_A_DROITE
Tu devrais aussi mettre dans des fichiers différents pour une meilleure lisibilité

Ca permettra 2 choses : la premières c'est que tu auras vraiment envie de trouver de toi même d'ou vient le bug
et surtout que si tu ne trouves pas et bien quelqu'un aura envie de le faire !
Parce que la c'est beaucoup trop brouillon :/ mais c'est un bon début ! ( d'ailleurs enlève le code de la catégorie initié :))

signaler à un administrateur
Commentaire de Kirua le 12/09/2005 12:48:56

euhm, pour compléter ce que disait MoDDiB, laisse tomber les define, fais plutôt ceci:

enum
{
   ALLER_A_DROITE,
   ALLER_A_GAUCHE,
   ALLER_CHEZ_MAMAN,
   //...
};

ça a l'avantage d'affecter des valeurs constantes différentes à chaque nom que tu mets dans la déclaration du enum (tu tappes ça dans un en-tête). si tu veux rajouter un élément quelque part dans la liste, toutes les constantes seront modifiées en conséquence, c'est très propre et rapide. si t'as pas compris parce que je parle en brouillon, dis-le ;)

je vais regarder ton code moi :)

signaler à un administrateur
Commentaire de Kirua le 12/09/2005 19:09:08

Bon, j'ai regardé le tout début du code, et je vois que tu connaissais les enum, donc ça c'est fait ^^ juste que:

typedef enum {
   MAX_ID = 1,
  
} button_id;

c'est la syntaxe C-like. En C++, on préfère:

enum button_id
{
   MAX_ID = 1
};

et puis, si tu n'as qu'une constante, préfère ceci:
const int MAX_ID = 1;

aussi, tes define et include:

#include "time.h"

on écrit: #include <ctime>

#define PI 3.1415926535897932384626433832795f  // ca ira comme ca non? pour le -f ne me demandez pas

le f précise que c'est un flottant simple précision (float) par opposition aux flottants double précision (double). ceci dit, PI est déclaré dans l'en-tête <cmath> comme M_PI, et si tu ne veux pas inclure cmath, faire ceci:
const float PI = 3.1415927f;
suffira largement, puisque les flottants ne sont pas précis au-delà de 6 décimales (déjà 4-5 décimales c'est sportifs ...)

#define Blend_ON    {glEnable(GL_BLEND);glDisable(GL_DEPTH_TEST);}  // fondu de couleurs activé ...
#define Blend_OFF   {glDisable(GL_BLEND);glEnable(GL_DEPTH_TEST);}  // ... ou desactivé
#define Alpha_ON    {glEnable(GL_ALPHA_TEST);glDisable(GL_DEPTH_TEST);}  // fondu de couleurs activé ...
#define Alpha_OFF   {glDisable(GL_ALPHA_TEST);glEnable(GL_DEPTH_TEST);}  // ... ou desactivé

pour ce genre de chose, où tu fais des macros, càd quand tu veux que la macro soit remplacée par son code équivalent, en C++ on préfère des fonctions inline. avantage: c'est une vraie fonction, que le compilo peut vérifier (error checking etc), et c'est exactement la même chose que des macros dans l'exe à la fin. attention, à réserver à des petites fonctions comme ici:

inline void BlendOn()
{
    glEnable(GL_BLEND);
    glDisable(GL_DEPTH_TEST);
}

et pareil pour les autres. tu peux bien sûr séparer déclaration de la fonction et implémentation de celle-ci, comme d'hab. c'est vraiment mieux d'utiliser les inline par rapport aux macros, crois-moi, le compilateur peut beaucoup mieux s'en occuper.

sinon, question: c'est quoi la différence entre alpha et blend?

typedef enum {
   TILE = 1,
   OBJECT = 2,
   RELIEF,

   MAX_X = 32,
   MAX_Y = 32,
   MAX = 32,
} tableau;

je pense pas que ce soit fait pour ça les enums. les enums c'est plus pour réunir des cas "mutuellement exclusifs" dans un ensemble (une énumération). préfère ici des déclarations de constantes séparées, comme j'ai montré plus haut avec le mot clef const. pour "tile", "object" et "relief", ça peut rester dans un enum bien sûr, ça c'est logique. note: tu ne dois pas préciser 1 et 2: le standard prévoit que ça commence à 1 et que ça incrémente de 1 à chaque nouveau mot, sauf si tu forces une valeur, et alors il commence à partir de cette valeur et chaque fois +1.

int s_width=1024,s_height=768;  // taille de l'écran!

ce sont des constantes ou tu peux modifier la taille de la fenêtre pendant l'exécution? sinon, const int ...

autre chose: ton "32" revient partout (taille des tiles?). préfère un
const int TILE_SIZE = 32;
comme ça tu changes facilement, et le résultat dans l'exe est le même: pas de perte de perf.

j'ai pas franchement regardé le reste sinon, je vais essayer de compiler ça avec G++ quand même. si je bronche plus, c'est que ça a marché ;)

excellent choix que le loader de Funto :-D

signaler à un administrateur
Commentaire de Kirua le 12/09/2005 19:24:01

Euh, en fait c'est vraiment le bordel dans tes règles de lieur et dans tes include :D

tu inclus deux fois ctime, et deux fois mal ^^ deux fois cstdio et deux fois mal aussi, c'est:

#include <ctime>
#include <cstdio>
#include <cstdlib>
#include <cmath>
...

d'une manière générale, les en-têtes standard C++ ne portent pas d'extension .h, et les en-têtes standards C importés en C++ prennent un "c" devant leur nom et pas l'extension non plus.

quant au liage, tu inclus et lie glut et tu lies glaux, mais tu n'utilises aucun des deux: vire moi ça :)

je vais essayer de voir si je m'y retrouve dans ton bordel pour ton histoire de sélection de case, mais c'est pas gagné, j'appuie les autres quand ils disent que c'est le bordel :p je salue ta capacité à travailler là-dedans, c'est admirable :) mais je trouve très très positif que t'aies posté ton code, parce qu'on pu te faire qq remarques sans grande importance, ça t'aidera pour la prochaine fois j'imagine, et ton code fonctionne alors :)

signaler à un administrateur
Commentaire de Kirua le 12/09/2005 19:39:19

je suis (presque) sincèrement désolé de multiplier les posts, mais tu as ça dans ton code:

void DrawCursor() {
glPointSize(8.0);
glPushMatrix();
glBegin(GL_POINTS);
glColor3f (0.0, 1.0, 1.0);
glVertex2f (cursor.x, cursor.y);
glEnd();
glPopMatrix();
}

bon, outre le fait que pour l'indentation c'est pas encore ça (^_^), c'est les push/pop matrix qui m'embêtent. pusher et poper la matrice c'est ce qu'on fait pour sauvegarder la matrice courante quand on veut la modifier provisoirement. or ici, tu ne modifies pas la matrice, donc t'as pas besoin de la sauvegarder. tu peux virer les push/pop, parce que c'est quand même pas bénin comme opération de copier une matrice, de l'empiler et puis de la dépiler pour rien. tu devrais aussi remettre le glPointSize à 1 je pense. si cursor.x / .y sont des int, tu dois faire ça:
glVertex2i et pas glVertex2f, mais j'ai pas vérifié, juste un soupçon. la lettre à la fin indique le type des paramètres, et f = float, i = entier (d = double d'ailleurs).


Et maintenant, une bonne grosse tarte à la crême du C :) l'erreur qu'on fait TOUS (aller, peut-être que john carmack ne l'a pas faite, et encore ... j'ai un sérieux doute):

char* color;
if(color=="white") ...

(dans glPrint())

ça ça va être un peu plus long à expliquer :D c'est archi faux en fait, mais t'en fais pas, tu comprendras obligatoirement plus vite que moi, c'est statistique ;).

color est un POINTEUR sur un caractère (char). "white" est une (désolé) "expression littérale constante" créée par le compilateur, rien que pour toi pour la comparaison. en gros, tu compares un pointeur (un entier, une adresse mémoire) avec qqch d'incompatible. pour une raison qui m'échappe, G++ ne gueule pas quand on écrit ça ... mais ce test est VOUÉ à retourner false à chaque fois. ce qu'il faut faire, c'est comparer les caractères de color (qui est l'adresse du premier élément d'un tableau de caractères en réalité) avec ceux de "white", et pour ça on écrit ceci:

strcmp(première chaine, deuxième chaine) == 0

si strcmp renvoie 0, c'est que les deux chaînes sont identiques, je te passe les détails. fais une recherche google pour voir l'usage.

bon, ça c'est la méthode C ... et strcmp se trouve dans l'en-tête <cstring> (ce qui n'a rien à voir avec #include <string>, fais gaffe ^^ string c'est l'en-tête standard C++).

J'ai pas trop envie de te parler de std::string ici, mais sache juste ceci: pour les couleurs comme ça, on va de préférence utiliser un enum, parce que c'est bcp bcp bcp plus rapide! comparer des chaînes de caractère c'est LENT, comparer des nombres, qui plus est des nombres constants, c'est rapide comme l'éclaire :)

enum EColor
{
  BLEU, VERT, JAUNE, MAUVE, ROUGE, ...............
};

glPrint(float x, float y, EColor clr, double size, const char *string, ...)
{
  switch(clr)
  {
   case BLEU: glColor4f(...); break;
   case VERT ...
   ...
   default: ...
  }
}

voilà, t'as franchement beaucoup intérêt à faire comme ça :).

au fait:

    if (color=="white")  glColor3f(1.0f, 1.0f, 1.0f);
    if (color=="red")    glColor3f(1.0f, 0.0f, 0.0f);
    if (color=="green")  glColor3f(0.0f, 1.0f, 0.0f);
    if (color=="blue")   glColor3f(0.4f, 0.4f, 1.0f);
    if (color=="yellow") glColor3f(1.0f, 1.0f, 0.0f);
    if (color=="cyan")   glColor3f(0.0f, 1.0f, 1.0f);
    if (color=="purple") glColor3f(1.0f, 0.0f, 1.0f);

ça s'écrit comme ça:

    if (color=="white")  glColor3f(1.0f, 1.0f, 1.0f);
    else if (color=="red")    glColor3f(1.0f, 0.0f, 0.0f);
    else if (color=="green")  glColor3f(0.0f, 1.0f, 0.0f);
    else if (color=="blue")   glColor3f(0.4f, 0.4f, 1.0f);
    else if (color=="yellow") glColor3f(1.0f, 1.0f, 0.0f);
    else if (color=="cyan")   glColor3f(0.0f, 1.0f, 1.0f);
    else if (color=="purple") glColor3f(1.0f, 0.0f, 1.0f);
    //et éventuellement:
    else ... (cas par défaut)

bien sûr en remplaçant les color == "..." par un strcmp() == 0, ou plus classiquement if(!strcmp(...)).

j'espère que le message est passé :) jamais plus faire color == "..." ;)

signaler à un administrateur
Commentaire de Kirua le 12/09/2005 19:47:36

un dernier et puis je regarde plus ton code ;)

if (up==true) { Scroll(0,MOUSE_Y); }
if (down==true) { Scroll(s_height-1,MOUSE_Y); }
if (lft==true) { Scroll(0,MOUSE_X); }
if (rght==true) { Scroll(s_width-1,MOUSE_X); }

if (button[1]==true && lbutton == true && cursor.x<768) DrawMap(mapx,mapy,SABLE,TILE);
if (button[2]==true && lbutton == true && cursor.x<768) DrawMap(mapx,mapy,ARBRE,OBJECT);

if(up) suffit, car ce qui compte c'est la condition, et up est une condition en soi. pareil pour if(down), pareil pour if(button[1] && lbutton && ...)

et soit dit en passant, le 768 a rien à faire là, tu as déclaré les dimensions de l'écran en haut de fichier, utilise la variable "hauteur écran" (je connais plus le nom).

signaler à un administrateur
Commentaire de MoDDiB le 12/09/2005 22:21:36

Kirua t'en vacances ? T'as pas de projet ? T'as fais pleins de bétises et tu veux te faire pardonner ?

signaler à un administrateur
Commentaire de Kirua le 12/09/2005 22:25:11

Mouarf, ben oui je suis en vacances, mais ceci dit, je fais plein de choses, tjs mille projets en cours, ah et puis ma vie sociale aussi ;). Ceci dit, pour une raison ou une autre, j'ai pas pu ne pas dire tout ça ... il a 14 ans, et il fait les mêmes fautes que moi à son âge ^_^ ça a dû m'attendrire :D.
Et toi, des projets en cours? Dans quelques mois on se revoit à Lille ;) J'espère que les dates tomberont bien ...

signaler à un administrateur
Commentaire de Mattpbem le 17/09/2005 20:35:46

merci beaucoup kirua ! j'ai pas eu internet pendant quelque jours et depuis le temps j'ai crée un fichier main.h pour mes constantes et j'ai verifié mes includes, je vais faire avec les <c...>, j'avais déja tout remplacé par des enums : vu que j'ai recupéré des morceaux de codes certains commentaires ne sont pas de moi (ex: la def du PI): en ce moment j'ai un petit probléme :  j'ai voulu utiliser la creation de Windows de Glut et ces callbacks, le code compile bien mais il ne m'affiche plus que le clearcolor à l'ecran,je connais pas trés bien glut alors je me demande si il arrive bien a travaillé avec les fonctions OpenGl de base. je ne suis pas sur Internet avec le même disque dur que celui oû il y a le code (à cause d'un probléme Internet) mais je vais essayer de l'updater dans la semaine à suivre

signaler à un administrateur
Commentaire de Kirua le 18/09/2005 00:02:43

A priori il n'y a pas de problème de compatibilité glut / opengl, puisque glut se contente d'ouvrir une fenêtre. Tiens nous au courant ^^.

signaler à un administrateur
Commentaire de kami_kenjin le 21/09/2005 07:42:24

lol. J'aime bien ce site. Je débute dans le code en C dans mes études, mais à mon avis ça ne suffira pas. Je vais m'y mettre dès à présent. Vous avez des bon tuyaux à me présenter ? ;)
Des sources faciles pour le moment avec des commentaires et tout ?

Merci beaucoup ;)

signaler à un administrateur
Commentaire de Mattpbem le 02/10/2005 13:39:59

le zip est devenu trop gros : il est maintenant disponible sur :
http://matt2000.free.fr/prog/SGT.zip
la version avec gLUT ne marche pas : ce serai bien si quelqu'un pouvait m'aider et me dire Pourquoi ???

signaler à un administrateur
Commentaire de Mattpbem le 07/10/2005 16:01:45

J'ai essayé le programme avec GLUT,SDL,WINAPI et ca ne marche toujours pas(le projet est maintenant multi-Librairie, il n'y a qu'un define à changer pour utiliser une autre librairie) alors que l'ancienne version qui est en lien sur le zip marche : la nouvelle addresse est http://matt2000.free.fr/all.rar il y a aussi d'autres zips qui ne reprennent que les DLLs ou le Programme seul

signaler à un administrateur
Commentaire de Mattpbem le 09/10/2005 14:17:14

le code a été un millier de fois et pas une seule note T_T
sinon le le rar c'est http://matt2000.free.fr/All.rar faut pas oublier la majuscule

signaler à un administrateur
Commentaire de Mattpbem le 09/07/2006 22:07:23

j'ai crée un nouveau moteur 2.5d
il fonctionne en perspective dimétrique et permet l'inclinaison et la rotation ainsi que le loading des textures en tga,png & jpg
allez le voir sur : http://www.cppfrance.com/code.aspx?ID=38507

signaler à un administrateur
Commentaire de sasuk13 le 27/09/2006 21:12:38

svp je cherche des personne pour créer un mmorpg en 3d isometrique ajouter moi sasuk13@hotmail.fr

signaler à un administrateur
Commentaire de Kirua le 28/09/2006 13:05:55

PUISSANT ! :D

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Objects 3D Opengl [ par mastave ] Comment inclure dans un fenêtre OpenGl un fichier 3D DXF ou3DS??? Moteur 3d OpenGL [ par Stormy ] Salut. Je recherche des personnes motives pour travailler sur un moteur 3d sous OpenGL. Les bases sont deja etablies (Detection de collisions, sons, m OpenGl et objets 3D [ par mshn ] bonjour, est ce qu'on peux céer des objets 3D sous OpenGl, et les manipuler (animer et déplacer) par programme en utilisant un environnement de C++ ? Moteur 3D isométrique [ par cyberlewis ] Slt,J'ai réalisé le début d'un moteur de jeu 3D isométrique (tiles 64x32), mais je n'arrive pas du tout à gérer le scrolling ...Ou puis-je trouve svp Coord 2D to 3D [ par bat67000 ] Comment optenir d'un point 2D sur l'app les coordonnees du point 3D associé avec la matrice de projection ?(je pige pas bien comment fonctionne la mat Charger un model 3D en C++ avec opengl [ par smoove5198 ] Bonjour,j'essaye depuis un moment de charger un model 3D avec opengl en C++, pour ca j'utilise le seul format de fichier que je connaisse et dont j'ai de la 3d a la 2d [ par azkab ] bonjour tt le monde,dans mon projet j ai un nombre de primitives (rectangles, cercles, polygones, lignes..) que j ai modelisé en 2d. je stock leur con comment ecrire le plus simplement en opengl? [ par zarbiman ] salut, je commence en opengl sous visual c++ (pas la peine de critiquer, je sais que c'est moins bien que gc++ ou turbo c++, mais je debute), et j'ai allegroGL ... [ par screamX ] Je me tate en se moment pour développer un apps en 2D + 3D...je sais pas trop qu'elle lib utiliser... je 'maitrise' allegro mais la 3D c'est pas son f Projet OpenGl [ par barraq ] salut,Voila j'ai un projet a faire pour ma fac, je doit réaliser tout un environement 3d en opengl .Je doit pouvoir me deplacer dans une map donnée et


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 1,014 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.