// Create a stream using AVIFileCreateStream. hr = AVIFileCreateStream(pf, &psSmall, &strhdr); if (hr != 0) { //Stream created OK? If not, close file. AVIFileRelease(pf); return; }
// Set format of new stream using AVIStreamSetFormat. hr = AVIStreamSetFormat(psSmall, 0, &biNew, sizeof(biNew)); if (hr != 0) { AVIStreamRelease(psSmall); AVIFileRelease(pf); return; }
// Allocate memory for the bitmaps. lpNew = GlobalAllocPtr(GMEM_MOVEABLE, biNew.biSizeImage);
Poi, alla fine della funzione di rendering: // Recuperi la bitmap che e' visualizzata al momento sullo schermo e la scrivi in lpNew buffer.
// Save the compressed data using AVIStreamWrite. hr = AVIStreamWrite(psSmall, lStreamSize, 1, lpNew, biNew.biSizeImage, AVIIF_KEYFRAME, NULL, NULL); }
// Close the stream and file. AVIStreamRelease(psSmall); AVIFileRelease(pf); }
Per recuperare la bitmap adesso non ricordo tutto, cmq questo codice dovrebbe funzionare:
memdc.CreateCompatibleDC(pDC); //Make Compatible DC for memdc
C'e' un flag da impostare su DX9 per poter accedere al DC di una finestra, ma ora mi sfugge.
Cmq, mettendo insieme i pezzi ti puoi fare il tuo "registratore video" assolutamente gratuito. Ovviamente le prestazioni della scheda video ne risentiranno, ma almeno non avrai il limite di Fraps. Altra cosa...non ti serve a niente catturare un AVI a piu' di 30 FPS....
grazie, molto interessante. In effetti il problema di fraps sono i 30 secondi piu' che i 30 fps. Gli "scatti" che si vedono a video dipendono piu' che altro dal fatto che il mouse e' troppo sensibile ancora. Ruotando, chiaramente, gli oggetti lontani si muovono molto piu' velocemente di quelli vicini, e un pianeta e' cosi' lontano che basta una variazione di pochi gradi per vederlo schizzare. Un domani divento senior magari potrei anche implementare un blur per rendere i movimenti meno irreali, ma non voglio correre troppo :)
Ah, una cosa che voglio fare e' implementare un lens flare per il sole, ad ogni modo e' ancora prematuro, si tratta di abbellimenti puramente grafici, prima e' piu' urgente occuparsi del gioco vero e proprio, poi in caso provvedero' a rendere il tutto piu' carino, con atmosfere nei pianeti, lens flares, fondali ecc.
2 comments:
Aggiungi winmm.lib e vfw32.lib al progetto.
All'inizio del programma fai
AviFileInit();
// Create a stream using AVIFileCreateStream.
hr = AVIFileCreateStream(pf, &psSmall, &strhdr);
if (hr != 0) { //Stream created OK? If not, close file.
AVIFileRelease(pf);
return;
}
// Set format of new stream using AVIStreamSetFormat.
hr = AVIStreamSetFormat(psSmall, 0, &biNew, sizeof(biNew));
if (hr != 0) {
AVIStreamRelease(psSmall);
AVIFileRelease(pf);
return;
}
// Allocate memory for the bitmaps.
lpNew = GlobalAllocPtr(GMEM_MOVEABLE, biNew.biSizeImage);
Poi, alla fine della funzione di rendering:
// Recuperi la bitmap che e' visualizzata al momento sullo schermo e la scrivi in lpNew buffer.
// Save the compressed data using AVIStreamWrite.
hr = AVIStreamWrite(psSmall, lStreamSize, 1, lpNew,
biNew.biSizeImage, AVIIF_KEYFRAME, NULL, NULL);
}
// Close the stream and file.
AVIStreamRelease(psSmall);
AVIFileRelease(pf);
}
Per recuperare la bitmap adesso non ricordo tutto, cmq questo codice dovrebbe funzionare:
memdc.CreateCompatibleDC(pDC); //Make Compatible DC for memdc
bmp.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
//Create Compatible DDB
pOldBmp=memdc.SelectObject(&bmp);
memdc.BitBlt(0,0,rect.Width(),rect.Height(),pDC,0,0,SRCCOPY);
C'e' un flag da impostare su DX9 per poter accedere al DC di una finestra, ma ora mi sfugge.
Cmq, mettendo insieme i pezzi ti puoi fare il tuo "registratore video" assolutamente gratuito.
Ovviamente le prestazioni della scheda video ne risentiranno, ma almeno non avrai il limite di Fraps.
Altra cosa...non ti serve a niente catturare un AVI a piu' di 30 FPS....
grazie, molto interessante.
In effetti il problema di fraps sono i 30 secondi piu' che i 30 fps.
Gli "scatti" che si vedono a video dipendono piu' che altro dal fatto che il mouse e' troppo sensibile ancora.
Ruotando, chiaramente, gli oggetti lontani si muovono molto piu' velocemente di quelli vicini, e un pianeta e' cosi' lontano che basta una variazione di pochi gradi per vederlo schizzare.
Un domani divento senior magari potrei anche implementare un blur per rendere i movimenti meno irreali, ma non voglio correre troppo :)
Ah, una cosa che voglio fare e' implementare un lens flare per il sole, ad ogni modo e' ancora prematuro, si tratta di abbellimenti puramente grafici, prima e' piu' urgente occuparsi del gioco vero e proprio, poi in caso provvedero' a rendere il tutto piu' carino, con atmosfere nei pianeti, lens flares, fondali ecc.
Post a Comment