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);
-
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.