IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

vb6/directx8 et direct3d


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 83
    Par défaut vb6/directx8 et direct3d
    Bonjour à tous
    Je voudrais vous soumettre un bug incompréhensible qui se produit dans le programme que je suis en train de mettre au point à savoir:
    C'est un jeu de bandit manchot en 3d et dans ma sub de rendu de direct3d , je fait un test de couleur pour savoir sur quelle case s'arrete la roue ( j'utilise pour cela l'API Windows GETPIXEL....).
    Et donc je veux qu'en fonction de la couleur , la variable gain change de valeur.
    Quand je lance le programme il arrive que de temps en temps la variable gain reste à 0 alors que la couleur est bien testée ( car je l'affiche à l'écran pour les tests).J'ai vérifié au moins 30 fois mon code et il n'y a pas d'erreur et de plus ,ce defaut se produit que sur la roue du centre alors qu'il y en a trois , pourquoi ? et pourquoi de manière aléatoire , car s'il y avait une erreur dans le code , le bug apparaitré chaque fois .
    bien sur l'API GETPIXEL est bien déclarée en début de module
    Ainsi que toutes les variables utilisées (long pour la couleur et Integer pour la variable gain).
    Voici un extrait de mon code dans la sub rendu3D

    couleur=getpixel(form1.hdc,x,y) ' x et y étant les coordonnées du point à tester.
    if couleur=&hff00ff then gain=1
    if couleur=&hffff00 then gain=2
    etc
    J'ai fait les tests 20 fois et au 21e , le bug apparait mais il peut aussi apparaitre au bout de 5 ,8 ou 15 tests.
    Je devient fou de ne pas comprendre alors si quelqu'un peut m'aider , j'en serais très reconnaissant.
    Encore merci et cordiales salutations

  2. #2
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Bonjour,

    es tu sur que le rendu 3D ne modifie absolument pas les couleurs, je ne connais pas du tout mais s'il y a rendu 3D c'est aussi entenant compte des lumieres et des ombres j'imagines ? Dans ce cas, il faudrait tester sur des plages de couleur plutot que sur des couleurs exactes.
    Et déjà, après avoir testé toutes les couleurs attendues, au moins pour débugage tu pourrais avoir une ligne du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Gain = 0 then debug.print Couleur
    Ca te permettrait de voir si la couleur trouvée est vraiment une couleur attendue ou non.

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 83
    Par défaut vb6 et directx , et direct3D
    bonjour,
    Merci de t'intéresser à mon problème.
    A la fin du rendu juste avant le endscene j'affiche la variable couleur et elle me donne la bonne valeur.
    De plus j'ai 3 routines identiques dans la mème sub vu que j'ai 3 roues et il n'y en a qu'une ou le bug apparait.
    Pour tester j'ai mis une variable intermédiaire du genre:
    couleurinter=couleur
    et j'affiche les deux variables , curieusement par moment , la valeur de couleur n'est pas bien transmise à couleurinter et à l'affichage cela donne:
    couleur=FF00FF
    couleurinter=FF0039 ' Alors??????????????
    Je tourne en rond , j'ai tout essayé et là désespoir je plante
    Cordiales salutations

  4. #4
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    il doit bien y avoir une autre procédure qui change la valeur de ta variable couleur alors non ?

  5. #5
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Salut
    Les bizarreries de VB et de Windows.
    J'ai aussi ce type de bug de temps en temps, il n'est pas impossible que Windows n'actualise réellement le contenu de la variable au moment T ou tu veux l'utiliser pour la suite de ton traitement (il peut considérer qu'il a d'autres priorités), un DoEvents permet (des fois) de supprimer le problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    couleur=getpixel(form1.hdc,x,y) ' x et y étant les coordonnées du point à tester.
    DoEvents
    If couleur=&hff00ff Then gain=1
    If couleur=&hffff00 Then gain=2
    De plus, si ta sub traite 3 appels à getpixel, j'en ajouterai bien entre chaque appel.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 83
    Par défaut vb6/directx/direct3D
    J'ai bien essayé comme le préconise ProgElect de mettre un Doevents après chaque test de couleur , mais cela ne règle pas le problème.
    Pour répondre à OhMonBato , non , il n'y a pas d'autres sub qui modifierait la variable ou la couleur ( tout tourne dans la sub rendu du 3D).
    Ce qui est bizarre c'est que sur les 3 gestions identiques inclusent dans la sub rendu , c'est toujours la mème qui pose problème.
    J'ai mème essayé de modifier les coordonnées pour la prise de couleur par l'appel à GETPIXEL rien n'y fait.
    Ca tourne bien 10,20ou 30 coups et tout à coup le bug se produit sans qu'on sache pourquoi.
    Je poursuit mes tests et le premier qui trouve aura gagné toutes mes félicitations
    Encore merci à tous

  7. #7
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    Citation Envoyé par yvanovitch Voir le message
    couleur=getpixel(form1.hdc,x,y) ' x et y étant les coordonnées du point à
    GetPixel ne fonctionnera pas avec Direct3d !
    Direct X by-passe le GDI
    Sauf si on passe par une Direct3DSurface avec Lock et Unlock

  8. #8
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 83
    Par défaut vb6/directx/direct3d
    Alors voilà pour clore cette discussion et pour aider ceux qui comme moi vont galérer avec l'API GETPIXEL sous direct3D qui malgré tout fonctionne sous directx.
    1) Les valeurs des 3 composantes de couleurs sont différentes si on les testent dans PAINT NET et dans DIRECTD ( ceci pour les nuances et non pour les couleurs franches)
    2)Certaines valeurs doivent etre testées en notation Hexa et d'autres en RGB pourquoi ?? Mystère
    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    couleur(1) = GetPixel(Form1.hdc, 410, 245) ' on teste la couleur
    If couleur(1) = &HF7 Then gaindumilieu(1) = "fraise"
    If couleur(1) = RGB(0, 255, 0) Then gaindumilieu(1) = "lingot"
    If couleur(1) = &HFF0000 Then gaindumilieu(1) = "ananas"
    If couleur(1) = RGB(255, 255, 0) Then gaindumilieu(1) = "blason"
    If couleur(1) = &HFF00FF Then gaindumilieu(1) = "fleur"
    If couleur(1) = &HFFFF00 Then gaindumilieu(1) = "pomme"
    If couleur(1) = &HC68200 Then gaindumilieu(1) = "banane"
    If couleur(1) = RGB(231, 130, 0) Then gaindumilieu(1) = "citron"
    Salutations à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. directx direct3d vb6
    Par yvanovitch dans le forum DirectX
    Réponses: 4
    Dernier message: 16/11/2009, 20h07
  2. vb6/Directx8 et direct3D
    Par yvanovitch dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 16/11/2009, 10h06
  3. direct3d sous VB6
    Par yvanovitch dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 09/11/2009, 01h28
  4. direct3d et VB6
    Par yvanovitch dans le forum DirectX
    Réponses: 5
    Dernier message: 21/10/2009, 19h05
  5. Direct8X/Direct3D sous VB6, probleme de récup d'animations
    Par John Blobsmith dans le forum DirectX
    Réponses: 3
    Dernier message: 28/04/2004, 11h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo