Problem mit dem Laden von Texturen !!



  • Hi,

    Ich versuch momentan. eine Texture per Hand zu laden, klappt aber irgentwie nicht.

    Ich bekomm immer nur eine Blaue Textur.

    Vielleicht kann jemand von euch mir helfen !

    VOID LoadTextureFromFile( IDirect3DTexture9 **pTexture, const char *szFile )
    {
    HRESULT hr;
    D3DLOCKED_RECT LockedRect;
    
    FILE *bmp; 
    bmp = fopen("texture.bmp","rb"); 
    
    BITMAPFILEHEADER bitmap_header; //Bitmap-Header 
    BITMAPINFOHEADER bitmap_info;   //Bitmap-Info 
    
    fread(&bitmap_header,sizeof(BITMAPFILEHEADER),1,bmp); 
    fread(&bitmap_info,sizeof(BITMAPINFOHEADER),1,bmp); 
    
    	// create Texture
    hr = Video.GetDevice()->CreateTexture(	bitmap_info.biWidth,
    			  							bitmap_info.biHeight,
    										1,
    										D3DUSAGE_DYNAMIC,
    										D3DFMT_A8R8G8B8,
    										D3DPOOL_DEFAULT,
    										pTexture,
    										NULL );
    
    if( FAILED( hr ) )
    {
    	Error( "Texture konnte nicht erstellt werden" );
    	CloseHandle(bmp);
    	return;
    }
    
    // lock texture
    hr = (*pTexture)->LockRect( 0, &LockedRect, NULL, 0 );
    if( FAILED( hr ) )
    {
    	Error( "Texture konnte nicht geloggt werden" );
    }
    
    DWORD *pBufferBits = (DWORD*)LockedRect.pBits;
    
    for(int y = 0; y < bitmap_info.biHeight; y++) 
    { 
        for(int x = 0; x < bitmap_info.biWidth; x++, pBufferBits++) 
        { 
            UCHAR r; 
            UCHAR g; 
            UCHAR b; 
    
            fread(&r,sizeof(UCHAR),1,bmp); 
            fread(&g,sizeof(UCHAR),1,bmp); 
            fread(&b,sizeof(UCHAR),1,bmp);
    
    		(*pBufferBits) = nXColor_ARGB( 255, r, g, b, D3DFMT_A8R8G8B8 );
        } 
    } 
    
    hr = (*pTexture)->UnlockRect(0);
    if( FAILED( hr ) )
    {
    	Error( "Texture konnte nicht geloggt werden" );
    }
    
    fclose( bmp );
    
    }
    

    Cu



  • fread(&bitmap_header,sizeof(BITMAPFILEHEADER),1,bmp);  
    fread(&bitmap_info,sizeof(BITMAPINFOHEADER),1,bmp);
    

    hier liest du ja zewimal von der gleichen Stelle ein, nur mit einer anderen Größe
    du musst dazwischen noch fseek setzen
    damit du denn Filezeiger vom Fileheader auf den Infoheader setzt



  • Hi,
    Das wird von fread automatisch gemacht !
    Bye



  • Hi,
    Es funktioniert jetzt alles wunderbar.

    Feheler:

    #define D3DFVF_CUSTOMVERTEX ( D3DFVF_XYZ | D3DFVF_TEX0 )
    

    Es muss aber so sein:

    #define D3DFVF_CUSTOMVERTEX ( D3DFVF_XYZ | D3DFVF_TEX1 )
    

    Warum eig. ? Ich will doch die 1. Texture setzte und das fängt doch bei 0 an.

    Bye



  • Hi,
    Hat sich erledigt. Danke & Cu.

    D3DFVF_TEX0 - D3DFVF_TEX8 Number of texture coordinate sets for this vertex. The actual values for these flags are not sequential.


Anmelden zum Antworten