|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 23.04.2008, 09:06 Titel: Konflikt: D3DXComputeTangent und D3DXComputeBoundingBox |
|
|
Hallo,
für Bumpmapping berechne ich für die Objekte mit der Funktion
D3DXComputeTangent die Tangenten und Binomialen.
CPP: | LPD3DXMESH clone = NULL;
lpMesh->CloneMesh( lpMesh->GetOptions(), Declaration_Bumpmapping, m_lpD3DDevice, &clone);
SAFE_RELEASE(lpMesh);
lpMesh = clone;
D3DXComputeTangent( clone, 0, 0, 0, false, NULL); |
Die Deklaration sieht folgendermaßen bei mir aus:
CPP: | const D3DVERTEXELEMENT9 Declaration_Bumpmapping[] =
{
{ 0, 0 * sizeof(float),D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, // pos
{ 0, 3 * sizeof(float),D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 }, // normal
{ 0, 6 * sizeof(float),D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 }, // tex0
{ 0, 8 * sizeof(float),D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TANGENT, 0 }, // tangent
{ 0, 11 * sizeof(float),D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_BINORMAL, 0 }, // binormal
D3DDECL_END()
}; |
Jetzt bekomme ich Probleme beim Berechnen der Minimum und Maximumvektoren für die Boundingbox:
CPP: | //Minimumvektor (vorne, unten, links) und Maximumvektor (hinten, oben, rechts) ermitteln
D3DXComputeBoundingBox((D3DXVECTOR3*)pVertices,
m_lpMesh->GetNumVertices(),
D3DXGetFVFVertexSize(m_lpMesh->GetFVF()),
&m_vMinBounds,
&m_vMaxBounds); |
Nachdem ich mit der vorherigen Funktion die Tangenten und Binomialen berechnet und den geklonten Mesh auf den aktuellen Mesh gesetzt habe, bekomme ich für "m_vMinBounds" und "m_vMaxBounds" immer identische und auch falsche Werte heraus. Woran könnte das liegen? _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 23.04.2008, 17:00 Titel: |
|
|
Was kommt denn bei der D3DXGetFVFVertexSize Funktion heraus und stimmt denn auch das geklonte Mesh? Außerdem wie kommst du an pVertices, ich kann es mir denken aber es könnte helfen das ausgeschrieben zu sehen. |
|
Nach oben |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 23.04.2008, 23:04 Titel: |
|
|
Nachdem der geklonte Mesh dem Zeiger lpMesh zugewiesen wurde:
CPP: | //Vertizes des Mesh abrufen
BYTE* pVertices=NULL;
lpMesh->LockVertexBuffer(D3DLOCK_READONLY, (LPVOID*)&pVertices); |
Also mit dem VS 2003 bekomm ich grad nicht heraus, was bei D3DXGetFVFVertexSize herauskommt. Im Command Window sagt er mir immer "CXX0052: Fehler: Memberfunktion nicht vorhanden".
Naja, das sagt er mir an der Stelle auch, wenn ich kein Mesh vorher geklont hab oder sonst was gemacht hab. Jedenfalls kann ich leider keinen Wert ablesen (Debugmodus habe ich ganz sicher drin gehabt).
Ok, es liegt wohl nicht an D3DXComputeTangent, sondern eher an dem Klonen. Irgendwas stimmt da jedenfalls nicht. _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 24.04.2008, 05:36 Titel: |
|
|
Dann überprüfe doch zuerst mal das Result der CloneMesh Operation. |
|
Nach oben |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 25.04.2008, 17:47 Titel: |
|
|
Also sowas:
CPP: | HRESULT hr = lpMesh->CloneMesh( lpMesh->GetOptions(), Declaration_Bumpmapping, m_lpD3DDevice, &clone);
if(FAILED(hr))
{
//Fehlgeschlagen
} |
Also als Rückgabe erhalte ich S_OK. Insofern hat die Operation ja erstmal funkioniert. Rendern lässt sich das geklonte Objekt ja auch. Alles andere scheint auch zuklappen, wie auf die Berechnung der Min und Maxvektoren. _________________ Kein Rückzug! Kein Aufgeben! |
|
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
|