UNE MINI INTRO (OPENGL + MINIFMOD)

cs_bbear Messages postés 92 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 29 mai 2008 - 3 avril 2007 à 15:32
 Utilisateur anonyme - 8 avril 2007 à 12:30
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/42055-une-mini-intro-opengl-minifmod

Utilisateur anonyme
8 avril 2007 à 12:30
Ahh, j'ai uploader le zip mais il ne c'est pas mis a jour ! (sa ma fait pareil avec un source delphi)...
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
7 avril 2007 à 21:58
c'est vrai qu'il faudrait nettoyer un peu le code
toujours avoir un .cpp avec un .h
s'il y a du code dans un .h le plus souvent c'est pour faire du inline avec du code critique (appelé plusieurs fois par image par ex)
les fonctions de fenêtrage c'est pas trop critique
goast_tu Messages postés 212 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 28 mai 2011 2
7 avril 2007 à 11:37
une ptite remarque d'habitude on ne met pas du code executable dans les *.h
Utilisateur anonyme
5 avril 2007 à 21:47
Meci BBEAR, je fait de suite un copier/coller dans le bloc note !

Concernant le probléme du texte trop petit, j'ai eu le même probléme sur le PC de mon frére (et c'est vrai que c'est chiant !!!), je vais éssayer de voir d'ou cela peux bien venir... En tout cas ne croyais pas que je laisse la source a l'abandon si pendant quelques jours il n'y a aucun changement...

Je vais quand même éssayer de faire vite si je peux.
Mercie pour l'aide c'est super cool de votre part.
A+
cs_bbear Messages postés 92 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 29 mai 2008
5 avril 2007 à 13:17
une version rapide d'ouvrir une fenetre fullscreen (dans le main):
PIXELFORMATDESCRIPTOR pfd;  
pfd.cColorBits pfd.cDepthBits 32; 
pfd.dwFlags    = PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;	
HDC hDC = GetDC ( CreateWindow("edit", 0, 
WS_POPUP|WS_VISIBLE|WS_MAXIMIZE, 
0, 0, 0 , 0, 0, 0, 0, 0) );         
SetPixelFormat ( hDC, ChoosePixelFormat ( hDC, &pfd) , &pfd );
wglMakeCurrent ( hDC, wglCreateContext(hDC) );


sinon avec une selection windowed/fullscreen :
void wmChangeToFullScreen()
{
DEVMODE dmSettings;									// Device Mode variable

memset(&dmSettings,0,sizeof(dmSettings));			// Makes Sure Memory's Cleared

// Get current settings -- This function fills our the settings
// This makes sure NT and Win98 machines change correctly
if(!EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&dmSettings))
{
// Display error message if we couldn't get display settings
MessageBox(NULL, "Could Not Enum Display Settings", "Error", MB_OK);
return;
}

dmSettings.dmPelsWidth	= ScreenWidth;		// Selected Screen Width
dmSettings.dmPelsHeight	= ScreenHeight;		// Selected Screen Height

// This function actually changes the screen to full screen
// CDS_FULLSCREEN Gets Rid Of Start Bar.
// We always want to get a result from this function to check if we failed
int result = ChangeDisplaySettings(&dmSettings,CDS_FULLSCREEN);	

// Check if we didn't recieved a good return message From the function
if(result != DISP_CHANGE_SUCCESSFUL)
{
// Display the error message and quit the program
MessageBox(NULL, "Display Mode Not Compatible", "Error", MB_OK);
PostQuitMessage(0);
}
}
Utilisateur anonyme
5 avril 2007 à 12:57
Ok alors je vais essayer de mettre le fichier xm en .h :)

