Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
killmichnich
unregistriert
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
class CMesh { public: CMesh(); ~CMesh(); bool Create(string mesh); void Draw(); void ComputeRot(D3DXVECTOR3 rot); void SetPosition(D3DXVECTOR3 pos); void SetRotation(D3DXVECTOR3 rot); void SetScaling(D3DXVECTOR3 sca); void Move(D3DXVECTOR3 pos); void Rotate(D3DXVECTOR3 rot); void Scale(D3DXVECTOR3 sca); D3DXVECTOR3 GetRotation(); D3DXVECTOR3 GetPosition(); D3DXVECTOR3 GetScaling(); private: static CDirect3D* Direct3D; static CLog* Log; D3DXVECTOR3 Position; D3DXVECTOR3 Rotation; D3DXVECTOR3 Scaling; D3DXVECTOR3 CRot; LPD3DXMESH Mesh; DWORD NumMaterials; D3DMATERIAL9* Materials; }; CLog* CMesh::Log = CMesh::Log->GetInstance(); CDirect3D* CMesh::Direct3D = CMesh::Direct3D->GetInstance(); CMesh::CMesh() { Mesh = NULL; NumMaterials = NULL; Position = D3DXVECTOR3(0.0f, 0.0f, 0.0f); Rotation = D3DXVECTOR3(0.0f, 0.0f, 0.0f); Scaling = D3DXVECTOR3(1.0f, 1.0f, 1.0f); CRot = D3DXVECTOR3(0.0f, 0.0f, 0.0f); } CMesh::~CMesh() { if(Mesh) { Mesh->Release(); Mesh = NULL; delete Materials; Materials = NULL; } } bool CMesh::Create(string mesh) { LPD3DXBUFFER badjacency; LPD3DXBUFFER bmaterials; LPD3DXBUFFER beffectinstances; string cmesh; for(int i=0; i<mesh.length()-1; i++) { cmesh+=mesh[i]; } HRESULT hr = D3DXLoadMeshFromX(mesh.c_str(), D3DXMESH_MANAGED, Direct3D->Device, &badjacency, &bmaterials, &beffectinstances, &NumMaterials, &Mesh); if(hr!=D3D_OK) { Log->Write("Mesh", "Fehler beim Laden eines des Mesh!"); if(hr==D3DERR_INVALIDCALL) { Log->Write("Mesh", "Invalid Call!"); } else if(hr==E_OUTOFMEMORY) { Log->Write("Mesh", "Out of Memory!"); } else { Log->Write("Mesh", "Keins von beidem!!"); } return false; } D3DXMATERIAL* materials = (D3DXMATERIAL*)bmaterials->GetBufferPointer(); Materials = new D3DMATERIAL9[NumMaterials]; for(int i=0; i<NumMaterials; i++) { Materials[i] = materials[i].MatD3D; } return true; } |
killmichnich
unregistriert
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 |
CMesh::~CMesh() { if(Mesh) { Mesh->Release(); Mesh = NULL; delete [] Materials; Materials = NULL; } } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 |
LPD3DXBUFFER badjacency; LPD3DXBUFFER bmaterials; LPD3DXBUFFER beffectinstances; ... ... ... badjacency->Release(); bmaterials->Release(); beffectinstances->Release(); |
jo danke werd ich mir mal anschaunZitat
Ein Tipp: verwende std::auto_ptr oder tr1::shared_ptr sowie RAII; dann sparst du dir den ganzen Stress. Es lohnt sich wirklich!
killmichnich
unregistriert
killmichnich
unregistriert
Werbeanzeige