JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=88dd9526c5decc2f5e579d7aea551ef2Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Konflikt: D3DXComputeTangent und D3DXComputeBoundingBox

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 23.04.2008, 09:06    Titel: Konflikt: D3DXComputeTangent und D3DXComputeBoundingBox Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 23.04.2008, 17:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 23.04.2008, 23:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 24.04.2008, 05:36    Titel: Antworten mit Zitat

Dann überprüfe doch zuerst mal das Result der CloneMesh Operation.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 25.04.2008, 17:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum