[C++]Problem beim laden von *.x-Files

MSAB

Mitglied
Moin, ja ich schon wieder...

Undzwar habe ich diesmal ein Problem beim laden von *.x-Files.
Es kommen mal wieder Linker-Fehler:

1>Linking...
1>MAIN.obj : error LNK2001: unresolved external symbol "struct X3DMODELL_TYP __cdecl xMod_lade_XFile(char *)" (?xMod_lade_XFile@@$$FYA?AUX3DMODELL_TYP@@PAD@Z)
1>MAIN.obj : error LNK2001: unresolved external symbol "int __cdecl xMod_rendere(struct X3DMODELL_TYP *)" (?xMod_rendere@@$$FYAHPAUX3DMODELL_TYP@@@Z)
1>C:\Dokumente und Einstellungen\MalteB\Eigene Dateien\Visual Studio 2005\Projects\Engine\Release\Engine.exe : fatal error LNK1120: 2 unresolved externals


Hier mal ein Code-Ausschnitt:

Code:
typedef struct X3DMODELL_TYP {
   DWORD               dwNumMaterials;
   D3DMATERIAL9        *pMeshMaterials;
   LPDIRECT3DTEXTURE9  *pMeshTextures;
   LPD3DXMESH          pMesh;
   } X3DMODELL;

typedef struct XOBJEKT_TYP {
   D3DMATRIX  matWelt;
   D3DVECTOR  vPos;
   float      fRotX, fRotY, fRotZ;
   X3DMODELL  Modell;
   } XOBJEKT;

void xUtil_RotationsmatrixX(D3DMATRIX *mat, float fRads);

void xUtil_RotationsmatrixY(D3DMATRIX *mat, float fRads);

void xUtil_RotationsmatrixZ(D3DMATRIX *mat, float fRads);

void xUtil_MatrixMult(D3DMATRIX *C, D3DMATRIX *A, D3DMATRIX *B);

inline void xUtil_Einheitsmatrix(D3DMATRIX *mat) {
   mat->_11 = mat->_22 = mat->_33 = mat->_44 = 1.0f;
   mat->_12 = mat->_13 = mat->_14 = mat->_41 = 0.0f;
   mat->_21 = mat->_23 = mat->_24 = mat->_42 = 0.0f;
   mat->_31 = mat->_32 = mat->_34 = mat->_43 = 0.0f;
   } // xUtil_Einheitsmatrix

X3DMODELL xMod_lade_XFile(char* achName);

BOOL xMod_rendere(X3DMODELL* pX);

void xMod_kill(X3DMODELL X);

LPDIRECT3DDEVICE9    g_lpD3DDevice;  // Direct3D Device

void xUtil_RotationsmatrixX(D3DMATRIX *mat, float fRads);

void xUtil_RotationsmatrixY(D3DMATRIX *mat, float fRads);

void xUtil_RotationsmatrixZ(D3DMATRIX *mat, float fRads);

void xUtil_MatrixMult(D3DMATRIX *C, D3DMATRIX *A, D3DMATRIX *B);


XOBJEKT xUtil_init_XObjekt(char *achName, float fX, float fY, float fZ);

void xUtil_transformiere_XObjekt(float fRotX, float fRotY, float fRotZ,
                                 float fDX,   float fDY,   float fDZ,
                                 XOBJEKT *pXObj);

void xUtil_render_XObjekt(XOBJEKT *pXObj);

void xUtil_RotationsmatrixX(D3DMATRIX *mat, float fRads)
   {
   xUtil_Einheitsmatrix(mat);
   (*mat)._22 =  cosf( fRads );
   (*mat)._23 =  sinf( fRads );
   (*mat)._32 = -sinf( fRads );
   (*mat)._33 =  cosf( fRads );
   } // xUtil_RotationsmatrixX

void xUtil_RotationsmatrixY(D3DMATRIX *mat, float fRads)
   {
   xUtil_Einheitsmatrix(mat);
   (*mat)._11 =  cosf( fRads );
   (*mat)._13 = -sinf( fRads );
   (*mat)._31 =  sinf( fRads );
   (*mat)._33 =  cosf( fRads );
   } // xUtil_RotationsmatrixY

void xUtil_RotationsmatrixZ(D3DMATRIX *mat, float fRads)
   {
   xUtil_Einheitsmatrix(mat);
   (*mat)._11  =  cosf( fRads );
   (*mat)._12  =  sinf( fRads );
   (*mat)._21  = -sinf( fRads );
   (*mat)._22  =  cosf( fRads );
   } // xUtil_RotationsmatrixZ

void xUtil_MatrixMult(D3DMATRIX *C, D3DMATRIX *A, D3DMATRIX *B) {
   FLOAT* pA = (FLOAT*)A;
   FLOAT* pB = (FLOAT*)B;
   FLOAT  pM[16];

   ZeroMemory( pM, sizeof(D3DMATRIX) );

   for(WORD i=0; i<4; i++) 
      for(WORD j=0; j<4; j++) 
         for(WORD k=0; k<4; k++) 
            pM[4*i+j] +=  pA[4*i+k] * pB[4*k+j];

   memcpy(C, pM, sizeof(D3DMATRIX));
   } // xUtil_MatrixMult

XOBJEKT xUtil_init_XObjekt(char *achName, float fX, float fY, float fZ) {
   XOBJEKT   XObj;

   // X File in XOBJEKT laden
   XObj.Modell = xMod_lade_XFile(achName);
   // Weltmatrix des Objektes
   xUtil_Einheitsmatrix(&(XObj.matWelt));

   // Rotationswinkel des Objektes
   XObj.fRotX = 0.0f;
   XObj.fRotY = 0.0f;
   XObj.fRotZ = 0.0f;
   
   // Position des Objektes
   XObj.vPos.x  = XObj.matWelt._41 = fX;
   XObj.vPos.y  = XObj.matWelt._42 = fY;
   XObj.vPos.z  = XObj.matWelt._43 = fZ;


   return XObj;
   } // xUtil_init_XObjekt

void xUtil_transformiere_XObjekt(float fRotX, float fRotY, float fRotZ,
                                 float fPosX, float fPosY, float fPosZ,
                                 XOBJEKT *pXObj) {
   D3DMATRIX matRotX, matRotY, matRotZ,
             matTemp, matWelt;

   // Rotationsmatrizen erzeugen
   xUtil_RotationsmatrixX(&matRotX, fRotX);
   xUtil_RotationsmatrixY(&matRotY, fRotY);
   xUtil_RotationsmatrixZ(&matRotZ, fRotZ);

   // Weltmatrix für Rotationen erstellen
   xUtil_MatrixMult(&matTemp, &matRotX, &matRotY);
   xUtil_MatrixMult(&matWelt, &matTemp, &matRotZ);
   (*pXObj).matWelt = matWelt;

   // Position verschieben
   (*pXObj).vPos.x = fPosX;
   (*pXObj).vPos.y = fPosY;
   (*pXObj).vPos.z = fPosZ;

   // Verschiebung in Weltmatrix speichern
   (*pXObj).matWelt._41 = pXObj->vPos.x;
   (*pXObj).matWelt._42 = pXObj->vPos.y;
   (*pXObj).matWelt._43 = pXObj->vPos.z;
   } // xUtil_transformiere_XObjekt

void xUtil_render_XObjekt(XOBJEKT *pXObj) {
   // Verschiebung und Rotation für Device einstellen
   g_lpD3DDevice->SetTransform(D3DTS_WORLD, &pXObj->matWelt);

   // 3D Modell des XOBJEKT rendern
   g_lpD3DDevice->BeginScene();
      xMod_rendere(&pXObj->Modell);
   g_lpD3DDevice->EndScene();
   } // xUtil_render_XObjekt

Die Fehler treten aufjedem Fall nicht auf, wenn ich diese beiden Zeilen ausklammere:

XObj.Modell = xMod_lade_XFile(achName);

xMod_rendere(&pXObj->Modell);



Schonmal danke für eure Hilfe, ich selber finde den Fehler nämlich einfach nicht.
Diesen Part habe ich übrigens aus einem Tutorial entnommen.

