|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 12.01.2006, 20:06 Titel: Falsche Werte bei auslesen des VertexBuffers eines X-Files |
|
|
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 |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 12.01.2006, 22:15 Titel: |
|
|
Wie ist denn CustomVertex definiert? |
|
Nach oben |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 12.01.2006, 22:56 Titel: |
|
|
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 |
|
|
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 13.01.2006, 06:55 Titel: |
|
|
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 _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 13.01.2006, 15:55 Titel: |
|
|
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 |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 13.01.2006, 15:59 Titel: |
|
|
Du täuscht dich. |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 13.01.2006, 16:06 Titel: |
|
|
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 |
|
|
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 13.01.2006, 19:18 Titel: |
|
|
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 |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 14.01.2006, 14:37 Titel: |
|
|
stimmt denn die Anzahl an angegebenen Vertices mit den Vertices überein? |
|
Nach oben |
|
|
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 15.01.2006, 09:46 Titel: |
|
|
naja, die hol ich mir ja mit GetNumVertices() von dem cloned mesh.... _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 15.01.2006, 11:16 Titel: |
|
|
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 |
|
|
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 15.01.2006, 14:16 Titel: |
|
|
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 |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 15.01.2006, 14:41 Titel: |
|
|
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 |
|
|
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 15.01.2006, 15:05 Titel: |
|
|
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 |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 15.01.2006, 15:09 Titel: |
|
|
ich hab ja nen EDIT angehängt, wieso die Werte vertauscht sind
Hastes denn schonmal mit ner anderen X versucht? |
|
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
|