Ich verstehe die Sprites einfach nicht !!!!
-
Hallo @all!
Gibt es nicht irgentwo einen Source code, der einen Sprite(POINTSPRITE) in einen VertexBuffer läd und diesen dann Rendert. ( wenn es geht mit Texture, Farbe ist auch ok ):
Das würde mich weiterbringen. Danke
-
Im DirectX-SDK gibts sowas...
-
Ja, das mit dem Feuerwerk... es heißt "PointSprites" oder so.
-
Hi!
Ja ich weiß. Funktioniert trotzdme nicht !
-
Was genau funktioniert nicht?
Standardfragen:
- Debug-Ausgabe geprüft?
- Hast Du es mit dem Reference Rasterizer laufen lassen?
- Leerst Du die Surfaces richtig?
- Point-Sprites-Größe eingestellt?
-
Hi!
Ich mach ( meiner Meinung nach ) alles Richtig.Code:
IDirect3DVertexBuffer9 *pPSVB; IDirect3DTexture9 *pTexture; struct POINTVERTEX { D3DVECTOR v; D3DCOLOR color; }; #define D3DFVF_POINTVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE) POINTVERTEX vPVertices[1]; void InitPS() { vPVertices[0].v.x = 0.0f; vPVertices[0].v.y = 0.0f; vPVertices[0].v.z = 0.0f; vPVertices[0].color = D3DCOLOR_XRGB(255, 0, 0 ); // Create the vertex buffer. if( FAILED( pGraphics->GetDevice()->CreateVertexBuffer( 1*sizeof(POINTVERTEX), D3DUSAGE_WRITEONLY | D3DUSAGE_POINTS, D3DFVF_POINTVERTEX, D3DPOOL_DEFAULT, &pPSVB, NULL ) ) ) { } // Fill the vertex buffer. VOID* pVertices; if( FAILED( pPSVB->Lock( 0, sizeof(vPVertices), (void**)&pVertices, 0 ) ) ) { } memcpy( pVertices, vPVertices, sizeof(vPVertices) ); pPSVB->Unlock(); D3DXCreateTextureFromFile( pGraphics->GetDevice(), "point.jpg" , &pTexture); } void ReleasePS() { pPSVB->Release(); pTexture->Release(); } inline DWORD FtoDW( float f ) { return *((DWORD*)&f); }; void RenderPS() { pGraphics->GetDevice()->SetRenderState( D3DRS_POINTSPRITEENABLE, true ); pGraphics->GetDevice()->SetRenderState( D3DRS_POINTSCALEENABLE, true ); // set states //pGraphics->GetDevice()->SetTexture( 0, pTexture); pGraphics->GetDevice()->SetRenderState( D3DRS_LIGHTING, false ); pGraphics->GetDevice()->SetRenderState( D3DRS_ZWRITEENABLE, false ); pGraphics->GetDevice()->SetRenderState( D3DRS_ALPHABLENDENABLE, true ); pGraphics->GetDevice()->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_INVSRCCOLOR); pGraphics->GetDevice()->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR); pGraphics->GetDevice()->SetRenderState( D3DRS_POINTSIZE_MIN, FtoDW(0.00f) ); pGraphics->GetDevice()->SetRenderState( D3DRS_POINTSCALE_A, FtoDW(0.00f) ); pGraphics->GetDevice()->SetRenderState( D3DRS_POINTSCALE_B, FtoDW(0.00f) ); pGraphics->GetDevice()->SetRenderState( D3DRS_POINTSCALE_C, FtoDW(1.00f) ); pGraphics->GetDevice()->SetRenderState( D3DRS_POINTSIZE, FtoDW(1.0f) ); pGraphics->GetDevice()->SetStreamSource( 0, pPSVB, 0, sizeof( POINTVERTEX) ); pGraphics->GetDevice()->SetFVF( D3DFVF_POINTVERTEX ); /*pPSVB->Lock(0 ,1 * sizeof (POINTVERTEX),(BYTE **) &vPVertices,0); pPSVB->Unlock();*/ //pGraphics->GetDevice()->SetTransform(D3DTS_WORLD, &m_matWelt); pGraphics->GetDevice()->DrawPrimitive( D3DPT_POINTLIST, 0, 1 ); // deset states pGraphics->GetDevice()->SetRenderState( D3DRS_ZWRITEENABLE, true ); pGraphics->GetDevice()->SetRenderState( D3DRS_ALPHABLENDENABLE, false ); pGraphics->GetDevice()->SetRenderState( D3DRS_POINTSPRITEENABLE, false ); pGraphics->GetDevice()->SetRenderState( D3DRS_POINTSCALEENABLE, false ); pGraphics->GetDevice()->SetRenderState( D3DRS_LIGHTING, false ); }
-
Warum hast Du denn SetTexture auskommentiert?
-
Ich setzte die Texture nach dem Funktionsaufruf,
Device->BegineScene();
-
Hi!
Danke es funktioniert.
Ich war zu weit von derm Punkt wegnochmals Danke !!!!