Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565

    C++ - DirectX - Problema coi Rect

    Salve a tutti.
    Mi sto cimentando con le DirectX9 e ora sono arrivato un po ad usare le Surface, caricare immagini e visualizzarle sullo schermo.
    Non ho avuto problemi a creare un sottofondo in Dx alla mia finestra. Ma se voglio prendere solo una parte di immagine, so che devo usare i RECT per di sorgente e destinazione. Qui sorgono trecentomila problemi. Vi illustro un po la situazione.

    Io ho la mia funzione render
    void Render(void);
    la quale viene richiamata ogni volta che la finestra deve essere ridisegnata. La funzione Render è cosi strutturata

    codice:
    void Render()
    {
    
    IDirect3DSurface9* BackBuffer	 = NULL; 
    IDirect3DSurface9* SpriteSurface = NULL;
    //BackBuffer è la surface di destinazione
    //SpriteSurfaec è quella sorgente
    
    SpriteSurface = CaricaSprite( "Quadratino.bmp" );
    if (SpriteSurface == NULL)
    	return;
    //Questa funzione carica lo sprite nella memoria e //restituisce un puntatore alla surface caricata
    
        if( NULL == g_pd3dDevice )
            return;
    
        g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
        
        if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
        {
        
    		g_pd3dDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&BackBuffer);
    
    		RECT Prova;
    		RECT DestProva;
    		Prova.bottom = 4;
    		Prova.left = 17;
    		Prova.right = 21;
    		Prova.top = 41;
    
    		DestProva.bottom = 50;
    		DestProva.left = 50;
    		DestProva.right = 50;
    		DestProva.top = 50;
    //Qui sorgono i problemi (leggete sotto)
    		g_pd3dDevice->StretchRect(SpriteSurface,&Prova,BackBuffer,&DestProva,D3DTEXF_NONE);
    //Disegna sullo schermo
            g_pd3dDevice->EndScene();
        }
    
        g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
    }
    Spero che il codice sia chiaro.
    Ad ogni modo quoto la parte dei probemi
    RECT Prova;
    RECT DestProva;
    Prova.bottom = 4;
    Prova.left = 17;
    Prova.right = 21;
    Prova.top = 41;

    DestProva.bottom = 50;
    DestProva.left = 50;
    DestProva.right = 50;
    DestProva.top = 50;
    In pratica creo due RECT che verranno quindi passati alla funzione del disegno.
    Essendo la mia immagine grande 48x48, i valori di Prova non pssono superare il valore 48.
    I Dubbio: Un rettangolo è un parallelogramma che ha i lati paralleli a due a due: quindi left dovrebbe essere sempre uguale a right. E' quindi evidente che RECT non è altro che un nome semplice: in realtà ciò che prende il pezzo di immagine è un quadrilatero semplice,vero?
    Comunque, il Rect prova dovrebbe essere giusto...
    Passiamo ora al DestProva: essendo in questo caso il mio schermo grande 640x480, i vari valori non devono superare 640 e 480,giusto?
    Come vedete i valori sono tutti a 50, eppure mi da Invalid Dest Rect!!! E' stranissimo! Cosi io comincio a variare i valori di DestProva e mi ritrovo con un errore del Source Rect...cio è una volta Dest e una volta il Src rect? Ma quale è quello sbagliato?
    II Dubbio: l'immagine è 48x48: quindi se io col DestProva (ammesso che funzionasse) prende un rettangolo maggiore dell'immagine: l'immagine verrà quindi ingrandita alle dimensioni del rettangolo?
    Grazie mille per l'aiuto!

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Dal basso della mia ignoranza ti dico che:
    1) DestProva è sbagliato perchè è un punto, non un rettangolo. Hai tutti e 4 i vertici nello stesso punto !
    2) Forse Prova è sbagliato perchè bottom deve essere maggiore di top, ma su questo non ti do garanzie.

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    No non guardare quella parte ho scritto 50 in tutti i punti per fare piu' presto
    Cambiado i numeri certe volte dice pure invalid: zero area come se non avessi preso nessuna area...

  4. #4
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    hop

  5. #5
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Aiuto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.