 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 17.10.2003, 00:29 Titel: Randvertices eines X-File |
|
|
Hallo,
hat jemand von euch nen Ansatz, wie ich an die Randvertices eines X-Files komme?
Also ich habe bisher eine Plane als *.x. Von dieser habe ich den Vertexbuffer und somit ja ALLE Vertices. Wie bekomme ich jetzt aber nur die am Rand? Oder wie kann ich das feststellen??
Vielen Dank,
Gut N8 |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 17.10.2003, 18:26 Titel: |
|
|
Brauchst du das für die Schattenberechnung ?
Das hier ist beim ShadowVolume Sample des DXSDK´s dabei gewesen:
Code: |
VOID AddEdge( WORD* pEdges, DWORD& dwNumEdges, WORD v0, WORD v1 )
{
// Remove interior edges (which appear in the list twice)
for( DWORD i=0; i < dwNumEdges; i++ )
{
if( ( pEdges[2*i+0] == v0 && pEdges[2*i+1] == v1 ) ||
( pEdges[2*i+0] == v1 && pEdges[2*i+1] == v0 ) )
{
if( dwNumEdges > 1 )
{
pEdges[2*i+0] = pEdges[2*(dwNumEdges-1)+0];
pEdges[2*i+1] = pEdges[2*(dwNumEdges-1)+1];
}
dwNumEdges--;
return;
}
}
pEdges[2*dwNumEdges+0] = v0;
pEdges[2*dwNumEdges+1] = v1;
dwNumEdges++;
}
|
Und eine übergeordnete Funktion die das leitet:
Code: |
HRESULT ShadowVolume::BuildFromMesh( LPD3DXMESH pMesh, D3DXVECTOR3 vLight )
{
// Note: the MESHVERTEX format depends on the FVF of the mesh
struct MESHVERTEX { D3DXVECTOR3 p, n; FLOAT tu, tv; };
DWORD dwFVF = pMesh->GetFVF();
MESHVERTEX* pVertices;
WORD* pIndices;
// Lock the geometry buffers
pMesh->LockVertexBuffer( 0L, (BYTE**)&pVertices );
pMesh->LockIndexBuffer( 0L, (BYTE**)&pIndices );
DWORD dwNumVertices = pMesh->GetNumVertices();
DWORD dwNumFaces = pMesh->GetNumFaces();
// Allocate a temporary edge list
WORD* pEdges = new WORD[dwNumFaces*6];
DWORD dwNumEdges = 0;
// For each face
for( DWORD i=0; i<dwNumFaces; i++ )
{
WORD wFace0 = pIndices[3*i+0];
WORD wFace1 = pIndices[3*i+1];
WORD wFace2 = pIndices[3*i+2];
D3DXVECTOR3 v0 = pVertices[wFace0].p;
D3DXVECTOR3 v1 = pVertices[wFace1].p;
D3DXVECTOR3 v2 = pVertices[wFace2].p;
// Transform vertices or transform light?
D3DXVECTOR3 vNormal;
D3DXVec3Cross( &vNormal, &(v2-v1), &(v1-v0) );
if( D3DXVec3Dot( &vNormal, &vLight ) >= 0.0f )
{
AddEdge( pEdges, dwNumEdges, wFace0, wFace1 );
AddEdge( pEdges, dwNumEdges, wFace1, wFace2 );
AddEdge( pEdges, dwNumEdges, wFace2, wFace0 );
}
}
for( i=0; i<dwNumEdges; i++ )
{
D3DXVECTOR3 v1 = pVertices[pEdges[2*i+0]].p;
D3DXVECTOR3 v2 = pVertices[pEdges[2*i+1]].p;
D3DXVECTOR3 v3 = v1 - vLight*10;
D3DXVECTOR3 v4 = v2 - vLight*10;
// Add a quad (two triangles) to the vertex list
m_pVertices[m_dwNumVertices++] = v1;
m_pVertices[m_dwNumVertices++] = v2;
m_pVertices[m_dwNumVertices++] = v3;
m_pVertices[m_dwNumVertices++] = v2;
m_pVertices[m_dwNumVertices++] = v4;
m_pVertices[m_dwNumVertices++] = v3;
}
// Delete the temporary edge list
delete pEdges;
// Unlock the geometry buffers
pMesh->UnlockVertexBuffer();
pMesh->UnlockIndexBuffer();
return S_OK;
}
|
Vieleicht kannst du ja was damit anfangen, das wird meist für solche Berechnungen gebraucht. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
 |
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 17.10.2003, 19:31 Titel: |
|
|
Hallo FallenAngel,
ne... Fuer Schatten noch nicht. Ich probiere mich grad am Automatischen stitchen von Modellen und Meshes. D.h. also automatisches Endangleichen und Zusammenfuegen. Dafuer brauch ich natuerlich die Eckvertices.
Ich kucke mir das mal durch. Scheint interessant zu sein. An das Depthshadow-Beispiel hab ich gar nicht gedacht
Danke |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|