P.S.: Wehe ich habe mich wieder irgendwo verschrieben :-(

MfG
MSAB
 
Das ist doch ein Linker - Fehler, hast Du die D3D-Bibliothek nicht in den Linker-Pfad eingetragen? Steht bestimmt was dazu in deinem Tutorial! Welches hast Du denn benutzt?
 
Ich denke mal es hat nichts mit den Bibliothecken zu tun.

Die Funktionen

X3DMODELL xMod_lade_XFile(char* achName);

und

BOOL xMod_rendere(X3DMODELL* pX);

sind wahrscheinlich nirgends ausprogrammiert oder werden nicht mitkompiliert
 
Nein, mit Biliotheken hat das in diesem Fall nichts zu tuen, da bin ich mir recht sicher.

@ Flegmon: Könnte sein. Diesen Teil habe ich aus diesenm Tutorial:http://www.zfx.info/Tutorials.php?ID=8
Jenes ist jedoch für DirectX8 gewesen und ich habe es so gut es ging nach directX9 umgeändert. Daher kann ich Fehler nicht ausschließen.
Da ich momentan noch keine wirklich Ahnung mit dem Laden von .x-Files habe, poste ich nochmal den gesammten Source-Text.

Ist leider ein bischen Chaotisch, da viele Teile noch aus anderem Tutorials stammten, bzw. aus meinen eigenen Mist gewachsen sind:-)

Wäre für jede Hilfe dankbar

Code:
///////////////////////////////////Header//////////////////////////////////
#include <windows.h>
#include <d3d9.h>
#include <d3dx9.h>
#include <stdio.h>       // Datentyp FILE
#include <d3dx9mesh.h>

#pragma comment (lib, "d3d9.lib")
#pragma comment (lib, "user32.lib")
#pragma comment (lib, "d3dx9.lib")
#pragma comment (lib, "gdi32.lib")
#pragma comment (lib, "advapi32.lib")



////////////////////////////////////Globale Variablen//////////////////////
//Direct X
LPDIRECT3D9				D3D9				    ;
LPDIRECT3DDEVICE9		D3D9Dev			 = NULL ;
LPDIRECT3DVERTEXBUFFER9 D3DVertexBuffer9 = NULL ;

//Für Fenster
HWND hWnd;

//Für Bildschrimgröße
int nBreite = GetSystemMetrics(SM_CXSCREEN);
int nHoehe  = GetSystemMetrics(SM_CXSCREEN);
float rotation = 0.0f, zline = 0.0f, dline = 0.0f;

//Für Framebremse
DWORD dwStartzeit;

/////////////////////////////////////Funktionen/////////////////////////////

bool Bild_erstellen        (void);
void Bild_rendern          (void);
void Programm_beenden      (void);
void Grafik_initialisieren (void);





typedef struct X3DMODELL_TYP {
   DWORD               dwNumMaterials;
   D3DMATERIAL9        *pMeshMaterials;
   LPDIRECT3DTEXTURE9  *pMeshTextures;
   LPD3DXMESH          pMesh;
   } X3DMODELL;

typedef struct XOBJEKT_TYP {
   D3DMATRIX  matWelt;
   D3DVECTOR  vPos;
   float      fRotX, fRotY, fRotZ;
   X3DMODELL  Modell;
   } XOBJEKT;

void xUtil_RotationsmatrixX(D3DMATRIX *mat, float fRads);

void xUtil_RotationsmatrixY(D3DMATRIX *mat, float fRads);

void xUtil_RotationsmatrixZ(D3DMATRIX *mat, float fRads);

void xUtil_MatrixMult(D3DMATRIX *C, D3DMATRIX *A, D3DMATRIX *B);

inline void xUtil_Einheitsmatrix(D3DMATRIX *mat) {
   mat->_11 = mat->_22 = mat->_33 = mat->_44 = 1.0f;
   mat->_12 = mat->_13 = mat->_14 = mat->_41 = 0.0f;
   mat->_21 = mat->_23 = mat->_24 = mat->_42 = 0.0f;
   mat->_31 = mat->_32 = mat->_34 = mat->_43 = 0.0f;
   } // xUtil_Einheitsmatrix

X3DMODELL xMod_lade_XFile(char* achName);

