Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// ****************************************************************** // ****************************************************************** // // Definition der CVideoSequence Klasse // ****************************************************************** // ****************************************************************** // Struktur für einen Vertex #define VERTEX_FVF (D3DFVF_XYZRHW | D3DFVF_TEX1) struct SVideoVertex { tbVector3 vPosition; float fRHW; tbVector2 vTex0; }; class CVideoSequence { public: // variables // tbVideo* m_pVideo; // Das Video // Konstruktor inline CVideoSequence(void) { ZeroMemory(this,sizeof(CVideoSequence));} // functions // tbResult Init(); tbResult Exit(); tbResult Load(); tbResult Unload(); tbResult Move(float fTime); tbResult Render(float fTime); }; |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
tbResult CVideoSequence::Init() { // Laden if(Load()) TB_ERROR("Fehler beim Laden der Videodatei",TB_ERROR); return TB_OK; } tbResult CVideoSequence::Exit() { // Entladen if(Unload()) TB_ERROR("Fehler beim Entladen der Videodatei",TB_ERROR); return TB_OK; } tbResult CVideoSequence::Load() { // die Filmdatei laden und abspielen ( Player öffnen ) m_pVideo = new tbVideo; m_pVideo->Init("test.avi"); // Video mit Looping abspielen m_pVideo->Play(TRUE); return TB_OK; } tbResult CVideoSequence::Unload() { // Video löschen TB_SAFE_DELETE(m_pVideo); return TB_OK; } tbResult CVideoSequence::Move(float fTime) { // Das Video verarbeiten m_pVideo->Process(); return TB_OK; } tbResult CVideoSequence::Render(float fTime) { SVideoVertex aVertex[4]; // Wenn die Videotextur gerade gesperrt ist, warten wir so lange, // bis sie es nicht mehr ist. while(m_pVideo->GetRenderer()->IsTextureLocked()) {} // Puffer leeren tbDirect3D::Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, tbColor(0.0f, 0.0f, 0.0f), 1.0f, 0); // Die Szene beginnen tbDirect3D::BeginScene(); // ------------------------------------------------------------------ // Vertexformat und Videotextur setzen, Z-Buffer aus tbDirect3D::SetFVF(VERTEX_FVF); tbDirect3D::SetTexture(0, m_pVideo->GetRenderer()->GetTexture()); tbDirect3D::SetRS(D3DRS_ZENABLE, D3DZB_FALSE); // Die vier Vertizes erstellen (Rechteck) // Links unten aVertex[0].vPosition = tbVector3(0.0f, tbDirect3D::GetScreenSize().y, 0.5f); aVertex[0].fRHW = 1.0f; aVertex[0].vTex0 = tbVector2(0.0f, m_pVideo->GetRenderer()->GetBottomRightTex().y); // Links oben aVertex[1].vPosition = tbVector3(0.0f, 0.0f, 0.0f); aVertex[1].fRHW = 1.0f; aVertex[1].vTex0 = tbVector2(0.0f, 0.0f); // Rechts unten aVertex[2].vPosition = tbVector3(tbDirect3D::GetScreenSize().x, tbDirect3D::GetScreenSize().y, 0.5f); aVertex[2].fRHW = 1.0f; aVertex[2].vTex0 = m_pVideo->GetRenderer()->GetBottomRightTex(); // Rechts oben aVertex[3].vPosition = tbVector3(tbDirect3D::GetScreenSize().x, 0.0f, 0.5f); aVertex[3].fRHW = 1.0f; aVertex[3].vTex0 = tbVector2(m_pVideo->GetRenderer()->GetBottomRightTex().x, 0.0f); // Als Dreiecksfolge zeichnen tbDirect3D::GetDevice()->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, aVertex, sizeof(SVertex)); // Szene beenden tbDirect3D::EndScene(); return TB_OK; } |
Anonymous
unregistriert
Quellcode |
|
1 2 3 |
// Wenn die Videotextur gerade gesperrt ist, warten wir so lange, // bis sie es nicht mehr ist. while(m_pVideo->GetRenderer()->IsTextureLocked()) {} |
Zitat
Warum leerst Du denn hier den Puffer ?
Quellcode |
|
1 2 3 |
// Puffer leeren tbDirect3D::Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, tbColor(0.0f, 0.0f, 0.0f), 1.0f, 0); |
Zitat
Hier fehlt was !!!
Quellcode |
|
1 2 3 4 5 6 7 |
// Szene beenden tbDirect3D::EndScene(); // EDIT SM3D - Szene beenden und darstellen tbDirect3D::GetDevice()->EndScene(); tbDirect3D::GetDevice()->Present(NULL, NULL, NULL, NULL); return TB_OK; |
Werbeanzeige