CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

récupérer en openGL des objets gmax

delf__ar
delf__ar
Niveau 7
15 février 2005 à 20:46:07

voila, apres avoir cherché sans arret des loaders pour faire de la 3d en openGL, j´ai trouvé comment récupérer les données de gmax en openGL :
1 : créer un scipt gmax :
voici celui que j´utilise(je me suis inspiré du site http://perso.wanadoo.fr/mickagl/ )

m = snapshotAsMesh selection[1]

for v = 1 to m.numVerts do
(
vert = getVert m v
format " Points: % % % %\n" ( v-1) vert.x vert.y vert.z
)

format " \n"

for f = 1 to m.numFaces do
(
face = getFace m f
format " Faces: % % % %\n" ( f-1) ( face.x as integer - 1) ( face.y as integer - 1) ( face.z as integer - 1)
)

format " \n"

delf__ar
delf__ar
Niveau 7
15 février 2005 à 20:49:22

2 : transformer pour récupérer en openGL
j´ai donc fais un programme(ici personnel) qui transforme les infos en code openGL

  1. include < stdio.h>
  2. include < stdlib.h>
  3. include < math.h>
  4. include < gl\glut.h>
  5. include < string.h>

int index = 0;
int nombrepoint;
float pointx[1000000];
float pointy[1000000];
float pointz[1000000];

int main(){
char NomDuFichier [255];
printf("nom du fichier a convertir : " );
scanf("%s",NomDuFichier);
printf("\n enregistrer sous : " );
FILE *fichierTXT = fopen(NomDuFichier, " r");
char nomfichier [255];
scanf("%s",nomfichier);
FILE *nouveaufichier = fopen(nomfichier,"w");

fprintf(nouveaufichier,"glBegin(GL_TRIANGLES);\n")
;
if(!fichierTXT)
{
printf("erreur");
return false;
}
char Mot[255];
while(!feof(fichierTXT))
{
fscanf(fichierTXT, " %s", &);
if(!strcmp(Mot, " Nombre_de_points:"))
{
fscanf(fichierTXT, " %i",&);
}
else if(!strcmp(Mot, " Points:")){
fscanf(fichierTXT, " %i", &);
fscanf(fichierTXT, " %f %f %f", &[index],
&[index],
&[index]);
}
else if(!strcmp(Mot, " Faces:")){
index = 0;
int face[2];
fscanf(fichierTXT, " %i", &);
fscanf(fichierTXT, " %i %i %i", &[0],&[1],&[2]);
fprintf(nouveaufichier,
"glVertex3f(%f,%f,%f);\n",pointx[face[0]]/100,poin
tz[face[0]]/100,pointy[face[0]]/100);
fprintf(nouveaufichier,
"glVertex3f(%f,%f,%f);\n",pointx[face[1]]/100,poin
tz[face[1]]/100,pointy[face[1]]/100);
fprintf(nouveaufichier,
"glVertex3f(%f,%f,%f);\n",pointx[face[2]]/100,poin
tz[face[2]]/100,pointy[face[2]]/100);
}
}
fclose(fichierTXT);
fprintf(nouveaufichier,"glEnd();");
fclose(nouveaufichier);
system("PAUSE");
return 0;
}

sans oublier de mettre les links dans le projet : -lopengl32 -lglu32 -lglut32

delf__ar
delf__ar
Niveau 7
15 février 2005 à 20:50:00

bon, j´espere que ca intéresse quelqu´un

gollumkawder
gollumkawder
Niveau 10
15 février 2005 à 22:04:52

au s´cour paste ton code sur http://walljv.free.fr

JeanYvesYves
JeanYvesYves
Niveau 10
15 février 2005 à 22:15:41

tres bien :) je crois que créer des scripts est la méthode la plus simple pour récupérer les meshs, c´est comme ça que j´avais fait pour mon ptojet de fin d´étude Canyon Racer. Si tu veux faire du rendu lisse, essaie de récupérer les normales au sommet :)
Sinon, au pire, calcule les ! ça se fait bien !

