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:
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
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