BOOL xMod_rendere(X3DMODELL* pX);

void xMod_kill(X3DMODELL X);

LPDIRECT3DDEVICE9    g_lpD3DDevice;  // Direct3D Device

void xUtil_RotationsmatrixX(D3DMATRIX *mat, float fRads);

void xUtil_RotationsmatrixY(D3DMATRIX *mat, float fRads);

void xUtil_RotationsmatrixZ(D3DMATRIX *mat, float fRads);

void xUtil_MatrixMult(D3DMATRIX *C, D3DMATRIX *A, D3DMATRIX *B);


XOBJEKT xUtil_init_XObjekt(char *achName, float fX, float fY, float fZ);

void xUtil_transformiere_XObjekt(float fRotX, float fRotY, float fRotZ,
                                 float fDX,   float fDY,   float fDZ,
                                 XOBJEKT *pXObj);

void xUtil_render_XObjekt(XOBJEKT *pXObj);

void xUtil_RotationsmatrixX(D3DMATRIX *mat, float fRads)
   {
   xUtil_Einheitsmatrix(mat);
   (*mat)._22 =  cosf( fRads );
   (*mat)._23 =  sinf( fRads );
   (*mat)._32 = -sinf( fRads );
   (*mat)._33 =  cosf( fRads );
   } // xUtil_RotationsmatrixX

void xUtil_RotationsmatrixY(D3DMATRIX *mat, float fRads)
   {
   xUtil_Einheitsmatrix(mat);
   (*mat)._11 =  cosf( fRads );
   (*mat)._13 = -sinf( fRads );
   (*mat)._31 =  sinf( fRads );
   (*mat)._33 =  cosf( fRads );
   } // xUtil_RotationsmatrixY

void xUtil_RotationsmatrixZ(D3DMATRIX *mat, float fRads)
   {
   xUtil_Einheitsmatrix(mat);
   (*mat)._11  =  cosf( fRads );
   (*mat)._12  =  sinf( fRads );
   (*mat)._21  = -sinf( fRads );
   (*mat)._22  =  cosf( fRads );
   } // xUtil_RotationsmatrixZ

void xUtil_MatrixMult(D3DMATRIX *C, D3DMATRIX *A, D3DMATRIX *B) {
   FLOAT* pA = (FLOAT*)A;
   FLOAT* pB = (FLOAT*)B;
   FLOAT  pM[16];

   ZeroMemory( pM, sizeof(D3DMATRIX) );

   for(WORD i=0; i<4; i++) 
      for(WORD j=0; j<4; j++) 
         for(WORD k=0; k<4; k++) 
            pM[4*i+j] +=  pA[4*i+k] * pB[4*k+j];

   memcpy(C, pM, sizeof(D3DMATRIX));
   } // xUtil_MatrixMult

XOBJEKT xUtil_init_XObjekt(char *achName, float fX, float fY, float fZ) {
   XOBJEKT   XObj;

   // X File in XOBJEKT laden
   XObj.Modell = xMod_lade_XFile(achName);
   // Weltmatrix des Objektes
   xUtil_Einheitsmatrix(&(XObj.matWelt));

   // Rotationswinkel des Objektes
   XObj.fRotX = 0.0f;
   XObj.fRotY = 0.0f;
   XObj.fRotZ = 0.0f;
   
   // Position des Objektes
   XObj.vPos.x  = XObj.matWelt._41 = fX;
   XObj.vPos.y  = XObj.matWelt._42 = fY;
   XObj.vPos.z  = XObj.matWelt._43 = fZ;


   return XObj;
   } // xUtil_init_XObjekt