JeanYvesYves
JeanYvesYves
Niveau 10
15 février 2005 à 22:15:54

Ainsi, si tu peux, les coordonnées de texture :)

delf__ar
delf__ar
Niveau 7
16 février 2005 à 18:02:51

en fait, je peux aussi mettre les coordonées de textures mais alors c´est plus compliquer car je ne sais pas récupérer le nom de la texture mais sinon, je veux bien affichier mon autre code ( si ca t´intéresse, tu peux mettre mon code sur ton site)

delf__ar
delf__ar
Niveau 7
16 février 2005 à 18:03:59

script d´export :
m = snapshotAsMesh selection[1]

for v = 1 to m.numVerts do
(
vert = getVert m v
format " Points: % % % %\n" ( v-1) vert.x vert.y vert.z
)

format " \n"

for f = 1 to m.numFaces do
(
face = getFace m f
format " Faces: % % % %\n" ( f-1) ( face.x as integer - 1) ( face.y as integer - 1) ( face.z as integer - 1)
)

format " \n"

for t = 1 to m.numTVerts do
(
tvert = getTVert m t
format " Textures: % % % %\n" ( t-1) tvert.x tvert.y tvert.z
)

format " \n"

for ft = 1 to m.numFaces do
(
ftvert = getTVFace m ft
format " FaceTextures: % % % %\n" ( ft-1) ( ftvert.x as integer - 1) ( ftvert.y as integer - 1) ( ftvert.z as integer - 1)
)

delf__ar
delf__ar
Niveau 7
16 février 2005 à 18:05:05

programme pour le récupérer :

  1. include < stdio.h>
  2. include < stdlib.h>
  3. include < math.h>
  4. include < gl\glut.h>
  5. include < string.h>

struct face {
float pointx1;
float pointy1;
float pointz1;
float pointx2;
float pointy2;
float pointz2;
float pointx3;
float pointy3;
float pointz3;
}faces[1000000];
int index = 0;
int nombrepoint;
float pointx[1000000];
float pointy[1000000];
float pointz[1000000];
float coordtexx[1000000];
float coordtexy[1000000];
float pointxtex[1000000];
float pointytex[1000000];
float pointztex[1000000];

int main(){
char NomDuFichier [255];
printf("nom du fichier a convertir : " );
scanf("%s",NomDuFichier);
printf("\n enregistrer sous : " );
FILE *fichierTXT = fopen(NomDuFichier, " r");
char nomfichier [255];
scanf("%s",nomfichier);
FILE *nouveaufichier = fopen(nomfichier,"w");

fprintf(nouveaufichier,"glBegin(GL_TRIANGLES);\n")
;
if(!fichierTXT)
{
printf("erreur");
return false;
}
char Mot[255];
while(!feof(fichierTXT))
{
fscanf(fichierTXT, " %s", &);
if(!strcmp(Mot, " Nombre_de_points:"))
{
fscanf(fichierTXT, " %i",&);
}
else if(!strcmp(Mot, " Points:")){
fscanf(fichierTXT, " %i", &);
fscanf(fichierTXT, " %f %f %f", &[index],
&[index],
&[index]);
}
else if(!strcmp(Mot, " Faces:")){
index = 0;
int face[2];
fscanf(fichierTXT, " %i", &);
fscanf(fichierTXT, " %i %i %i", &[0],&[1],&[2]);

faces[index].pointx1 = pointx[face[0]]/1000;
faces[index].pointy1 = pointz[face[0]]/1000;
faces[index].pointz1 = pointy[face[0]]/1000;
faces[index].pointx2 = pointx[face[1]]/1000;
faces[index].pointy2 = pointz[face[1]]/1000;
faces[index].pointz2 = pointy[face[1]]/1000;
faces[index].pointx3 = pointx[face[2]]/1000;
faces[index].pointy3 = pointz[face[2]]/1000;
faces[index].pointz3 = pointy[face[2]]/1000;
}
else if(!strcmp(Mot, " Textures:")){
int index = 0;
float coordtexz;
fscanf(fichierTXT, " %i", &);
fscanf(fichierTXT, " %f %f %f", &[index],
&[index],
&);
}
else if(!strcmp(Mot, " FaceTextures:")){
index = 0;
int tex[2];
fscanf(fichierTXT, " %i", &);
fscanf(fichierTXT, " %i %i %i", &[0],&[1],&[2]);
fprintf(nouveaufichier, " glTexCoord2f(%f,%f);
glVertex3f(%f,%f,%f);\n",coordtexx[tex[0]],coordte
xy[tex[0]],faces[index].pointx1,faces[index].point
y1,faces[index].pointz1);
fprintf(nouveaufichier, " glTexCoord2f(%f,%f);
glVertex3f(%f,%f,%f);\n",coordtexx[tex[1]],coordte
xy[tex[1]],faces[index].pointx2,faces[index].point
y2,faces[index].pointz2);
fprintf(nouveaufichier, " glTexCoord2f(%f,%f);
glVertex3f(%f,%f,%f);\n",coordtexx[tex[2]],coordte
xy[tex[2]],faces[index].pointx3,faces[index].point
y3,faces[index].pointz3);
}
else if(!strcmp(Mot, " Normal:")){
}
else {
fprintf(nouveaufichier, " //%s\n", Mot);
}
}
fclose(fichierTXT);
fprintf(nouveaufichier,"glEnd();");
fclose(nouveaufichier);
system("PAUSE");
return 0;
}

