MOTEUR 3D EN C++ AVEC DIRECTX 8.1 (GESTION SOURIS, CLAVIER, SON)

Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 - 28 nov. 2003 à 00:21
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010 - 6 déc. 2003 à 16:31
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/18272-moteur-3d-en-c-avec-directx-8-1-gestion-souris-clavier-son

Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
6 déc. 2003 à 16:31
Déjà, c'est assez bien fait.... Bon c'est vrai qu'une fois un moteur 3D programmé sur 68K passer sur un PC ça doit paraître franchement désobligeant (personnellement j'ai fait un RayTracer en Basic sur TI92+ mais je l'ai jamais balancé sur le Net, on devinera pourquoi...), mais bon... franchement c'est bien fait...
Le prog doit tourner sur ma machine aux alentours de 600 Fps, je sais pas trop, parce que l'animation est vraiment rapide.
Le bug de Alt-Tab... C'est vrai que c'est un peu gênant, je saurais pas te dire quoi faire vu que ça fait qu'une semaine que je fais du C++ (encore du VB ça va, mais là) :) Tu devrais demander à un certain Geff, il m'avais plutot aidé dans mes projets de moteurs 3D, il saura sûrement te dire. En tout cas, ton programme est fonctionnel, >9/10
Saros
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
2 déc. 2003 à 19:26
Moi j'utilise FMOD (http://www.fmod.org, tutoriaux très bien faits à http://fmod.apinc.org/) qui est très simple d'utilsation et gratuite (et portable mais tu t'en fous vu DirectX ;)).
J'ai fait un jeu avec cppdupdup34 qui l'utilise et ça marche très bien à http://www.cppfrance.com/code.aspx?ID=11026 si tu veux un exemple ;)
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
30 nov. 2003 à 23:23
pourquoi tu utilise pas sndSoundPlay, c'est plus simple
Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
30 nov. 2003 à 12:08
J'avais deja posté un message (sans reponse, sniff.. ) a propos du son dans ce programme:
En fait, lorsque qu'on clique sur le bouton gauche de la souris, un bruit de tir d'une kalashikov est lancé.
Le son est prealablement chargé dans un buffer et la lecture est lancé au moment opportun.
Mais, il existe un temps assez aleatoire et genant entre le moment ou l'ordre de la lecture est donné et celui du debut de la lecture.
Cette difference de temps grandit avec la durée de deroulement du programme.
Avez-vous eu deja le meme probleme ?
Les routines de son sont presentes dans le code source, seules la destruction, la creation, le chargement et le lancement des sons sont mis en commentaires.


Sinon, pour le probleme de la souris, j'ai joué a Hitman2 où la souris est bien plus precise.
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
29 nov. 2003 à 15:14
Ben je savais pas qu'il y avait plusieurs moteurs 3D pour TI89 :)
Tu sais, tu peux toujours le continuer en même temps que la prog PC ;)
yAronet est un super forum ! Y'a même un gars qui écrit un autre compilo C que TI-GCC il me semble :)

Pour l'API Win32, tu l'as déjà utilisée en fait lol, c'est toutes les fonctions qui sont déclarées dans windows.h (et windowsx.h éventuellement).
MCRSTEPH Messages postés 20 Date d'inscription samedi 11 janvier 2003 Statut Membre Dernière intervention 29 octobre 2007
28 nov. 2003 à 22:34
Il y a beaucoup de fonctions "déja toute faites" lol rassemblées dans ce que lon apelle l'Api Win32. L'api win32 est le plus bas niveau de controle pour programmer en environnement windows. c'est le plus puissant quoi...
Il vaut mieux l'utiliser...pour dev windows.
Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
28 nov. 2003 à 21:08
Trop top ton programme, Galmiza :-0 .....

Bon j'arrete.

Funto66 -> Pour le deplacement de la camera, c'est comme dans les doom-like, q,s,d,z.
A propos de ti89, j'ai fait un moteur3D avec textures, mais pas de clipping3D (mais 2D), ni de z-buffer. Il est sur Yaronet (section projet) ou j'ai le meme psudo qu'ici. Je ne le continue pas car j'ai decouvert ...... le C++ sur PC !

MCRSTEPH -> Vu que je sort de l'assembleur, je ne suis pas encore tres habitué a utiliser des fonctions deja toutes faites... mais je vais m'habituer. Chez moi, quand je fais ALT TAB, la barre des taches apparait, les "signets" changent de couleur quand la souris passe dessus (normal quoi) mais le reste de l'ecran semblent etre mobilisé par mon programme....
MCRSTEPH Messages postés 20 Date d'inscription samedi 11 janvier 2003 Statut Membre Dernière intervention 29 octobre 2007
28 nov. 2003 à 01:11
C'est quoi directx ? je debute en ordinateurs...
Je n'ai pas télécharger ta source... je connais pas ce truc , c'est pour les jeux non?
...Mouhahaha non je decone...
Je n'ai pas l'intention d'étudier dx , enfin pas pour le moment ..je prefere attendre la version 142.8 ....
Bon allez...comme je doit etre en train de te gonfler, je vais essayer de me ratraper.

PROBLEME DE ALT TAB AVEC UN FULLSCREEN ?
Tu m'as fais penser que je n'avais peut etre pas tester ca....alors je l'ai fait...et ca va bien...

Pour moi un Fullscreen c'est une fenetre sans barre de menus ni systeme, qui occupe tout l'ecran.
Avant d'afficher cette fenetre, je me reserve le droit de changer dynamiquement la resolution et le mode de couleurs de l'affichage.
je fais ca avec ma fonction WinSetDisplayMode:

void WinSetDisplayMode(int colorbits,int res_x,int res_y,int Freq)
{
DEVMODE mode;
EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&mode);
mode.dmBitsPerPel=colorbits;
mode.dmPelsWidth = res_x;
mode.dmPelsHeight = res_y;
mode.dmSize=sizeof(mode);
mode.dmDisplayFrequency=Freq; // 60 70 72 75 85 ..
//
ChangeDisplaySettings(&mode,0);
};


colorbits = 16 ou 32 par exemple, c'est la couleur.
res_x = resolution, 640 pour un 640x480.
res_y = .....
Freq = fréquence en Hz, mais attention a pas mettre n'imp. en cas de doute modifier le code pour pas avoir a y toucher et laisser la frequence d'origine.
Dés que ma fonction a été appelée (winmain dans mon test), lecran passe dans le mode que jai choisi. Je creer alors ma fenetre sur toute la surface ecran.
-> + 40 tests de alt-tab -> aucun problemes :)

a la sortie de ma boucle de messages, avant la fin de winmain, j'appelle alors ma fonction WinRestoreDisplayMode :

void WinRestoreDisplayMode(void)
{
DEVMODE mode;
EnumDisplaySettings(NULL,ENUM_REGISTRY_SETTINGS,&mode);
ChangeDisplaySettings(&mode,0);
};

Cette derniere rétablie le mode d'affichage d'origine...en se basant sur les infos du registres.

J'espere que ca peut t'aider.
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
28 nov. 2003 à 00:21
Bon, je ne veux pas relancer le débat, mais j'ai et j'aurai toujours une préférence pour OpenGL....:p
Ton prog est sympa, mais tu devrais rajouter la possibilité de faire bouger la caméra (ou alors j'ai pas trouvé comment on fait?).
Pour la prog sur TI89, j'avais fait un Hello World en C sur la mienne lol mais c'est tout, j'ai vu qu'il y a un moteur 3D pour ces calcs :)
Rejoignez-nous