void xUtil_transformiere_XObjekt(float fRotX, float fRotY, float fRotZ,
                                 float fPosX, float fPosY, float fPosZ,
                                 XOBJEKT *pXObj) {
   D3DMATRIX matRotX, matRotY, matRotZ,
             matTemp, matWelt;

   // Rotationsmatrizen erzeugen
   xUtil_RotationsmatrixX(&matRotX, fRotX);
   xUtil_RotationsmatrixY(&matRotY, fRotY);
   xUtil_RotationsmatrixZ(&matRotZ, fRotZ);

   // Weltmatrix für Rotationen erstellen
   xUtil_MatrixMult(&matTemp, &matRotX, &matRotY);
   xUtil_MatrixMult(&matWelt, &matTemp, &matRotZ);
   (*pXObj).matWelt = matWelt;

   // Position verschieben
   (*pXObj).vPos.x = fPosX;
   (*pXObj).vPos.y = fPosY;
   (*pXObj).vPos.z = fPosZ;

   // Verschiebung in Weltmatrix speichern
   (*pXObj).matWelt._41 = pXObj->vPos.x;
   (*pXObj).matWelt._42 = pXObj->vPos.y;
   (*pXObj).matWelt._43 = pXObj->vPos.z;
   } // xUtil_transformiere_XObjekt

void xUtil_render_XObjekt(XOBJEKT *pXObj) {
   // Verschiebung und Rotation für Device einstellen
   g_lpD3DDevice->SetTransform(D3DTS_WORLD, &pXObj->matWelt);

   // 3D Modell des XOBJEKT rendern
   g_lpD3DDevice->BeginScene();
     // xMod_rendere(&pXObj->Modell);
   g_lpD3DDevice->EndScene();
   } // xUtil_render_XObjekt





XOBJEKT   xCat;        // 3D Modell



/////////////////////////////////////Strukturen/////////////////////////////

struct VERTEX { float x, y, z; DWORD color;};
#define COSTUMFVF (D3DFVF_XYZ | D3DFVF_DIFFUSE)

/////////////////////////////////////CallBack-Funktion//////////////////////

LRESULT CALLBACK WindowProc (HWND hWnd , UINT Msg , WPARAM wParam , LPARAM lParam)
{
        //Message abfragen
        switch(Msg)
        {
                   case WM_DESTROY: 
		           {
                           PostQuitMessage(0);
                           return 0;
                    } break;
                    // Eine Taste wurde gedrückt
					case WM_KEYDOWN:
                    switch (wParam) 
                    { 
                           //Falls Escape und beenden 
                           case VK_ESCAPE:                                    
                           {
                                    PostMessage(hWnd, WM_CLOSE, 0, 0);
                                    return 0;                                      
                            } 
                            break;
							//Für Entfernungsänderung
								
						   case VK_UP:
							{
									zline -= 1.0f;
							}break;
							case VK_DOWN:	
							{
									zline += 1.0f;
							}break;
							//Für drehänderung
							case VK_RIGHT:
							{
									dline -= 0.005f;
							}break;
							case VK_LEFT:	
							{
									dline += 0.005f;
							}break;
							
                    } 
                    break;
	   default:break;
          } 
          //Nachrichten zurücksetzen
          return (DefWindowProc (hWnd , Msg , wParam , lParam));
}

///////////////////////////////////////WinMain-Funktion///////////////////////

int WINAPI WinMain ( HINSTANCE hInstance , HINSTANCE hPrevInstance , 
                     LPSTR     lpCmdLine , int       nShowCmd      ) 
{
        //Fenstereigenschaften:
        WNDCLASS wc;
        //Messagevariable:
        MSG msg;         
     
        //Stil
        wc.style          = CS_HREDRAW | CS_VREDRAW                ;
        wc.lpszMenuName   = NULL                                   ;
        wc.lpszClassName  = L"Hauptklasse"                         ;
        wc.lpfnWndProc    = WindowProc                             ;
        wc.hInstance      = hInstance                              ;
        wc.hIcon          = NULL                                   ;
        wc.hCursor        = LoadCursor (NULL , IDC_ARROW)          ;
        wc.hbrBackground  = (HBRUSH) GetStockObject (WHITE_BRUSH)  ;
        wc.cbWndExtra     = false                                  ;
        wc.cbClsExtra     = false                                  ;
        
        //Fenster registrieren
        RegisterClass(&wc);
        
        //Fenster erstellen
        
        hWnd = CreateWindowEx (NULL                                    ,
                               L"Hauptklasse"                          ,      
                               L"Automatischer Systemabsturz - Bitte warten"                           ,
                               WS_OVERLAPPEDWINDOW | WS_SYSMENU | WS_VISIBLE ,
                               0       , 0                             ,
                               nBreite , nHoehe                        ,
                               NULL                                    ,
                               NULL                                    ,
                               hInstance                               ,
                               NULL                                    
                               );
        
        //Bild erstellen
        if(!Bild_erstellen())
        {
                  MessageBoxA(NULL , "Fehler beim erstellen des Bildes!" , NULL , 16);
                  return 0;
        }                                
                
//////////////////////////////////////////HAUPSCHLEIFE//////////////////////////////
		// Startzeit der Hauptschleife
		dwStartzeit = GetTickCount();
       
		while (TRUE)
        {
              //Grafiken zeicnen
              Bild_rendern();
              
              //Wenn Nachricht verfügbar 
              if (PeekMessage (&msg , NULL , 0 , 0 , PM_REMOVE))
              {
                      //als WM_QUIT, die Schleife beenden
                      if (msg.message == WM_QUIT)
                             break;
                      
                      DispatchMessage (&msg);
                      TranslateMessage(&msg);
              }
         while ((GetTickCount() - dwStartzeit) < 40);     
        }

        //Variablen löschen
        Programm_beenden();
        
        //Message zurückgeben
        return msg.message;
};  

