Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1611 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [openGL] fichier wav/ fonction getColor()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[openGL] fichier wav/ fonction getColor()

n°1186516
Amonchakai
Posté le 28-08-2005 à 19:56:53  profilanswer
 

Bonjour !!!
 
Bon, alors en ce moment je suis en train de faire un petit jeu hautement magnifique du point de vue graphique (vaisseau modélisé par des triangles …  donc en 2D ) Mais j’ai un petit souci : tout d’abord j’avais l’intention de mettre des petits bruitages en « .wav » je connais la méthode PlaySound() mais là gros problème : quand il fait le bruit le jeu s’arrête ce qui est vraiment pas cool pour un jeu de tir… Aussi vous ne connaîtrez pas par hasard une autre méthode pour le faire et qui ne bloquerait pas le jeu ?
 
   Mon deuxième problème est pour gérer les collisions avec le décor : j’avait pensé a charger une texture que j’afficherai en fond d’écran et ensuite je pensai définir une couleur (noir) qui ne serait pas un élément du décors et toute les autres couleur seraient du décors donc contact avec cette couleur == explosion. Ainsi pour cela il me faudrait un fonction du type getColor(int x, int y) comme il y en a dans graphics.h mais mon problème c’est que je travaille en openGL donc je sais pas si il y en a une qui fait ça dedans. Donc si vous en connaissez une … (même en Win32).
 
Merci !!! :)  

mood
Publicité
Posté le 28-08-2005 à 19:56:53  profilanswer
 

n°1186523
Amonchakai
Posté le 28-08-2005 à 20:10:23  profilanswer
 

oops je suis vraiment désolé j'ai posté trop vite : j'ai eu ma réponce pour PlaySound() sur msdn...  :)  
 
par contre pour un getColor() je suis toujours preneur ...
 
Merci

n°1186576
Zeross
Posté le 28-08-2005 à 21:22:06  profilanswer
 

Jette un oeil du côté de glReadPixels c'est ce que tu veux faire même si ce n'est pas ce qu'il y a de plus efficace (les cartes 3D sont optimisées pour envoyer des données depuis la mémoire principale vers le GPU mais pas pour rapatrier des données locales comme le FrameBuffer en mémoire principale)

n°1186755
Amonchakai
Posté le 29-08-2005 à 10:25:03  profilanswer
 

Ok Merci Zeross.
 
   mais j'avoue ne pas bien bien tout saisir... Genre pour ce que j'aurais besoin il faudrait que je fasse :
 

Citation :


