Fehler beim laden von Mesh



  • hallo ihr lieben 🙂 ,

    ich habe ein kleines problem mit dem laden einer mesh , undzwar benutze ich die function D3DXLoadMeshFromX() aber wenn ich sie ausführe kriege ich eine unterbrechumg des programms , weil irgentwelche zugriffsrechte von der mesh nicht eingehalten werden. mein code sieht wie folgt aus :

    Basis Klasse :

    class BasicMap
    {
    public:
    	virtual void Init() = 0;
    	virtual void Update(float dt) = 0;
    	virtual void Render(IDirect3DDevice9* device) = 0;
    
    	LPD3DXBUFFER materialBuffer;
    	LPD3DXMESH mesh;
    	D3DXMATERIAL* d3dxMaterials;
    	D3DMATERIAL9* meshMaterial;
    	LPDIRECT3DTEXTURE9* meshTextures;
    	DWORD numMaterials;
    
    	D3DXVECTOR3 position;
    	D3DXVECTOR3 rotation;
    	D3DXVECTOR3 scale;
    	std::string ID;
    	std::string Name;
    };
    

    vererbte Klasse:

    class Grass : public BasicMap
    {
    public:
    	Grass(D3DXVECTOR3 pos, D3DXVECTOR3 rot, D3DXVECTOR3 scal, IDirect3DDevice9* device);
    	~Grass();
    
    	void Init() override;
    	void Update(float dt) override;
    	void Render(IDirect3DDevice9* device) override;
    
    };
    

    konstructor:

    Grass::Grass(D3DXVECTOR3 pos, D3DXVECTOR3 rot, D3DXVECTOR3 scal, IDirect3DDevice9* device)
    {
    	position = pos;
    	rotation = rot;
    	scale = scal;
    
    	materialBuffer = NULL;
    	numMaterials = NULL;
    	mesh = NULL;
    	HRESULT hr = D3DXLoadMeshFromX("tiger.x", D3DXMESH_SYSTEMMEM, device, NULL, &materialBuffer, NULL, &numMaterials, &mesh);
    	if (FAILED(hr))
    		MessageBox(0, "failed to load mesh", "Error", 0);
    
    	d3dxMaterials = (D3DXMATERIAL*)materialBuffer->GetBufferPointer();
    	meshMaterial = new D3DMATERIAL9[numMaterials];
    	meshTextures = new LPDIRECT3DTEXTURE9[numMaterials];
    
    	for (DWORD i = 0; i<numMaterials; i++)
    	{
    		meshMaterial[i] = d3dxMaterials[i].MatD3D;
    		meshMaterial[i].Ambient = meshMaterial[i].Diffuse;
    		meshTextures[i] = NULL;
    		if (d3dxMaterials[i].pTextureFilename)
    			D3DXCreateTextureFromFile(device, d3dxMaterials[i].pTextureFilename, &meshTextures[i]);
    	}
    
    	materialBuffer->Release();
    }
    

    vllt findet ihr ja den fehler,
    schonmal danke im vorhinein 😃



  • "irgentwelche zugriffsrechte von der mesh werden nicht eingehalten."

    Das ist die Fehlermeldung?



  • Ausnahme (erste Chance) bei 0x589F2CDC (D3DX9_43.dll) in Projekt1.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xCDCDCDCD

    Falls ein Handler für diese Ausnahme vorhanden ist, kann das Programm möglicherweise weiterhin sicher ausgeführt werden.

    dass kommt in der zeile in der &mesh steht



  • Dann guck mal mit dem Debugger, welcher deiner Zeiger diesen Wert hat.



  • Dein Programm greift über einen nicht initialisierten Pointer auf ein Objekt zu. Der Debugger wird dir Genaueres verraten...



  • ursprünglich waren die attribute für die loadmesh funktion auf mehrere zeilen aufgeteilt und bei der &mesh zeile blieb es stehen



  • Wie gesagt: Debuggen...



  • es tut mir sehr leid aber ich weiss nicht wie ich den fehler beim debuggen finden soll 😕 könntest du mir sagen worauf ich achten soll?



  • Na der Debugger breaked dir doch an der Stelle, wo der Zugriffsfehler passiert. Check dort eben mal ab, welcher Pointer diesen Wert hat. Und dann wirst du rausfinden müssen, wieso er diesen Wert hat...wichtiges Stichwort: Callstack



  • er stoppt an der stelle , an welcher ich eine referenz der mesh übergebe .
    die mesh habe ich vorher nicht definiert , allerdings geht es auch mit definietion nicht. die mesh ist aßerdem kein pointer bis ich sie übergebe.

    sry wenn ich mich blöd anstelle 😕 und dir vielen dank für deine hilfe @dot 👍



  • Was für einen Wert hat device an der Stelle?



  • 0xcdcdcdcd



  • ...



  • cool danke 😃

    ich danke dir wirklich vielmals :**
    ich war zurz vorm verzweifeln



  • nochmal vielen dank , dass laden klappt jetzt , ich habe die loadMesh funktion in die Init funktion gepackt , statt in den konstruktor. allerdings habe ich ein (vorläufig) letztes problem. die meshes die ich lade , werden mir in einer sehr in die höhe gezogenen form angezeigt ein mann bspw. wird dann nur als "strich" in die höhe angezeigt . irgendwelche ideen woran dass liegen könnte?


Anmelden zum Antworten