/////////////////////////////////////////////PHASE 1////////////////////////////////
bool Bild_erstellen(void) 
{
	    //Present Parameter festlegen und Eingeschaften bestimmen
        D3DPRESENT_PARAMETERS D3DPP;

        SecureZeroMemory(&D3DPP, sizeof(D3DPP));
		D3DPP.hDeviceWindow				= hWnd;
		D3DPP.Windowed					= false;
		D3DPP.SwapEffect				= D3DSWAPEFFECT_DISCARD;
		D3DPP.BackBufferFormat			= D3DFMT_X8R8G8B8;
		D3DPP.BackBufferWidth			= 1024;
		D3DPP.BackBufferHeight			= 768;


        //Direct X Objekt erzeugen
        if(!(D3D9 = Direct3DCreate9(D3D_SDK_VERSION)))
        return false;
        
        //Bild erstellen
        D3D9 -> CreateDevice ( D3DADAPTER_DEFAULT , D3DDEVTYPE_HAL , hWnd , 
                               D3DCREATE_HARDWARE_VERTEXPROCESSING , &D3DPP , &D3D9Dev );
		
		//Grafik initalisieren
		Grafik_initialisieren();
		
		D3D9Dev->SetRenderState(D3DRS_LIGHTING, false);
		
		return true;
};
////////////////////////////////////////////PHASE 2///////////////////////////////////

void Bild_rendern(void)
{
        //Prüfen ob D3D9Dev nicht erstellt wurde
        if(D3D9Dev == NULL)
        return;
        
        //Bild rendern:
        //Backpuffer löschen
        D3D9Dev -> Clear (0 , NULL , D3DCLEAR_TARGET , D3DCOLOR_XRGB(10,10,10) , 1.0f , 0);
        //Szene beginnen
		D3D9Dev -> BeginScene();
		//Szene gestalten:
		
		// Matrix für rotierende Kamera bestimmen
		D3DXMATRIX	matRotateY;
		// Variable: Kamera um 3° rechts rotieren lassen
		rotation += 0.03f+dline;
		// Funktion: Kamera um index rotieren lassen
		D3DXMatrixRotationY(&matRotateY, rotation);
		// Welt transformieren
		D3D9Dev->SetTransform(D3DTS_WORLD, &matRotateY);
		// Matrix für Sicht bestimmen
		D3DXMATRIX	matView;
		// Kamera setzen
		D3DXMatrixLookAtLH(	&matView,
							&D3DXVECTOR3(20.0f+zline, 20.0f+zline, 20.0f+zline),
							&D3DXVECTOR3(0.0f, 0.0f, 0.0f),
							&D3DXVECTOR3(0.0f, 1.0f, 0.0f));
		// Sicht erstellen
		D3D9Dev->SetTransform(D3DTS_VIEW, &matView);

		// Matrix für Projektion erstellen
		D3DXMATRIX	matProjection;
		// Kameraaussicht bestimmen
		D3DXMatrixPerspectiveFovLH(&matProjection, 45.0f, nBreite/nHoehe, 62.0f, 0.0f);
		// Projezieren
		D3D9Dev->SetTransform(D3DTS_PROJECTION, &matProjection);



		 float fRotX=0.0f, fRotY=0.0f, fRotZ=0.0f;

		//Vertexformat auswählen
		D3D9Dev -> SetFVF(COSTUMFVF);
		fRotX += 0.06f;  // Drehung auf X Achse
            fRotY += 0.02f;  // Drehung auf Y Achse

            // Objekt xCat rotieren und drehen
            xUtil_transformiere_XObjekt(fRotX, fRotY, fRotZ,
                                        xCat.vPos.x, xCat.vPos.y,
                                        xCat.vPos.z, &xCat);
            // Objekt xCat rendern
            xUtil_render_XObjekt(&xCat);
	
			
			
			//Zum Buffern auswählen
		D3D9Dev -> SetStreamSource (0 , D3DVertexBuffer9 , 0 , sizeof(VERTEX) );
		//Dreick malen
		D3D9Dev -> DrawPrimitive (D3DPT_TRIANGLELIST , 0 , 1);
		//Szene beenden
		D3D9Dev -> EndScene();
		//Bild anzeigen
        D3D9Dev -> Present (NULL , NULL , NULL , NULL);
		        
        return;
};

////////////////////////////////////////////PHASE 3/////////////////////////////////////

void Programm_beenden(void)
{
         //Inhalt der Variablen löschen
if (xCat.Modell.pMesh)
      xMod_kill(xCat.Modell);


         if(D3DVertexBuffer9 != NULL)
			     D3DVertexBuffer9 -> Release();

		 if(D3D9             != NULL)
                 D3D9             -> Release ();
         if(D3D9Dev          != NULL)
                 D3D9Dev          -> Release ();                  
         return;
};

/////////////////////////////////////////////PHASE 4//////////////////////////////////////

void Grafik_initialisieren(void)
{
	xCat = xUtil_init_XObjekt("cat.x", 5.0f, 3.0, 30.0);
	
    VERTEX v[3] =
    {
	    { 2.5f, -3.0f, 0.0f, D3DCOLOR_XRGB(255, 200, 0), },
		{ 0.0f, 13.0f, 3.0f, D3DCOLOR_XRGB(100, 0, 0), },
		{ -2.5f, -3.0f, 0.0f, D3DCOLOR_XRGB(125, 75, 0), },
	};
		

	D3D9Dev->CreateVertexBuffer(   sizeof(VERTEX), 0 , COSTUMFVF ,
									D3DPOOL_MANAGED , &D3DVertexBuffer9 , NULL);
	
	VOID* pVoid;

	D3DVertexBuffer9 -> Lock(0 , 0 , (void**)&pVoid , 0);
    memcpy(pVoid , v , sizeof(v))             ;
	D3DVertexBuffer9 -> Unlock()                        ;

	return;
}
 
Jap, du hast vergessen die beiden Funktionen in den Source zu packen.
Nur ist es nicht gut einfach den Code zu kopieren. Versuche lieber zu verstehen was dort gemacht wird und machs selber. Da hast du viel mehr davon.

Nur dass das Tutorial Funktionen für soetwas nutzt finde ich nicht gut. Da schau dir lieber folgendes an:

http://www.c-unit.com/tutorials/directx/

Da wird zu jedem Thema eine Klasse geschrieben und alles erklärt.
 
Hey, danke Flegmon (2. mal hast du mir geholfen:-) )
Zu dem kopieren: Ja, natürlich. Aber bevor ich mich ranmache, zu verstehen was in diesem Part gemacht wird, will ich's erstmal soweit zum laufen kriegen. Funktioniert das laden erstmal, kann ich viel einfach herausfinden, was das im einzelnen genau macht und der Sinn dieser Sachen ist. Wenn es erst gar nicht funktioniert, bringt es auch nicht viel sich das beizubringen (am Ende könnte es ja dann eh falsch sein)

Thx für die Links, warum bin ich nicht früher auf diese gestoßen:-)
 
Zurück