JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Falsche Werte bei auslesen des VertexBuffers eines X-Files

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



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 12.01.2006, 21:06    Titel: Falsche Werte bei auslesen des VertexBuffers eines X-Files Antworten mit Zitat

Ich hab mir folgende kleine Funktion gebastelt, um die XYZ - Vertexdaten aus einem XFile auszulesen:

CPP:
void CEBsp::GetVertices(void)
   {
      LPD3DXMESH      d3dMeshTemp;
      _pMesh->CloneMeshFVF (D3DXMESH_SYSTEMMEM, D3DFVF_XYZ , ceReturnDevice(), &d3dMeshTemp);

      CustomVertex*   pVertices = NULL;
      d3dMeshTemp->LockVertexBuffer(D3DLOCK_READONLY, (LPVOID*)&pVertices);
      for(int i=0; i < d3dMeshTemp->GetNumVertices(); i++)
      {
         char cTest[1024];
         sprintf(cTest,"%d Vertices: %.2f %.2f %.2f\n",i, pVertices[i].p.x,pVertices[i].p.y,pVertices[i].p.z);
         CE_WRITELOG(cTest);
      }

      d3dMeshTemp->UnlockVertexBuffer();
   }


Aber irgendwie komm ich da an falsche Werte.

In der Ascii-Ausführung des XFiles habe ich diese Vertexdaten:

    Mesh Box011 {
    28;
    -18.582375;0.000000;9.578544;,
    -18.582375;0.000000;-9.578544;,
    18.582375;0.000000;9.578544;,
    18.582375;0.000000;-9.578544;,
    18.582375;-18.390804;-9.578544;,
    -18.582375;-18.390804;-9.578544;,
    18.582375;-18.390804;9.578544;,
    -18.582375;-18.390804;9.578544;,
    18.582375;0.000000;-9.578544;,
    -18.582375;0.000000;-9.578544;,
    18.582375;-18.390804;-9.578544;,
    -18.582375;-18.390804;-9.578544;,
    18.582375;0.000000;9.578544;,
    18.582375;0.000000;-9.578544;,
    18.582375;-18.390804;9.578544;,
    18.582375;-18.390804;-9.578544;,
    18.582375;-18.390804;9.578544;,
    18.582375;0.000000;-9.578544;,
    -18.582375;0.000000;9.578544;,
    18.582375;0.000000;9.578544;,
    -18.582375;-18.390804;9.578544;,
    18.582375;-18.390804;9.578544;,
    -18.582375;0.000000;-9.578544;,
    -18.582375;0.000000;9.578544;,
    -18.582375;-18.390804;-9.578544;,
    -18.582375;-18.390804;9.578544;,
    -18.582375;-18.390804;-9.578544;,
    -18.582375;0.000000;9.578544;;


Meine Log-Datei haut mir diese Werte raus:

    0 Vertices: -18.20 9.96 0.00
    1 Vertices: -18.20 -9.20 0.00
    2 Vertices: 18.97 9.96 0.00
    3 Vertices: 18.97 -9.20 0.00
    4 Vertices: 18.97 -9.20 18.39
    5 Vertices: -18.20 -9.20 18.39
    6 Vertices: 18.97 9.96 18.39
    7 Vertices: -18.20 9.96 18.39
    8 Vertices: 18.97 -9.20 0.00
    9 Vertices: -18.20 -9.20 0.00
    10 Vertices: 18.97 -9.20 18.39
    11 Vertices: -18.20 -9.20 18.39
    12 Vertices: 18.97 9.96 0.00
    13 Vertices: 18.97 -9.20 0.00
    14 Vertices: 18.97 9.96 18.39
    15 Vertices: 18.97 -9.20 18.39
    16 Vertices: 18.97 9.96 18.39
    17 Vertices: 18.97 -9.20 0.00
    18 Vertices: -18.20 9.96 0.00
    19 Vertices: 18.97 9.96 0.00
    20 Vertices: -18.20 9.96 18.39
    21 Vertices: 18.97 9.96 18.39
    22 Vertices: -18.20 -9.20 0.00
    23 Vertices: -18.20 9.96 0.00
    24 Vertices: -18.20 -9.20 18.39
    25 Vertices: -18.20 9.96 18.39
    26 Vertices: -18.20 -9.20 18.39
    27 Vertices: -18.20 9.96 0.00


Das scheint irgendwie "verschoben" zu sein...

Hat jemand eine Idee was falsch ist?
_________________
-+- SchNeiDi74 -+-
-+- www.creative-games.de -+-
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 12.01.2006, 23:15    Titel: Antworten mit Zitat

Wie ist denn CustomVertex definiert?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 12.01.2006, 23:56    Titel: Antworten mit Zitat

Bei D3DFVF_XYZ kannst du zum auslesen auch einfach eine Vektorstruktur verwenden, z.B. D3DXVECTOR3.
BTW du hast vergessen d3dMeshTemp wieder zu releasen.
_________________

Ich bin da, wer noch?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 13.01.2006, 07:55    Titel: Antworten mit Zitat

CustomVertex ist lediglich ein struct aus 3 Float Variablen. Also sollte das ja eigentlich genau so gut gehen wie ein D3DXVECTOR3...?!

Zitat:

BTW du hast vergessen d3dMeshTemp wieder zu releasen.


Das muss ich natürlich schamvoll eingestehen... Schande über mein Haupt Embarassed
_________________
-+- SchNeiDi74 -+-
-+- www.creative-games.de -+-
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 13.01.2006, 16:55    Titel: Antworten mit Zitat

Täusche ich mich oder sind bei den Vertexdaten einfach immer nur Y und Z vertauscht?
Wenn ja ist das wahrscheinlich schon richtig so wie es ist. Es könnte ja sein, dass die Vertexdaten in der Datei einfach in der Reihenfolge X, Z, Y sind, bzw. dort ein anderes Koordinatensystem verwendet wird.
_________________

Ich bin da, wer noch?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 13.01.2006, 16:59    Titel: Antworten mit Zitat

Du täuscht dich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 13.01.2006, 17:06    Titel: Antworten mit Zitat

Christian Rousselle hat Folgendes geschrieben:
Du täuscht dich.

jo, ein bisschen täuscht er sich.

z.B. sind alle Werte(die vorkommen) in der Datei immer bis auf die Vorzeichen gleich. In der Log scheints somit bei den vorzeichenbehafteten Zahlen ne kleine Veränderung zu geben. Davon abgesehen sind Y und Z vertauscht, ja. Kanns denn sein, dass der Unterschiedt bei den Vorzeichenzahlen mit sprintf() zu tun hat?

Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 13.01.2006, 20:18    Titel: Antworten mit Zitat

das kann ich mir nicht vorstellen.

wenn man mal allein die letzten beiden Vertices vergleicht läuft es da ja völlig aus dem ruder.

Logdatei:
    26 Vertices: -18.20 -9.20 18.39
    27 Vertices: -18.20 9.96 0.00


XFile:

    -18.582375;-18.390804;-9.578544;,
    -18.582375;0.000000;9.578544;;


da passt irgendwas überhaupt nicht.
Ich glaube fast, der letzte wert bei Vertex 27 ist schon der erste wert des entsprechenden normalvektors, obwohl ich da eigentlich gar nicht rankommen sollte...
_________________
-+- SchNeiDi74 -+-
-+- www.creative-games.de -+-
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 14.01.2006, 15:37    Titel: Antworten mit Zitat

stimmt denn die Anzahl an angegebenen Vertices mit den Vertices überein?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 15.01.2006, 10:46    Titel: Antworten mit Zitat

naja, die hol ich mir ja mit GetNumVertices() von dem cloned mesh....
_________________
-+- SchNeiDi74 -+-
-+- www.creative-games.de -+-
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 15.01.2006, 12:16    Titel: Antworten mit Zitat

Wenn die Y und z-Werte vertauscht sind, kann es sein, dass das X-File aus einem Rechtehand-Koordinatemsystem exportiert wurde. DirectX verwendet aber ein Linkehand-Koordinatensystem.
3dStudioMax verwendet z.B. ein Rechtehand-Koordinatensystem und ich habe regelmässig probleme, meine erzeugten Meshs vernünftig nach DirectX zu importieren
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 15.01.2006, 15:16    Titel: Antworten mit Zitat

Das ist es wohl auch nicht. Ich hab das XFile nochmal mit DeepExploration aufgerufen und bei Speichern unter den Punkt Turn To LeftHand System markiert... macht keinen Unterschied...
_________________
-+- SchNeiDi74 -+-
-+- www.creative-games.de -+-
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 15.01.2006, 15:41    Titel: Antworten mit Zitat

schneidi74 hat Folgendes geschrieben:

Logdatei:
    26 Vertices: -18.20 -9.20 18.39
    27 Vertices: -18.20 9.96 0.00


XFile:

    -18.582375;-18.390804;-9.578544;,
    -18.582375;0.000000;9.578544;;


da passt irgendwas überhaupt nicht.
Ich glaube fast, der letzte wert bei Vertex 27 ist schon der erste wert des entsprechenden normalvektors, obwohl ich da eigentlich gar nicht rankommen sollte...

ne, isser net. Man kann da ein System reinbringen, wie der die durcheinander schmeißt, sähe dann ungefähr so aus:
Code:
 
1. lese X-Wert;
2. wenn X-Wert positiv, dann schreibe X-Wert + 0.3 (oder so ähnlich) in Datei;
3. wenn X-Wert negativ, dann schreibe X-Wert + 0.3 (oder so ähnlich) in Datei;
4. lese Y-Wert;
5. schreibe fabs(Y-Wert) an Z-Stelle in Datei;
6. lese Z-Wert;
7. schreibe Z-Wert an Y-Stelle genau so wie in Schritt 2. und 3. bei X-Wert;


ich hab die schritte 2 und 3 extra in positiv und negativ geteilt, obwohl da eigentlich die selben Operationen mit durchgeführt werden. Die X- und Z-Werte werden eben beide etwas erhöht; ich glaube dass das ganz klar an sprintf() liegt(oder ferner an der CE_WRITELOG). Schreibe mal nur %f in cTest, dann sind die Werte vllt etwas genauer, da durch %.2f die Werte ja abgeschnitten werden. Warum der allerdings das bei schritt 5 mit dem absoluten Wert macht, und warum der Y und Z vertauscht, weiß ich net

Gruß DirectXer

EDIT: hab doch ne idee, wieso der vertauscht: Wenn du ein X-File mit DeepExploration lädst, zeigt die Z-Achse nach oben und die Y-Achse nach vorne. Bei DX is das anders rum, Z-Achse vorne un Y-Achse oben.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 15.01.2006, 16:05    Titel: Antworten mit Zitat

Also ich hab mal den kompletten float-wert ausgeworfen. Da ändert sich nix dran..
Zitat:
0 Vertices: -18.199232 9.961685 0.000000
1 Vertices: -18.199232 -9.195402 0.000000
2 Vertices: 18.965517 9.961685 0.000000
3 Vertices: 18.965517 -9.195402 0.000000
4 Vertices: 18.965517 -9.195402 18.390804
5 Vertices: -18.199232 -9.195402 18.390804
6 Vertices: 18.965517 9.961685 18.390804
7 Vertices: -18.199232 9.961685 18.390804
8 Vertices: 18.965517 -9.195402 0.000000
9 Vertices: -18.199232 -9.195402 0.000000
10 Vertices: 18.965517 -9.195402 18.390804
11 Vertices: -18.199232 -9.195402 18.390804
12 Vertices: 18.965517 9.961685 0.000000
13 Vertices: 18.965517 -9.195402 0.000000
14 Vertices: 18.965517 9.961685 18.390804
15 Vertices: 18.965517 -9.195402 18.390804
16 Vertices: 18.965517 9.961685 18.390804
17 Vertices: 18.965517 -9.195402 0.000000
18 Vertices: -18.199232 9.961685 0.000000
19 Vertices: 18.965517 9.961685 0.000000
20 Vertices: -18.199232 9.961685 18.390804
21 Vertices: 18.965517 9.961685 18.390804
22 Vertices: -18.199232 -9.195402 0.000000
23 Vertices: -18.199232 9.961685 0.000000
24 Vertices: -18.199232 -9.195402 18.390804
25 Vertices: -18.199232 9.961685 18.390804
26 Vertices: -18.199232 -9.195402 18.390804
27 Vertices: -18.199232 9.961685 0.000000


Langsam weiß ich wirklich nicht woran's liegen könnte... die Funktion ist doch nun wirklich nicht so heftig....?!?!
_________________
-+- SchNeiDi74 -+-
-+- www.creative-games.de -+-
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 15.01.2006, 16:09    Titel: Antworten mit Zitat

ich hab ja nen EDIT angehängt, wieso die Werte vertauscht sind

Hastes denn schonmal mit ner anderen X versucht?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail 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