janta
25/11/2005, 17h35
Hello all :) Ceci est mon premier message !
Disons que je débute avec directX, et en essayent de me conformer au framework proposé par la version 9, voici le phénomène paranormal que je rencontre...
J'essaye simplement de faire tourner un pavé pour me familiariser un peu avec les listes de vertices et d'indices, les matrices de transformation etc.
Lorsque la vitesse de rotation est assez lente, le pavé s'affiche correctement, mais dès que j'augmnte un peu, je vois un léger effet de dédoublement, comme si je voyais 2 pavés avec environ 1 mm de décalage... Un truc un peu dans le style d'une image faite pour etre regardée avec des lunettes 3d... Je sais pas si j'arrive a bien me faire comprendre.
Je vous montre ma fonction OnFrameRender()
void CALLBACK OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext )
{
pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_ARGB(0, 45, 50, 170), 1.0f, 0) );
FLOAT fAngle = (timeGetTime() % 10000) * (2.0f * D3DX_PI) / 10000.0f;
pd3dDevice->SetTransform(D3DTS_WORLD, D3DXMatrixRotationYawPitchRoll(&matWorld, fAngle, fAngle, fAngle) );
V( pd3dDevice->SetStreamSource( 0, pVB, 0, sizeof(MYVERTEX) ));
V( pd3dDevice->SetFVF( MYVERTEX_FORMAT ));
V( pd3dDevice->SetIndices(pIB));
if( SUCCEEDED( pd3dDevice->BeginScene() ) )
{
V( pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 8, 0, 12) );
V( pd3dDevice->EndScene() );
V(pd3dDevice->Present( NULL, NULL, NULL, NULL ));
}
}
Ne cherchez pas à savoir pourquoi j'utilise le temps absolu du systeme (timeGetTime) plutot que le paramètre du callback (c'est ce que je devrais faire), j'ai essayé et le résultat est strictement identique.
J'ai expérimenté le meme procédé de rendu (ultra simplissime...) sans utiliser le framework fourni mais en faisant moi meme mes initialisation et ma propre boucle, et je n'ai pas cet effet du tout....
Gnééé :)
J'avoue que je sèche, j'ai fait plein de tests en modifiant les render state etc.
Rien n'y fait.
Ma méthode OnFrameMove est pour l'instant vide, les autres méthodes contiennent initialisation et libération des buffers. Les vertices et les indices sont définis en globals
Voila, si quelecun a un indice pour moi :00000020:
PS: petit salut a lightness1024 je sais pas si tu te souviens de moi, on avait échangé qq mails il y a longtemps a propos de ton projet Sehrum ;)
Disons que je débute avec directX, et en essayent de me conformer au framework proposé par la version 9, voici le phénomène paranormal que je rencontre...
J'essaye simplement de faire tourner un pavé pour me familiariser un peu avec les listes de vertices et d'indices, les matrices de transformation etc.
Lorsque la vitesse de rotation est assez lente, le pavé s'affiche correctement, mais dès que j'augmnte un peu, je vois un léger effet de dédoublement, comme si je voyais 2 pavés avec environ 1 mm de décalage... Un truc un peu dans le style d'une image faite pour etre regardée avec des lunettes 3d... Je sais pas si j'arrive a bien me faire comprendre.
Je vous montre ma fonction OnFrameRender()
void CALLBACK OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext )
{
pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_ARGB(0, 45, 50, 170), 1.0f, 0) );
FLOAT fAngle = (timeGetTime() % 10000) * (2.0f * D3DX_PI) / 10000.0f;
pd3dDevice->SetTransform(D3DTS_WORLD, D3DXMatrixRotationYawPitchRoll(&matWorld, fAngle, fAngle, fAngle) );
V( pd3dDevice->SetStreamSource( 0, pVB, 0, sizeof(MYVERTEX) ));
V( pd3dDevice->SetFVF( MYVERTEX_FORMAT ));
V( pd3dDevice->SetIndices(pIB));
if( SUCCEEDED( pd3dDevice->BeginScene() ) )
{
V( pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 8, 0, 12) );
V( pd3dDevice->EndScene() );
V(pd3dDevice->Present( NULL, NULL, NULL, NULL ));
}
}
Ne cherchez pas à savoir pourquoi j'utilise le temps absolu du systeme (timeGetTime) plutot que le paramètre du callback (c'est ce que je devrais faire), j'ai essayé et le résultat est strictement identique.
J'ai expérimenté le meme procédé de rendu (ultra simplissime...) sans utiliser le framework fourni mais en faisant moi meme mes initialisation et ma propre boucle, et je n'ai pas cet effet du tout....
Gnééé :)
J'avoue que je sèche, j'ai fait plein de tests en modifiant les render state etc.
Rien n'y fait.
Ma méthode OnFrameMove est pour l'instant vide, les autres méthodes contiennent initialisation et libération des buffers. Les vertices et les indices sont définis en globals
Voila, si quelecun a un indice pour moi :00000020:
PS: petit salut a lightness1024 je sais pas si tu te souviens de moi, on avait échangé qq mails il y a longtemps a propos de ton projet Sehrum ;)