delf__ar
delf__ar
Niveau 7
16 février 2005 à 18:11:49

il faut ensuite faire ceci a votre programme openGL ou vous mettrez les coordonnées :
ajouter les variables suivantes juste apres les includes en haut du programme :
SDL_Surface *surface;
unsigned int numtexture;

ajouter en include l´include suivante :

  1. include < SDL/SDL.h>

ajouter ensuite ceci :

void LoadTexture(char* fichier)
{
SDL_Surface* s=SDL_LoadBMP(fichier);
glGenTextures(1,&);
glBindTexture(GL_TEXTURE_2D,numtexture);
glTexImage2D(GL_TEXTURE_2D, 0, 3, s->w, s->h, 0, GL_BGR , GL_UNSIGNED_BYTE, s->pixels);
glTexParameteri( GL_TEXTURE_2D , GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri( GL_TEXTURE_2D , GL_TEXTURE_MAG_FILTER,GL_NEAREST);
SDL_FreeSurface(s);
}

ajouter dans main avant glutDisplayFunc(); ceci :

glEnable(GL_TEXTURE_2D);

puis dans display :

LoadTexture("nomdevotrefichier.bmp");
glBindTexture(GL_TEXTURE_2D,numtexture);

en mettant le nom de votre fichier bmp puis copier juste apres le code récupéré grace a mon programme.

delf__ar
delf__ar
Niveau 7
16 février 2005 à 18:13:33

j´oublie de préciser : l´image doit avoir dans les tailles des puissance de 2 : ex : 2*2 ou 4*2 ou 32*4 ou 64*8,...

delf__ar
delf__ar
Niveau 7
16 février 2005 à 19:33:18

si vous avez des questions, posez les

bout-de-gruyere
bout-de-gruyere
Niveau 6
17 février 2005 à 10:33:48

oué c´est pratique ton truc apparement, mais j´ai pas vraiment capté: c´est opengl->en gmax ou Gmax->open gl?

JeanYvesYves
JeanYvesYves
Niveau 10
17 février 2005 à 10:40:31

c´est gmax -> opengl :

c´est a dire que tu dessines ton modele sous Gmax, et ensuite, avec cette fonction, tu le charge en mémoire, pret a afficher en C++

delf__ar
delf__ar
Niveau 7
19 février 2005 à 20:52:57

en fait, tu lance le maxscript dans gmax puis tu crée un fichier texte avec le code récupérer et mon programme en crée un autre qui contient les coordonnées a mettre en openGL(directement sous forme : ex : glVertex3f(0.0,1.2,0.3);)

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment