3ds mesh mit indexbuffer rendern
-
Hallo.
Ich versuche grade ein 3ds mesh mit einem indexbuffer zu rendern. Indexbuffer deswegen, weil die verticles ja nicht sortiert sind, sondern auf die facelist referenziert wird. Allerdings kommt da bei mir nix anständiges raus. Ich habe ein simplen mesh (eine kiste) mit einer textur, allerdings kümmer ich mich um die textur noch nicht. Ach ja, das ganze passiert in D3D, also kein openGL.
Rendern tue ich das ganze so:
unsigned long XComRenderD3D::renderMesh (bool withindex, XComMesh* ptr_mesh) { int ret; static float f = 0.04f; f+=0.0333; if (withindex == true) { static float rot = 0.09f; rot+=0.0003f; //rot+=rot; D3DXMatrixRotationY( &m_world, rot ); m_ptr_d3d_device->SetTransform( D3DTS_WORLD, &m_world ); m_ptr_d3d_device->BeginScene (); *rlog << "Begin Scene" << endl; if (FAILED (m_ptr_d3d_device->SetStreamSource (0, this->tmp, 0, sizeof (VERTEX)))) { *rlog << "SetSreamSource failed..." << endl; return (unsigned long) X_NORENDER; } if(FAILED(m_ptr_d3d_device->SetIndices(itmp))) { return X_NORENDER; } if (FAILED (m_ptr_d3d_device->SetFVF (D3DFVF_CUSTOMVERTEX ))) { *rlog << "SetFVF failed" << endl; return (unsigned long)X_NORENDER; } /* erstmal hardcodiert */ if (FAILED (m_ptr_d3d_device->DrawIndexedPrimitive ( D3DPT_TRIANGLELIST, 0, /* start index */ 0, /* offset in the vertex buffer*/ ptr_mesh->getVertexCount(), /*Anzahl der Vertices*/ 0, ptr_mesh->getPolyCount ()))) /*Anzahl der Primitiven */ { *log << "Draw Primitive failed" << endl; return (unsigned long)X_NORENDER; } m_ptr_d3d_device->EndScene (); m_ptr_d3d_device->Present (NULL, NULL, NULL, NULL); } return X_READY; }
Kann mir da vielleicht jemande helfen?
-
Bitte lesen. Danke.
Bye, TGGC (Reden wie die Großen)
-
Super. Vielleicht kritisierst du mich nicht nur sondern sagst mir wie es besser geht das nennt man übrigens dann konstruktive kritik und hat auch noch nen sinn.
-
fluxy schrieb:
...Allerdings kommt da bei mir nix anständiges raus...
Ich nehme mal an das was an deinen Indexwerten nicht stimmt ???
-
hmmm wie überprüfe ich das denn? kann ich die denn ausgeben lassen oder so über die debug runtime? Oder hat jemand hier nen 3ds loader der funktioniert? dann könnt man die daten mal vergleichen.
-
-
hmmm danke für den Tipp das kannt ich noch gar nicht. Also Die Größe der Vertex - und Indexbuffer schaut ok aus, die aufrufe auch - geben alle S_OK zurück. Aber ich komme irgendwie nicht an den Inhalt da schmiert er ab. Also bringt mir das auch nicht grade sehr viel.
Und was gerendert wird... pub keine ahnung wie ich das rausfinde...
-
Ja und? Was gedenkst du, was wir tun sollen?
Bye, TGGC \-/
-
hmmm okay also um dsa ganze mal konstrukiv werden zu lassen:
1.) Es gibt sicher jemanden, der auch einen 3ds Loader hat. Dieser jemand könnte es posten, dann würde ich eine .3ds datei auf meinen server laden, er könnte sie laden und die Werte speichern für die verticeslist, die facelist und die liste der texturmapping koordinaten. Somit hätte man einen Vergleich, ob meine Daten richtig sind oder nicht und die Fehlerquelle wäre leichter zu identifizieren.
2.) Es könnte sich jemand mal anschaun, ob der DrawIndexedPrimitive Aufruf richtig ist bei mir. GetVertexCount () liefert mir die Anzahl der vertices in der Verticesliste und getPolyCount () die anzahl der indezes in der faceliste.
3.) Ich habe mal d3dspy dazugeschaltet. Ich habe jetzt zwar die größe meines Vertex und Indexbuffers bekommen, aber nicht die Daten dadrin. Eventuell kann mir einer sagen wie man as macht.
4.) Zum Schluss dieses Beitrages werden ich die Aufrufliste aus meinen d3dspy mal kopieren. Die könnt ihr euch sicher angucken und mir Auffälligkeiten nennen. Mit all diesen Informationen muss es doch möglich sein, mir zu helfen oder? Ich habe mich an euch gewandt, weil ich nicht mehr weiter weiss. Und ich bitte euch, mir dabei zu helfen. Ich erwarte nicht von euch, dass ihr sonstwas macht, aber ein paar nett gemeinte Hinweise wären nicht schlecht.
So hier noch ein paar infos
a.) Die Infos über meinen Indexbuffer:
Object Type: Index Buffer
Real object address: 0x023AF360
Hooked object address: 0x00AAACE0
Creation call: 733
Priority: 0
Format: D3DFMT_INDEX16
Usage: D3DUSAGE_WRITEONLY
Pool: D3DPOOL_DEFAULT
Size: 72 bytes (36 indices)b.) die Infos über meinen Vertexbuffer:
Object Type: Vertex Buffer
Real object address: 0x023AF220
Hooked object address: 0x00AAA6D8
Creation call: 729
Priority: 0
Usage: D3DUSAGE_WRITEONLY
Pool: D3DPOOL_DEFAULT
Size: 576 bytes (36 vertices)
FVF: 0x00000042 (D3DFVF_XYZ | D3DFVF_DIFFUSE)c.) die Infos über mein Device:
Object Type: D3D Device
Real object address: 0x022C48A0
Hooked object address: 0x00AA8B80
Creation call: 718d.) die infos über meinen surface:
Object Type: Surface
Real object address: 0x00BBA760
Hooked object address: 0x00AA9930
Creation call: 721
Width: 1024
Height: 768
Format: D3DFMT_D16
Pool: D3DPOOL_DEFAULTe.) meine Renderstates:
http://www.simplexcoding.de/~public/rs.jpgf.) meine Aufrufliste im d3dspy
http://www.simplexcoding.de/~public/dxcallstack.jpgg.) meine matrix
http://www.simplexcoding.de/~public/matrix.jpgSo mehr infos habe ich auch nicht. Teillösungen erwünscht
-
ey nicht so viele aufeinmal.... ich komm nicht so schnell nach....
-
Was heißt denn "kommt da bei mir nix anständiges raus"?
Bleibt das Bild schwarz?
Kommt Polygonmatsch?
Stürzt er ab?Also ich benutze auch 3ds (noch), ich wüsste aber nicht was ich Dir da jetzt drüber erzählen könnte. Ich habe auch mehrere Stunden gebraucht bis das Modell richtig geladen und angezeigt wurde, musst halt mal weiter rumprobieren.
-
Naja was angezeigt wird wohl, aber nur schrott. Das ganze sollte ne kiste sein, aber die Polygone sind völlig falsch angeordnet.
Gruß Sebastian
-
Nachdem ich mir hier alles durchgelesen habe, denke ich die Punkte sind flasch ausgelesen oder faslch in den VB gepackt. Eine Kiste hat eigentlich nur (maximal) 24 Punkte.
Bye, TGGC \-/
-
TGGC schrieb:
Eine Kiste hat eigentlich nur (maximal) 24 Punkte.
\-/eigentlich max 36 verwendete(ohne zu tesselieren).
rapso->greets();
-
H.L.T.O schrieb:
Ich nehme mal an das was an deinen Indexwerten nicht stimmt ???
Behaupte ich immer noch. Schau dir doch mal nochmal deinen Loader an. Evt. liegt der Fehler in dieser Funktion.
-
rapso schrieb:
TGGC schrieb:
Eine Kiste hat eigentlich nur (maximal) 24 Punkte.
\-/eigentlich max 36 verwendete(ohne zu tesselieren).
rapso->greets();
6 Seiten mit 4 Punkten. Und wie rechnest du?
Bye, TGGC \-/
-
mit 2 dreiecken pro seite,mit 6 seiten pro würfel und 3 punkten pro dreieck^^
2*6*3=36
-
TGGC schrieb:
rapso schrieb:
TGGC schrieb:
Eine Kiste hat eigentlich nur (maximal) 24 Punkte.
\-/eigentlich max 36 verwendete(ohne zu tesselieren).
rapso->greets();
6 Seiten mit 4 Punkten. Und wie rechnest du?
Bye, TGGC \-/
12triangles mit je 3 verticen. hat nichts mit rechnen, sondern mit deinem so oft propagiertem denken zu tun.
rapso->greets();
-
Ich spreche von der Zahl der Punkte, nicht der Indizes.
Bye, TGGC \-/
-
davon gibts auch nur 8