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

DirectX Discussion :

objet qui tourne, mais la lumière aussi.......A L'AIDE


Sujet :

DirectX

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 8
    Points : 3
    Points
    3
    Par défaut objet qui tourne, mais la lumière aussi.......A L'AIDE
    Bon il est vrai que je débute en DirectX 8 mais j'ai eu beau passer mon après midi à faire tous les tutaux du net j'ai toujours pas solutionné mon problème. Le voici :

    Sous Visual C++ avec DirectX8 j'ai un bête plateau rectangulaire (comme une planche de bois) avec des trous. Je le charge à partir d'un .x, je le fait tourner suivant Y comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    D3DXMatrixRotationY(&matPlateau,(timeGetTime()/10)/360.0f);
    		g_pd3dDevice->SetTransform( D3DTS_WORLD, &matPlateau );
    		for(i=0; i<g_dwNumPlateauMaterials; i++ )
    		{
    			// Set the material and texture for this subset
    			g_pd3dDevice->SetMaterial( &g_pMeshPlateauMaterials[i] );
    			g_pd3dDevice->SetTexture( 0, g_pMeshPlateauTextures[i] );
     
    			// Draw the mesh subset
    			g_pMeshPlateau->DrawSubset( i );
    		}
    Jusque-là ça marche. Mais le problème c'est que juste au dessus je déclare une lumière comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    		D3DXVECTOR3 vecDir;
    		D3DLIGHT8 light;
     
    		ZeroMemory( &light, sizeof(D3DLIGHT8) );
     
    		light.Type       = D3DLIGHT_DIRECTIONAL;
     
    		light.Diffuse.r  = 2.0f;
    		light.Diffuse.g  = 2.0f;
    		light.Diffuse.b  = 2.0f;
     
    		vecDir = D3DXVECTOR3(40.0f,
    							 -60.0f,
    							 80.0f);
    		D3DXVec3Normalize( (D3DXVECTOR3*)&light.Direction, &vecDir );
     
    		light.Range       = 1.0f;
     
    		g_pd3dDevice->SetLight( 0, &light );
     
    		g_pd3dDevice->LightEnable( 0, TRUE);
     
    		g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, TRUE );
    Et mon problème est que la lumière tourne également avec le plateau, résultat on al'impression de tourner autour du plateau et non d'un plateau qui tourne sur lui même. Le plus bizarre c'est que j'ai créé un deuxième objet témoin qui bouge pas, et sur lui la lumière est fixe sans tourner???

    AU SECOUR, la scène n'est pas cohérente du tout.

    Merci pour le coup de main, je dois sûrement oublié quelque chose...

    Jonathan

  2. #2
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    hmmm... faudrait voir ce que fait la camera pendant ce temps la... poster du code ?

  3. #3
    Candidat au Club
    Inscrit en
    Novembre 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Voilà je te le livre tel quel...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	// Positionement de la caméra
    	D3DXVECTOR3 vEyePt    = D3DXVECTOR3(0.0f, 1.0f,-1.0f);
    	D3DXVECTOR3 vLookatPt = D3DXVECTOR3(0.0f, 0.0f,  0.0f);
    	D3DXVECTOR3 vUpVec    = D3DXVECTOR3(0.0f, 1.0f,  0.0f);
    	D3DXMATRIX matView;
    	D3DXMatrixLookAtLH(&matView, &vEyePt, &vLookatPt, &vUpVec);
    	m_pd3dDevice->SetTransform(D3DTS_VIEW, &matView);
     
    	// Set the projection matrix
    	D3DXMATRIX matProj;
    	D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/12, 1.0f, 1.0f, 100.0f);
    	m_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);
    et puis j'ai essayé un autre tuto qui m'a permis de faire plus simple pour le fichier x, mais toujours le même problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_pPlateau->Render(m_pd3dDevice);
    Merci de réfléchir à mon problème.

    Devrais-je recalculer la lumière pour chaque objet (pour l'instant je n'en ai qu'un.......) ??????????

  4. #4
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    Deja, D3DVector et D3DXVector3, ce n'est pas exactement la meme chose. Il se peut que ca trashe qq chose dans la pile.

    Sinon, en regardant les bouts de code un par un, a part le truc mentionne ci dessus, ca m'a l'air ok. Faudrait voir le truc dans son ensemble.

  5. #5
    Candidat au Club
    Inscrit en
    Novembre 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    ok merci je vais voir à remanier mon truc, mais c'est peut-être le tutorial sur lequel je ma base qui n'est pas terrible. Je vais essayer d'en trouver un mieux.

  6. #6
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Il faut juste que tu sauvegardes ta matrice D3DTS_WORLD avant de la modifié dans la rotation (équivalent push OpenGL), et ensuite après avoir touner ton object tu reload ta matrice D3DTS_WORLD (pop), cela permet de faire tourner ton object sans que la lampe tourne.

    en gros
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    push D3DTS_WORLD 
       D3DXMatrixRotationY(&matPlateau,(timeGetTime()/10)/360.0f); 
       Display Object
    pop D3DTS_WORLD 
    Display Light

  7. #7
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    DirectX ne fonctionne pas comme OGL. la methode proposee par TiR ne risque pas de marcher...

  8. #8
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Je confirme ce que j'ai dit, c'est pareil qu'en OpenGL, vu que Direct3D est basé sur OpenGL et que l'esprit 3D est le même, avec des piles de tranformations.


    donc + de précision
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    memcpy(&saveGlobal, &matWorld, sizeof(D3DXMATRIX));
    g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );
          D3DXMatrixRotationY(&matPlateau,(timeGetTime()/10)/360.0f); 
          g_pd3dDevice->SetTransform( D3DTS_WORLD, &matPlateau ); 
          for(i=0; i<g_dwNumPlateauMaterials; i++ ) 
          { 
             // Set the material and texture for this subset 
             g_pd3dDevice->SetMaterial( &g_pMeshPlateauMaterials[i] ); 
             g_pd3dDevice->SetTexture( 0, g_pMeshPlateauTextures[i] ); 
     
             // Draw the mesh subset 
             g_pMeshPlateau->DrawSubset( i ); 
          }
    g_pd3dDevice->SetTransform( D3DTS_WORLD, &saveGlobal);
     
    // Display light here

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 22
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par SDK DirectX
    Remember, these coordinates are in world space
    Donc les modifications de la matrice du monde ne modifie pas la position de la lumière.

    vu que Direct3D est basé sur OpenGL
    Lol, j'aurais au moins appris quelque chôse aujourd'hui!

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 71
    Points : 78
    Points
    78
    Par défaut
    Direct3D basé sur OpenGL ? ça m'étonnerait fort ! des preuves ?

  11. #11
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Je me souvient + du nom du projet, mais il y a quelques années de cela un projet à été lancé d'unifier OpenGL et Direct3D pour faciliter la vie au programmeur, la partie grandissante de DirectX à l'époque, version 3 ou 4, le projet était bien entammé quand il a été abandonné par M$... Ensuite on nota un formidable changement de performances dans la lib Direct3D... car à l'époque les perfs 3D de Direct3D était assez risible comparé à OpenGL.

    Beaucoup d'indices qui font pensé que M$ à encore une fois de + frappé .

    Comme la ZLib qu'ils utilisent, ou encore le code sources qui permet de gérer tout le contenu des trames réseau de M$ NT à partir de la version 2k !

    Je n'arrives + a trouver le nom du projet de l'époque, ni sur le réseau sous 2k... mais si tu cherches je suis sur que tu vas en trouver de térrible

  12. #12
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Ah je viens je crois de retrouver le nom "Projet Fahrenheit"

    http://www.azillionmonkeys.com/windo...sDirect3D.html
    Chapter 15.

    ici aussi

    http://www.3dgate.com/news_and_opini...21699news.html
    Titre: "Where’s OpenGL in Windows 2K?"

  13. #13
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    J'ai pas lu le code sur la lampe juste déduit suivant ce qu'il disait, que la lampe tournait avec son plateau.... cela peut s'expliquer par le changement de l'état local de la matrice qui la lié au plateau, mais je suis pas expert D3D.

    C'est une lampe directionnel et c'est vrai qu'elle ne doit pas tourner, et que les lampes en Direct3D ne prennent pas en compte la matrice du monde...

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 22
    Points : 26
    Points
    26
    Par défaut
    DirectX à l'époque, version 3 ou 4, le projet était bien entammé quand il a été abandonné par M$... Ensuite on nota un formidable changement de performances dans la lib Direct3D... car à l'époque les perfs 3D de Direct3D était assez risible comparé à OpenGL.
    Tu m'étonnes vu que D3D est apparu dans la version 5 de DirectX et qu'il n'y a pas eu de version 4...
    Désolé pour le HS, je ferais plus

  15. #15
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    lol et bien devine pourquoi il y avait une version D3D3 pas térrible, que D3D4 est pas sorti et que comme par miracle D3D5 fonctionnait bien mieux

  16. #16
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    Voila encore une discussion technique qui tourne au troll debile et habituel D3D contre OGL... a cause d'un mec qui reconnait lui meme qu'il n'est "pas un expert". Enfin...

  17. #17
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Je crois pas que l'on se "bagare" sur ce qui est mieux, chaqu'un à ses préférences et chaque API à ces avantages.

    Mais les 2 API sont très proches l'une de l'autre même si je suis pas expert, j'ai déja codé avec les 2 libs.

    Et on parle de l'histoire de la lib, c'est bien aussi de partager ses connaissances non ? parceque je pensais que le forum était la pour cela et pas pour critiquer les gens, mais pour essayer d'apporter des solutions...

    Et si mes propos ont été intéprété comme Pro-OpenGL-iste, excusez moi alors, car ce n'est pas le cas, même si il est vrai que j'ai + d'expérience avec OpenGL (n'aurai je pas le droit de le mensionner ?).

    Et il est vrai que ce que je disais ne fonctionnerais pas dans le cas de la lampe, mais je pense pas être le premier, ni le dernier à mon tromper...

  18. #18
    Candidat au Club
    Inscrit en
    Novembre 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 8
    Points : 3
    Points
    3
    Par défaut holalala
    Loin de moi de lancer un débat en posant une question sur mon problème un peu strange.

    Bon de toute façon il doit y avoir un gros problème quelque part, et comme je suis pas un expert Direct-X, je ne peux voir ce que je ne connaît pas.

    Enfin, je vais faire un break sur directX et reprendre d'autres projets

    En revanche j'aimerais savoir si l'un de vous, car vous avez l'air d'en savoir plus que moi, aurai un très bon bouquin ou un très bon tuto à me conseiller. Autre chose que "comment faire tourner un cube en 3D", le genre de tuto où dès que tu veux allez plus loin, bah tu peux pas car on nous dit plus rien. Je demande pas à être assisté et qu'on me balance le code (quoique desfois ça aide pour apprendre d'avoir quelque chose qui marche devant les yeux).

    Mon problème est que tout les tutos que j'ai pus lire, ne traite que d'un seul objet... Et il serait peut-être de bon que les gens arrête un jour de pourrir le net en piquant bêtement le contenu d'autres site en changeant juste les couleurs, ça n'apporte pas grand chose, et c'est pas sympa pour les auteurs.

    Laurent-USA, le livre sur Direct-X 9, que peux-tu me dire de plus que ce qui est sur le site ? A part me conseiller d'aller vite l'acheter (problème je réside en Suède).

    Merci quand même,

    Natsimhan

  19. #19
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    La meilleure serie de tutoriels pour Dx sur le net est sans conteste celle de Andy Pike. Bien fait, tres progressif. C'est vrai que ca commence par le "dreaded" cube mais il y a pas mal de trucs interressants ensuite. C'etait gratuit la derniere fois que je suis alle y voir.

    Mon site esperait dire tout sur le bouquin ou presque... si tu as des questions specifiques, shoot me an email...

    Tu peux acheter mon bouquin sur Amazon France. J'y achete souvent des CDs et des BDs qui me sont envoyees aux US sans histoires. La livraison prends parfois jusqu'a un mois en mode economique... Le temps de traverser l'atlantique en pedalo.

  20. #20
    Candidat au Club
    Inscrit en
    Novembre 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Quand j'ai vu le prix du bouquin, je me suis dit y'a pas de raison, il faut que je l'achète, en plus j'ai une frangine qui vient pour Noël de France, alors ça m'évitera les frais de port

    Je conseille à d'autre d'aller faire un tour sur le site...

Discussions similaires

  1. [2008 R2]Job qui tourne mais sql server me dit le contraire
    Par Kropernic dans le forum Administration
    Réponses: 19
    Dernier message: 22/01/2013, 21h48
  2. code C qui tourne sous turboC mais pas sous Visual C++
    Par tounsimaroua1 dans le forum Visual C++
    Réponses: 3
    Dernier message: 09/05/2012, 16h19
  3. Un objet qui nous fuit mais qu'on doit rejoindre
    Par Ivady dans le forum Intelligence artificielle
    Réponses: 9
    Dernier message: 10/01/2009, 17h30
  4. objet 3D qui tourne
    Par rvnjks2000 dans le forum Flash
    Réponses: 1
    Dernier message: 13/07/2007, 20h06
  5. Réponses: 10
    Dernier message: 07/07/2007, 10h48

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