shenron666> Oui l'intro est en 1024x768, car je ne sais pas comment obtenir la resolution d'écran... Quand je trouverez je modifierais a nouveau la source. (pour l'instant je vais remettre les bordures sur la fenêtre et agrandir le texte...).

Sa risque de prendre quelques jours, ce n'est pas que je galére a coder mais c'est que en ce moment j'ai trop de trucs a faire :)

A+ les gars.
cs_bbear Messages postés 92 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 29 mai 2008
4 avril 2007 à 22:49
en fait, elle ne s'ouvre pas en fullscreen mais en windowed 1024x768.

ps: je pensais BOBS (pas Blobs) dans le sens afficher des "sprites" 2D (images) en OpenGl (voir l'invitro de la Breakpoint 2007 de Keops avec des vieux effets)
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
4 avril 2007 à 22:37
sympa comme petite intro, par contre elle me pose quelques problèmes :
- elle n'est pas en plein écran mais dans une fenêtre sans bordure (mon bureau est en 1280x1024)
- le texte, du moins je pense que c'est du texte, est illisible, il reste trop "loin" ou en tout cas il est trop petit

je pense que c'est pour faire "old school" que tu as voulu mettre en resource la musique ?
je suis pas très fan mais la suggestion de BBEAR de générer un .H est préférable au système de resources

à part ça c'est pas mal pour un début
bon courage pour les metaballs ^^
ps: si ça t'intéresse, cherches "marching cubes"
cs_bbear Messages postés 92 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 29 mai 2008
4 avril 2007 à 12:57
pour Minifmod, il ne faut pas passer par les ressources, mais il faut transformer le fichier module en tableau de char (j'utilise INCPRO) qui sera sauvegarder dans un fichier .H
ensuite utiliser les fonctions memopen/memseek... modifiées :
// minifmod include & lib
#include "minifmod.h"
#pragma comment(lib,"minifmod.lib")
#pragma comment(lib,"winmm.lib")
//--- Module
#include "MOD.H"

// module struct
typedef struct 
{
int length;
int pos;
void *data;
} MEMFILE;

FMUSIC_MODULE *pModule;

unsigned int memopen(char *name)
{
MEMFILE *memfile;

memfile = (MEMFILE *)calloc(sizeof(MEMFILE),1);

memfile->length = sizeof(music);
memfile->data = malloc(memfile->length);
memfile->pos = 0;
memcpy(memfile->data,music,memfile->length);

return (unsigned int)memfile;
}

void memclose(unsigned int handle)
{
MEMFILE *memfile = (MEMFILE *)handle;
free(memfile->data);
}

int memread(void *buffer, int size, unsigned int handle)
{
MEMFILE *memfile = (MEMFILE *)handle;

if (memfile->pos + size >= memfile->length)
size = memfile->length - memfile->pos;

memcpy(buffer, (char *)memfile->data+memfile->pos, size);
memfile->pos += size;

return size;
}

void memseek(unsigned int handle, int pos, signed char mode)
{
MEMFILE *memfile = (MEMFILE *)handle;

if (mode == SEEK_SET) 
memfile->pos = pos;
else if (mode == SEEK_CUR) 
memfile->pos += pos;
else if (mode == SEEK_END)
memfile->pos = memfile->length + pos;

if (memfile->pos > memfile->length)
memfile->pos = memfile->length;
}

int memtell(unsigned int handle)
{
MEMFILE *memfile = (MEMFILE *)handle;

return memfile->pos;
}

// pour Initialiser :
// init FMOD
FSOUND_File_SetCallbacks(memopen, memclose, memread, memseek, memtell);
pModule = FMUSIC_LoadSong( (char*)music, NULL ); //sampleloadcallback;
FMUSIC_PlaySong(pModule); // start music
Utilisateur anonyme
4 avril 2007 à 12:40
Voila j'ai mis l'éxécutable dans le zip. Vous pouvez le télécharger et l'éxécuter diréctement.

J'ai modifier un peux la source, mais ce ne sont que des petit truc de rien du tout.

Voila.

BBEAR> A mon avis c'est chaud de faire des metaballs ou du plasma quand on commence l'OpenGL :) J'éssayerai peut être plus tard mais là pour le moment c'est au dela de mes compétences.

A++
cs_bbear Messages postés 92 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 29 mai 2008
3 avril 2007 à 15:32
un p'tit exe aurait pas été de trop...
ou alors un lien vers celui du site (c'est l'IntroCPP v1.00) ?
si c'est celle là, j'aime bien les "barres de copper" en openGl. Comme je demarre aussi l'OGl, je me demandais comment faire des effets Oldskool (plasma, bobs...).

si tu utilises Minifmod, tu peux integrer le module dans l'exe (pm pour plus d'infos ou chercher mes messages, j'ai déjà posté la-dessus)
Rejoignez-nous