Was ist das Problem bei dem Textur-Laden?



  • Hi

    Ich bin daran eine DLL zu Programmieren. Doch nun, wenn ich eine Textur laden will, wird sie nicht richtig geladen, hier ist ein Codeausschnitt:

    // Cube3DEngineRenderer.h
    //
    
    #ifndef RENDERER_HPP
    #define RENDERER_HPP
    
    #include <windows.h>
    #include "Cube3DEngine.h"
    #include "Definitions.h"
    #include "Structures.h"
    #include "D3D.h"
    #include "Cube3DEngineRenderObjects.h"
    
    #pragma once
    class Cube3DEngine;
    class Cube3DEnigneRenderObjects;
    struct SCube3DEngineProperties;
    enum Cube3DEngineRenderObjects;
    
    struct Cube3DEngine_Vertex
    {
    	float x, y, z;
    	DWORD Color;
    };
    
    #define Cube3DEngine_FVF (D3DFVF_XYZ | D3DFVF_DIFFUSE)
    
    namespace C3E
    {
    
    	class CUBE3DENGINE_DLL_API Cube3DEngineRenderer
    	{
    	public:
    
    		Cube3DEngineRenderer();
    		void SetProjection(float Radius);
    		void SetFVF(C3E::Cube3DEngineFVF FVF);
    		void SetCamera(float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3);
    		void SetPosition(float x, float y, float z);
    		void SetTranslation(float x, float y, float z);
    		void SetRotationXAndTranslation(float Radius, float X, float Y, float Z);
    		void SetRotationYAndTranslation(float Radius, float X, float Y, float Z);
    		void SetRotationZAndTranslation(float Radius, float X, float Y, float Z);
    		void SetRotationXYZAndTranslation(float RadiusX, float RadiusY, float RadiusZ, float Radius, float X, float Y, float Z);
    		void SetRotationX(float Radius);
    		void SetRotationY(float Radius);
    		void SetRotationZ(float Radius);
    		void SetRotationXYZ(float RadiusX, float RadiusY, float RadiusZ, float Radius);
    		void SetObjectColor(float R, float G, float B, float A, float Power);
    
    		bool SetTexture(LPSTR filename); // Das ist die Funktion, um eine Textur zu laden.
    
    		bool LoadModel(char * filename);
    		bool InitD3D(HWND hwnd);
    		bool InitVertexBuffer(int VertexPoints);
    		void InitTriangle(float x1, float y1, float z1, DWORD Color1, float x2, float y2, float z2, DWORD Color2, float x3, float y3,  float z3, DWORD Color3);
    
    		void RenderObject(Cube3DEngineRenderObject RenderObject);
    		void RenderModel();
    		void RenderTriangle();
    
    		void ClearVertexBuffer();
    		void ClearModel();
    
    	private:
    
    		Cube3DEngine *				pCube3DEngine;
    		Cube3DEngineRenderObjects *	pCube3DEngineRenderObjects;
    		SCube3DEngineProperties		SProperties;
    
    		LPD3DXMESH					pModel;
    
    		LPDIRECT3DVERTEXBUFFER9 *	pVertexBuffer;
    
    		LPDIRECT3DTEXTURE9			pTexture; // Die Textur
    
    		D3DMATERIAL9 *				Material;
    		D3DMATERIAL9				MaterialObject;
    
    		DWORD						numMaterials;
    
    		D3DXMATRIX					mProjection;
    		D3DXMATRIX					mView;
    		D3DXMATRIX					mWorld;
    		D3DXMATRIX					mTranslation;
    		D3DXMATRIX					mRotationX;
    		D3DXMATRIX					mRotationY;
    		D3DXMATRIX					mRotationZ;
    		D3DXMATRIX					mRotationXYZ;
    	};
    }
    
    #endif
    
    bool Cube3DEngineRenderer::SetTexture(LPSTR filename)
    	{
    		HRESULT hResult;
    
    		if(FAILED(hResult = D3DXCreateTextureFromFileEx(g_pD3D->d3ddev,
    														filename,
    														D3DX_DEFAULT,
    														D3DX_DEFAULT,
    														D3DX_DEFAULT,
    														0,
    														D3DFMT_UNKNOWN,
    														D3DPOOL_MANAGED,
    														D3DX_DEFAULT,
    														D3DX_DEFAULT,
    														0,
    														NULL,
    														NULL,
    														&pTexture)))
    		{
    			MessageBox(NULL, "Fehler beim Laden der Würfel-Texture!", "Fehler aufgetreten",
    					   MB_OK | MB_ICONEXCLAMATION);
    
    			return(false);
    		}
    
    		if(FAILED(hResult = g_pD3D->d3ddev->SetTexture(0, pTexture)))
    		{
    			MessageBox(NULL, "Fehler beim Setzen der Würfel-Texture!", "Fehler aufgetreten",
    					   MB_OK | MB_ICONEXCLAMATION);
    
    			return(false);
    		}
    
    		return true;
    	}
    
    C3E::Cube3DEngineRenderObjects * Cube4;
    Cube4 = new C3E::Cube3DEngineRenderObjects();
    Cube4->InitCubeWithTexture("Wiese.jpg");
    

    Kann mir jemand dabei helfen?

    Gruss Patrick



  • Ist die Textur auch vorhanden sprich ist dein Pfad zur Textur richtig? Ansonsten gibt dir der zurück gegebene Fehlercode genauere Hinweise darauf, was in deinem Code falsch gelaufen ist.

    Gruß Kimmi



  • Ich habe zu begin den falschen Code geschickt, es wäre dieser hier:

    // Cube3DEngineRenderObjects.h
    //
    #ifndef RENDEROBJECTS_HPP
    #define RENDEROBJECTS_HPP
    
    #include "Structures.h"
    #include "Definitions.h"
    #include "D3D.h"
    
    namespace C3E
    {
    	class CUBE3DENGINE_DLL_API Cube3DEngineRenderObjects
    	{
    	public:
    
    		Cube3DEngineRenderObjects();
    		bool InitVertexBuffer(int VertexPoints);
    		void InitCube();
    		void InitCubeWithTexture(char * filename);
    		void InitTriangle(float x1, float y1, float z1, DWORD Color1, float x2, float y2, float z2, DWORD Color2, float x3, float y3, float z3, DWORD Color3);
    
    		void RenderCube();
    		void RenderCubeWithTexture();
    		void RenderObject();
    		void RenderTriangle();
    
    		void ClearCube();
    		void ClearTriangle();
    		void ClearVertexBuffer();
    
    	private:
    
    		LPDIRECT3DVERTEXBUFFER9		pVertexBuffer;
    		LPDIRECT3DTEXTURE9			pCubeTexture;
    		LPDIRECT3DVERTEXBUFFER9		v_buffer;
    		LPDIRECT3DINDEXBUFFER9		i_buffer;
    		C3E::Cube3DEngineVertex1	pTriangleVertices[3];
    	};
    }
    
    #endif
    
    void Cube3DEngineRenderObjects::InitCubeWithTexture(char * filename)
    	{
    		HRESULT hResult;
    
    		// create the vertices using the CUSTOMVERTEX struct
    		C3E::Cube3DEngineVertex4 vertices[] =
        {
            { -3.0f, -3.0f, 3.0f, 0.0f, 0.0f, },    // side 1
            { 3.0f, -3.0f, 3.0f, 0.0f, 1.0f, },
            { -3.0f, 3.0f, 3.0f, 1.0f, 1.0f, },
            { 3.0f, 3.0f, 3.0f, 1.0f, 0.0f, },
    
            { -3.0f, -3.0f, -3.0f, 0.0f, 0.0f, },    // side 2
            { -3.0f, 3.0f, -3.0f, 0.0f, 0.0f, },
            { 3.0f, -3.0f, -3.0f, 0.0f, 0.0f, },
            { 3.0f, 3.0f, -3.0f, 0.0f, 0.0f, },
    
            { -3.0f, 3.0f, -3.0f, 0.0f, 1.0f, },    // side 3
            { -3.0f, 3.0f, 3.0f, 0.0f, 1.0f, },
            { 3.0f, 3.0f, -3.0f, 0.0f, 1.0f, },
            { 3.0f, 3.0f, 3.0f, 0.0f, 1.0f, },
    
            { -3.0f, -3.0f, -3.0f, 0.0f, -1.0f, },    // side 4
            { 3.0f, -3.0f, -3.0f, 0.0f, -1.0f, },
            { -3.0f, -3.0f, 3.0f, 0.0f, -1.0f, },
            { 3.0f, -3.0f, 3.0f, 0.0f, -1.0f, },
    
            { 3.0f, -3.0f, -3.0f, 1.0f, 0.0f, },    // side 5
            { 3.0f, 3.0f, -3.0f, 1.0f, 0.0f, },
            { 3.0f, -3.0f, 3.0f, 1.0f, 0.0f, },
            { 3.0f, 3.0f, 3.0f, 1.0f, 0.0f, },
    
            { -3.0f, -3.0f, -3.0f, -1.0f, 0.0f, },    // side 6
            { -3.0f, -3.0f, 3.0f, -1.0f, 0.0f, },
            { -3.0f, 3.0f, -3.0f, -1.0f, 0.0f, },
            { -3.0f, 3.0f, 3.0f, -1.0f, 0.0f, },
        };
    
    	if(FAILED(hResult = D3DXCreateTextureFromFile(g_pD3D->d3ddev, filename, &pCubeTexture)))
    	{
    		MessageBox(NULL, "Fehler beim erstellen der Cube-Texture!", "Fehler aufgetreten",
    					   MB_OK | MB_ICONEXCLAMATION);
    	}
    
        // create a vertex buffer interface called v_buffer
    	g_pD3D->d3ddev->CreateVertexBuffer(24*sizeof(C3E::Cube3DEngineVertex3),
                                   0,
    							   C3E::Cube3DEngineFVF3,
                                   D3DPOOL_MANAGED,
                                   &v_buffer,
                                   NULL);
    
        VOID* pVoid;    // a void pointer
    
        // lock v_buffer and load the vertices into it
        v_buffer->Lock(0, 0, (void**)&pVoid, 0);
        memcpy(pVoid, vertices, sizeof(vertices));
        v_buffer->Unlock();
    
        // create the indices using an int array
        short indices[] =
        {
            0, 1, 2,    // side 1
            2, 1, 3,
            4, 5, 6,    // side 2
            6, 5, 7,
            8, 9, 10,    // side 3
            10, 9, 11,
            12, 13, 14,    // side 4
            14, 13, 15,
            16, 17, 18,    // side 5
            18, 17, 19,
            20, 21, 22,    // side 6
            22, 21, 23,
        };
    
        // create an index buffer interface called i_buffer
        g_pD3D->d3ddev->CreateIndexBuffer(36*sizeof(short),
                                  0,
                                  D3DFMT_INDEX16,
                                  D3DPOOL_MANAGED,
                                  &i_buffer,
                                  NULL);
    
        // lock i_buffer and load the indices into it
        i_buffer->Lock(0, 0, (void**)&pVoid, 0);
        memcpy(pVoid, indices, sizeof(indices));
        i_buffer->Unlock();
    	}
    
    C3E::Cube3DEngineRenderObjects * Cube4;
    Cube4 = new C3E::Cube3DEngineRenderObjects();
    Cube4->InitCubeWithTexture("Wiese.jpg");
    

    Wenn ich nun das Programm starte, dann kommt diese Meldung:

    MessageBox(NULL, "Fehler beim erstellen der Cube-Texture!", "Fehler aufgetreten",
    					   MB_OK | MB_ICONEXCLAMATION);
    

  • Mod

    was hat dir das befolgen dieses tipps fuer ein resultat geliefert?

    kimmi schrieb:

    Ansonsten gibt dir der zurück gegebene Fehlercode genauere Hinweise darauf, was in deinem Code falsch gelaufen ist.


Anmelden zum Antworten