Salut a tous, donc il y a peu j´ai decide de me mettre a DirectX pour apprendre les bases de la 2D.
J´ai decide de commencer avec DX8 puisque ca a radicalement change depuis le 7 ( pourquoi se mettre au 7 pour apprendre le 8 ensuite ? ?).
Donc je me trouve des cours etc... tout marche bien et la je commence les transformations et quand j´inclus la librairie " d3dx8.lib", il me dit qu´il ne trouve pas la lib. alors je suis alle sur cppfrance, je dl un pong tout simple et le mec utilise visiblement les meme cours que moi, et la pas de probleme VC++ la trouve.
Alors si qqn a une idee du pourquoi du comment, ce serait sympa...
un ptit up parce que je desespere la c pas normal en toute logique il devrait la trouver!!!
grr... je suis sur que c un truc tout con en fait.
As tu bien installé le SDK DX8.0 ?
Il contient tout les en-tete C et les librairies qu´il te faut. Si oui, dans quel repertoire l´as tu installé. Ce repertoire est t´il referencé dans les chemins d´include et de lib ( probablement dans " option de compilation" et " path") ?
Bonne chance.
Merci de répondre Kouic, mais j´ai bien vérifié tout ça, et tout est en ordre ( j´ai effectivement installe le SDK).
Ce que je trouve étrange c´est que ça compile avec la source que j´ai téléchargée sur cppfrance qui inclut justement " d3dx8.lib" ( le repertoire est bien référencé dans dans " path", je n´y comprend rien c´est pas normal : -().
De plus je n´ai aucun probleme pour compiler lorsque j´utilise " d3d8.lib" ou " dinput8.lib", c´est uniquement avec d3dx8.
J´ai meme réinstallé le SDK, copié les libs du SDK dans le répertoire " Libs" de VC++ mais rien n´y fait.
je suis desespere snif, vais-je devoir abandonner DirectX et me mettre à l´OpenGL ( c´est pas que ça m´emmerde, mais je m´étais mis à fond dans DirectX moi...).
J´ai trouvé ! !! je l´avais bien dit : un truc tout con!!! Bon je vais pas dire mon erreur parce que sinon je vais encore me faire vanner de tous les cotes moi lol.
: ) Allons, ce n´est pas notre genre > :>
Bon ok lol ( je sens que ca va saigner) en fait dans les includes j´avais mis :
lol je me suis bien pris la tete pour une connerie comme ca, ca m´apprendra a dormir la nuit au lieu de coder ! !
Tiens sinon tant que je suis la, j´ai un autre probleme avec mon piti programmou :
//////////////////////////////////////////////////
//////////////////////////////////////
// //
// DECLARATIONS //
// //
//////////////////////////////////////////////////
//////////////////////////////////////
int rot; //angle de rotation en °
HWND hWnd; //handle de la fenetre
IDirect3D8 *D3D; //objet Direct3D
IDirect3DDevice8 *Device; //objet Device
IDirect3DVertexBuffer8 *VertexBuffer = NULL; //Vertex Buffer
D3DXMATRIX mTransfo; //matrice de reference
D3DXMATRIX mTemporaire; //matrice temporaire
//declaration des fonctions
void D3DInit(void);
void Repaint(void);
//structure VERTEX qui nous permettra de definir les proprietes de ce qu´on veut afficher
struct VERTEX
{
FLOAT x, y, z; //coordonnees des vecteurs dans l´espace ( en pixels)
DWORD color; //couleur
};
//////////////////////////////////////////////////
////////////////////////////////////////
// //
// Initialisation de Vertices[] //
// //
//////////////////////////////////////////////////
////////////////////////////////////////
//tableau Vertices[] qui contient nos vecteurs
VERTEX vertices[] =
{
{ -1.0f, -1.0f, 1.0f, D3DCOLOR_ARGB(255, 255, 0, 128) },
{ 0.0f, 0.5f, 1.0f, D3DCOLOR_ARGB(255, 128, 255, 128) },
{ 1.0f, -1.0f, 1.0f, D3DCOLOR_ARGB(255, 128, 128, 255) },
};
//////////////////////////////////////////////////
//////////////////////////////////////////
// //
// PROCEDURE DES MESSAGES //
// //
//////////////////////////////////////////////////
//////////////////////////////////////////
//Procedure des messages : Recupere les messages et les traite
LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY: PostQuitMessage(0); break;
default: break;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
//////////////////////////////////////////////////
///////////////////////////////////////
// //
// WINMAIN //
// //
//////////////////////////////////////////////////
////////////////////////////////////////
//Procedure WinMain
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
//Classe de la fenetre
WNDCLASS wc;
wc.style = CS_OWNDC;
wc.lpfnWndProc = WindowProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = ( HBRUSH) GetStockObject(BLACK_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = " D3D";
RegisterClass(&);
hWnd = CreateWindow("D3D", " Fenetre Direct3D", WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE, 0, 0, 640, 480, NULL, NULL, hInstance, NULL);
//Appel de D3DInit()
D3DInit();
//Boucle de messages : on redessine la scene tant que l´utilisateur ne veut pas quitter
MSG msg;
while(TRUE)
{
while(PeekMessage(&, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&);
DispatchMessage(&);
if(msg.message == WM_QUIT) break;
}
if(msg.message == WM_QUIT) break;
if(GetAsyncKeyState(VK_ESCAPE)) PostQuitMessage(0);
//On affiche la scene a l´ecran
Repaint();
}
//on libere proprement le Vertex Buffer
if(VertexBuffer)
{
VertexBuffer -> Release();
VertexBuffer = NULL;
}
//on libere proprement : le Device PUIS l´objet D3D
Device -> Release();
Device = NULL;
D3D -> Release();
D3D= NULL;
return 0;
}
//////////////////////////////////////////////////
////////////////////////////////////////////////
// //
// D3D INIT //
// //
//////////////////////////////////////////////////
////////////////////////////////////////////////
//Initialisation de Direct3D
void D3DInit(void)
{
D3D = Direct3DCreate8(D3D_SDK_VERSION); //on cree l´objet Direct3D
D3DDISPLAYMODE displayMode; //structure contenant des infos sur le mode d´affichage
D3D -> GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &); //on initialise displayMode
D3DPRESENT_PARAMETERS d3dpp; //structure contenant des infos sur l´affichage
d3dpp.BackBufferWidth = displayMode.Width; //largeur du Back Buffer
d3dpp.BackBufferHeight = displayMode.Height; //hauteur du Back Buffer
d3dpp.BackBufferFormat = displayMode.Format; //profondeur d´echantillonage des pixels
d3dpp.BackBufferCount = 1; //nombre de Back Buffer
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; //Quand on veut utiliser des effets
d3dpp.hDeviceWindow = NULL; //handle de la fenetre courante
d3dpp.Windowed = TRUE; //mode fenetre ou plein ecran
d3dpp.EnableAutoDepthStencil = TRUE; //Stencil Buffer
d3dpp.Flags = 0; //Parametres optionnels
d3dpp.FullScreen_RefreshRateInHz = 0; //vitesse de rafraichissement de l´ecran ( en Hz)
d3dpp.FullScreen_PresentationInterval = 0; //sert uniquement en mode plein ecran
D3D -> CreateDevice(D3DADAPTER_DEFAULT, //on utilise la carte graphique principale0
D3DDEVTYPE_HAL, //active l´acceleration Hardware
hWnd, //handle de notre fenetre
D3DCREATE_SOFTWARE_VERTEXPROCESSING, //active
le T&
&3dpp, //adresse de la structure D3DPRESENT_PARAMETERS
&); //adresse du Device
//les transformations
D3DXMATRIX matrice; //on declare une matrice
//matrice de la camera
D3DXMatrixPerspectiveFovLH(&, //adresse de notre matrice ( pas de jeu de mot)
D3DX_PI/1.1, //field of view
. 75, //rapport hauteur largeur
1.0, //objets plus proches que 1 non affiches
100.0); //objets plus loins que 100 non affiches
//initialisation de la matrice
Device -> SetTransform(D3DTS_PROJECTION, &(D3DMATRIX)matrice);
D3DXMatrixIdentity(&);
Device -> SetTransform(D3DTS_WORLD, &(D3DMATRIX)matrice);
D3DXMatrixTranslation(&, 0, 0, 10.0);
Device -> SetTransform(D3DTS_VIEW, &(D3DMATRIX)matrice);
Device -> SetRenderState(D3DRS_LIGHTING, FALSE); //desactive les effets de lumiere
//creation du Vertex Buffer
int nbr_vertices = sizeof(vertices) / sizeof(vertices[0]); //taille de tous les vecteurs divises par celle d´un seul
Device -> CreateVertexBuffer(sizeof(VERTEX) * nbr_vertices, //taille du Buffer desire
D3DUSAGE_WRITEONLY, //on ne fait qu´ecrire dans le buffer
D3DFVF_XYZRHW | D3DFVF_DIFFUSE, //flags donnant des infos sur les vecteurs
D3DPOOL_DEFAULT, //gestion de la memoire par defaut
&); //adresse de notre Vertex Buffer
//on donne nos vecteurs au Vertex Buffer
VERTEX *v;
VertexBuffer -> Lock(0, //vecteur de depart
0, //nombre de vecteurs concernes : 0 car on veut tout le Buffer
( BYTE**)&, //pointeur sur le pointeur qu´on vient de declarer
0); //sert pour les flags speciaux
for(int ii = 0; ii < nbr_vertices; ii++)
{
v[ii].x = vertices[ii].x;
v[ii].y = vertices[ii].y;
v[ii].z = vertices[ii].z;
v[ii].color = vertices[ii].color;
}
VertexBuffer -> Unlock(); //libere tout proprement
Device -> SetVertexShader(D3DFVF_XYZ | D3DFVF_DIFFUSE); //type de vecteur utilise et couleur diffuse
Device -> SetStreamSource(0, VertexBuffer, sizeof(VERTEX)); //Notre Vertex Buffer est le Buffer courant
}
//////////////////////////////////////////////////
////////////////////////////////////////////////
// //
// REPAINT() //
// //
//////////////////////////////////////////////////
////////////////////////////////////////////////
//fonction permettant d´afficher la scene
void Repaint(void)
{
int nbr_vertices = sizeof(vertices) / sizeof(vertices[0]);
Device -> Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0); //efface le Frame Buffer
D3DXMatrixIdentity(&);
D3DXMatrixIdentity(&);
D3DXMatrixTranslation(&, 2, 0, 0);
D3DXMatrixMultiply(&, &, &);
Device -> SetTransform(D3DTS_WORLD, ( D3DMATRIX *)&);
Device -> BeginScene(); //Debute la scene
Device -> DrawPrimitive(D3DPT_TRIANGLELIST, 0, nbr_vertices / 3); //Dessine le triangle
Device -> EndScene(); //Arrete la scene
Device -> Present(NULL, NULL, NULL, NULL); //Flippe le Frame Buffer et le Back Buffer
}
Le probleme est dans la fonction Repaint(), j´ai 0 error 0 warning, mais des que je lance le prog windows me dit " fatal error machin unhandled window". Quand je veux le debuguer, il me dit que tous les Device -> SetTransform(tous les arguments) deconnent, mais je pige rien au ( evidemment c´est de l´hexa lol).
La c´est pas une faute d´inattention lol ^^ demander un coup de main c´est abuse ? ? non ? ? merci ! !
Je vais finir par porter plainte contre jv.com ! ! ca s´appelle du sabotage de sources ! rah lala ! a quand une jolie présentation de ce que l´on tape ! !!
tain fuck!! fais chier! je me casse le cul à faire une jolie presentation et voila le resultat bordel de merde!!!!
bon sinon vous avez qu´a faire un copier coller dans VC++ ca devrait marcher ( j´espere)
bin le problème c´est que le forum fait des retours à la ligne automatiquement... donc certaine ligne de commentaires peuvent très bien se retrouver sans // devant : )
bon je vais recommencer sans les commentaires
int rot;
HWND hWnd;
IDirect3D8 *D3D;
IDirect3DDevice8 *Device;
IDirect3DVertexBuffer8 *VertexBuffer = NULL;
D3DXMATRIX mTransfo;
D3DXMATRIX mTemporaire;
void D3DInit(void);
void Repaint(void);
struct VERTEX
{
FLOAT x, y, z;
DWORD color;
};
VERTEX vertices[] =
{
{ -1.0f, -1.0f, 1.0f, D3DCOLOR_ARGB(255, 255, 0, 128) },
{ 0.0f, 0.5f, 1.0f, D3DCOLOR_ARGB(255, 128, 255, 128) },
{ 1.0f, -1.0f, 1.0f, D3DCOLOR_ARGB(255, 128, 128, 255) },
};
LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY: PostQuitMessage(0); break;
default: break;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
WNDCLASS wc;
wc.style = CS_OWNDC;
wc.lpfnWndProc = WindowProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = ( HBRUSH) GetStockObject(BLACK_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = " D3D";
RegisterClass(&);
hWnd = CreateWindow("D3D", " Fenetre Direct3D", WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE, 0, 0, 640, 480, NULL, NULL, hInstance, NULL);
D3DInit();
MSG msg;
while(TRUE)
{
while(PeekMessage(&, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&);
DispatchMessage(&);
if(msg.message == WM_QUIT) break;
}
if(msg.message == WM_QUIT) break;
if(GetAsyncKeyState(VK_ESCAPE)) PostQuitMessage(0);
Repaint();
}
if(VertexBuffer)
{
VertexBuffer -> Release();
VertexBuffer = NULL;
}
Device -> Release();
Device = NULL;
D3D -> Release();
D3D= NULL;
return 0;
}
void D3DInit(void)
{
D3D = Direct3DCreate8(D3D_SDK_VERSION); D3DDISPLAYMODE displayMode;
D3D -> GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &);
D3DPRESENT_PARAMETERS d3dpp;
d3dpp.BackBufferWidth = displayMode.Width; d3dpp.BackBufferHeight = displayMode.Height; d3dpp.BackBufferFormat = displayMode.Format; d3dpp.BackBufferCount = 1;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.hDeviceWindow = NULL;
d3dpp.Windowed = TRUE; d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.Flags = 0;
d3dpp.FullScreen_RefreshRateInHz = 0; d3dpp.FullScreen_PresentationInterval = 0;
D3D -> CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &3dpp, &);
D3DXMATRIX matrice;
D3DXMatrixPerspectiveFovLH(&, D3DX_PI/1.1, . 75, 1.0, 100.0);
Device -> SetTransform(D3DTS_PROJECTION, &(D3DMATRIX)matrice);
D3DXMatrixIdentity(&);
Device -> SetTransform(D3DTS_WORLD, &(D3DMATRIX)matrice);
D3DXMatrixTranslation(&, 0, 0, 10.0);
Device -> SetTransform(D3DTS_VIEW, &(D3DMATRIX)matrice);
Device -> SetRenderState(D3DRS_LIGHTING, FALSE);
int nbr_vertices = sizeof(vertices) / sizeof(vertices[0]);
Device -> CreateVertexBuffer(sizeof(VERTEX) * nbr_vertices, D3DUSAGE_WRITEONLY, D3DFVF_XYZRHW | D3DFVF_DIFFUSE, D3DPOOL_DEFAULT, &);
VERTEX *v;
VertexBuffer -> Lock(0, 0, ( BYTE**)&, 0);
for(int ii = 0; ii < nbr_vertices; ii++)
{
v[ii].x = vertices[ii].x;
v[ii].y = vertices[ii].y;
v[ii].z = vertices[ii].z;
v[ii].color = vertices[ii].color;
}
VertexBuffer -> Unlock();
Device -> SetVertexShader(D3DFVF_XYZ | D3DFVF_DIFFUSE);
Device -> SetStreamSource(0, VertexBuffer, sizeof(VERTEX));
}
void Repaint(void)
{
int nbr_vertices = sizeof(vertices) / sizeof(vertices[0]);
Device -> Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0);
D3DXMatrixIdentity(&);
D3DXMatrixIdentity(&);
D3DXMatrixTranslation(&, 2, 0, 0);
D3DXMatrixMultiply(&, &, &);
Device -> SetTransform(D3DTS_WORLD, ( D3DMATRIX *)&);
Device -> BeginScene();
Device -> DrawPrimitive(D3DPT_TRIANGLELIST, 0, nbr_vertices / 3);
Device -> EndScene();
Device -> Present(NULL, NULL, NULL, NULL);
}
Ca devrait etre bon la
le plus important c pas de pas oublier de dire au linker d´aller la chercher la lib.
( dans VC6 click droit sur le projet puis settings, linker et ya les lignes avec les lib, tu rajoutes dx8****lib et ca ira)
@#
oki
merci Lightness.
Au fait ton jeu il en est ou ca fait longtemps que j´y ai pas jete un oeil !
" le plus important c pas de pas oublier de dire au linker d´aller la chercher la lib.
( dans VC6 click droit sur le projet puis settings, linker et ya les lignes avec les lib, tu rajoutes dx8****lib et ca ira) "
Vi mais je préfère de loin les rajouter moi même directement dans le source : )
ahah lol aitonfrere : )
c vrai c bien pour le portage de projet sur une autre IDE : )
bon treve de solutions detournées.
mon projet j´ai pas eu le temps de l´avancer ces derniers 4m ois parce ke c´etait la période ou on etait vraiment a fond dans la physique et ca a pris bcp de temps.
mais c le vacances demain donc ca va repartir pour une bonne séance de codage.
je vais d´abord restructurer un peu tout ca.
puis apres partitionnement de l´espace
puis detection des collisions juste derriere c vraiment une grosse étape.
www.serhum.fr.st
" c vrai c bien pour le portage de projet sur une autre IDE"
quel intérêt de changer d´IDE ? ? pour passer de VC++ a DevC++ ? ? mouarf faut être maso : )
( mais bon les #ifdef c´est pas fait pour les chiens . .. surtout pour un portage Windows->Linux)
mouarf, en plus #pragma comment(libn...) est reconnu par les autres : )