glReadPixels(x, y, 1, 1, GL_RGB, GL_FLOAT, &pixels);


 
en utilisant GL_FLOAT pour que ma couleur ne soit pas multipliée par une constante. (d' ailleur je ne comprend pas trop cette histoire de multiplication par une constante... )
 
mais surtout mon gros problème est au sujet de "pixels". je ne trouve pas de classe "pixels". Alors j'ai essayé de la créer en faisant ça :
 

Citation :


 
class pixels{
   public :  
      float r, g , b;
};
 


mais bon là ça marche pas ...
 
Sinon j'ai voulu aler voir du côté du traitement des erreurs de cette fonction : (GL_INVALID_ENUM, GL_INVALID_VALUE, GL_INVALID_OPERATION, ...)
 
mais je ne sais pas où l'on peut récupérer ces constantes. Car il disent que si il y a une érreur pixels n'est pas modifié et quand j'ai éssayé de mettre mon if() devant glReadPixels() il me déclare un erreur et refuse de compiler (normal) puisque la déclaration de glReadPixels est :  

Citation :

void glReadPixels(GLint x, GLint y, ...

n°1186802
Zeross
Posté le 29-08-2005 à 11:08:22  profilanswer
 

Essaye un truc de ce genre

Code :
  1. GLubyte pixColor[3];
  2. glReadPixels(x, y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pixColor);


 
Ensuite pour voir s'il y a du noir tu n'as plus qu'à vérifier que pixColor[0], pixColor[1] et pixColor[2] valent 0 pour voir s'il y a du blanc les 3 valeurs doivent être à 255 etc... Un truc que tu pourrais faire ce serait, plutôt que d'utiliser une couleur, d'utiliser le canal alpha.
 
Pour la gestion des erreurs en OpenGL il faut faire appel à glGetError qui renvoie un code d'erreur que tu peux ensuite passer à gluErrorString pour obtenir une chaîne de caractères décrivant l'erreur.
 
L'exemple du redbook :

Code :
  1. GLenum errCode;
  2. const GLubyte *errString;
  3. if ((errCode = glGetError ()) != GL_NO_ERROR) {
  4. errString = gluErrorString(errCode);
  5. fprintf (stderr, "Erreur OpenGL : %s\n", errString);
  6. }

n°1186999
Amonchakai
Posté le 29-08-2005 à 13:35:52  profilanswer
 

Ok MERCI ça marche impeccablement bien !!!
 
Bon en ce qui concerne la gestion des erreurs j'ai pas encore essayé mais bon je m'en occupe bientôt.
 
Sinon, géniale cette idée d'utiliser le chanel alpha je sais pas pourquoi j'y avait pas pensé (le manque de géni peut-être...). Par contre tu connaîtrais pas un éditeur d’image qui permet d’accéder au chanel alpha. Car actuellement j’utilise paint et dessus je crois pas que l’on puisse le faire. Du moins je ne sais pas comment on le fait.
 
Et encore Merci pour l’aide !!!  :)  

n°1187065
bjone
Insert booze to continue
Posté le 29-08-2005 à 14:32:28  profilanswer
 

sinon pour avoir un truc plus économique et éviter le glReadPixels(), tu peux générer un bitmap où chaque octet code 8 pixels, donc 1 bit == canal alpha ou résultat de test par rapport à une couleur de masque.

n°1187808
Amonchakai
Posté le 30-08-2005 à 14:40:40  profilanswer
 

ha oui c'est pas bête... :jap:  
je vais essayer...
 
Merci a tous de m'avoir répondu !!!

n°1187813
bjone
Insert booze to continue
Posté le 30-08-2005 à 14:48:37  profilanswer
 

et la méthode ultime, qui serait totallement indépendante du CPU, mais qui nécessite un GPU récent, serait de clearer le stencil buffer, quand tu construit ton décord avec tes tiles, les vaisseaux ennemis, et les munitions, tu mets le stencil a une constante....
 
et tu fais une requête d'occlusion avec le nombre de pixels traçés ou plustôt non traçés (je sais pas si c'est possible) en traçant d'abord ton piti vaisseau uniquement en Z+stencil avec un test contre le stencil, ce qui te permettera de savoir par voie hardware si ton vaisseau il est en collision avec quelque chose qu'il faut pas :D
 
mais bon c'est un peu faire un jeu oldschool qui a besoin d'une geforce fx/radeon 9600, donc c'est un peu creuvard :D

n°1188971
Amonchakai
Posté le 31-08-2005 à 18:41:09  profilanswer
 

Merci ... mais je t'avoue que là j'ai pas tout compris : j'ai pas encore un niveau énorme en openGL alors je pense que je vais me contenter de l'autre solution que tu proposait voir revenir a ma première idée si je n'y arrive pas ...
 
Mais MERCI quand même pour tes idées que tu me propose !!!  :bounce:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [openGL] fichier wav/ fonction getColor()

 

Sujets relatifs
Séléctionner fichier sur le serveur?probleme avec la fonction contains()
détecter si un fichier existe deja avant d'uploadercode pour ouvrir l'explorateur de fichier
fonction recursiveOuvrir un fichier *.ndx
Macro excel fichiercomment récuperer des infos d'un fichier .txt
problème impossible d'écrire dans un fichier!!!Copier fichier sur ordinateur distant [W2000]
Plus de sujets relatifs à : [openGL] fichier wav/ fonction getColor()


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR