D3D Modelle

  • GM 8
  • Tach :)

    Ich fang gleich ma hiermit an, der Inhalt einer D3D Datei (erzeugt durch d3d_model_save(arg1,arg2);):

    Quellcode

    1. 100 //version
    2. 10 //count
    3. 0 4.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 //weiss ich nich
    4. 8 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 //das ganze mal *count
    5. ...
    6. 1 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 //Offset


    Ich hab rausgefunden, dass die 8 (oder erste Digit jeder Linie) im Prinzip eine ID fuer eine Funktion ist, die zum D3D_model_primitive Bloedsinn angehoert.
    Zur Zeit spiele ich mit einer recht interessanten und flexiblen Variante eines D3D-Modell-Kompressors, der im prinzip ermoeglicht, dem Benutzer die Option offen zu halten : "Was soll exportiert werden" , um ordentlich an bytes einzusparen.

    Ich habe nun folgendes Problem:
    In welcher Reihenfolge werden die Coords eingelesen? Und welche ID gibt wieder, was eingelesen werden soll?

    Soweit ich rausgefunden hab laeuft unter 8 folgendes ab:

    GML-Quellcode

    1. 8 = d3d_model_vertex_normal_texture_color(modid,vx,vy,vz,nx,ny,nz,tx,ty,color,alpha);

    Ich hab ausprobiert, ob 7 im Prinzip die vorherige Funktion ist, die ohne color und alpha Werte einliest. Aber das ergibt bei meinem export ein tierischen Saustall. Ich vermute, dass hier irgendwo eine Ausnahme bei den pr_triangle*** Type liegt (kann ja sein). Ich habe auch 6,5,4 geprueft, mit unterschiedlichen Ergebnissen in der Argumentations-Kette (demnach liest 5 keine Normals und Texturdaten, NUR Color)... und die Reihenfolge der gelesenen Argumente ist bis auf die vertex (welche immer 1. 2. und 3. Argument nach der ID) aendert sich irgendwie immer :/

    Wenn jemand mehr ueber diese Datenstruktur weiss, waere ich recht Dankbar fuer einen Tritt in die richtige Richtung.

    Edit: Ne man, bei 8 wird kein Color und Alpha eingelesen... ich dreh noch durch

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Gleich knallt's ()

  • Eine Idee wäre doch, einfach mal alle Funktionen anzuwenden, das Modell abzuspeichern und sich anschließend die Datei anzuschauen. Ich habe dies mal mit folgendem Code getan:

    GML-Quellcode

    1. m = d3d_model_create();
    2. d3d_model_block(m,1,2,3,4,5,6,7,8);
    3. d3d_model_cylinder(m,1,2,3,4,5,6,7,8,9,10);
    4. d3d_model_cone(m,1,2,3,4,5,6,7,8,9,10);
    5. d3d_model_ellipsoid(m,1,2,3,4,5,6,7,8,9);
    6. d3d_model_wall(m,1,2,3,4,5,6,7,8);
    7. d3d_model_floor(m,1,2,3,4,5,6,7,8);
    8. d3d_model_primitive_begin(m,pr_linelist);
    9. d3d_model_primitive_begin(m,pr_linestrip);
    10. d3d_model_primitive_begin(m,pr_pointlist);
    11. d3d_model_primitive_begin(m,pr_trianglefan);
    12. d3d_model_primitive_begin(m,pr_trianglelist);
    13. d3d_model_primitive_begin(m,pr_trianglestrip);
    14. d3d_model_primitive_end(m);
    15. d3d_model_vertex(m,1,2,3);
    16. d3d_model_vertex_color(m,1,2,3,4,5);
    17. d3d_model_vertex_texture(m,1,2,3,4,5);
    18. d3d_model_vertex_texture_color(m,1,2,3,4,5,6,7);
    19. d3d_model_vertex_normal(m,1,2,3,4,5,6);
    20. d3d_model_vertex_normal_color(m,1,2,3,4,5,6,7,8);
    21. d3d_model_vertex_normal_texture(m,1,2,3,4,5,6,7,8);
    22. d3d_model_vertex_normal_texture_color(m,1,2,3,4,5,6,7,8,9,10);
    23. d3d_model_save(m,"test.d3d");
    Alles anzeigen

    Heraus kam folgende Datei:

    Quellcode

    1. 100
    2. 21
    3. 10 1,0000 2,0000 3,0000 4,0000 5,0000 6,0000 7,0000 8,0000 0,0000 0,0000
    4. 11 1,0000 2,0000 3,0000 4,0000 5,0000 6,0000 7,0000 8,0000 1,0000 10,0000
    5. 12 1,0000 2,0000 3,0000 4,0000 5,0000 6,0000 7,0000 8,0000 1,0000 10,0000
    6. 13 1,0000 2,0000 3,0000 4,0000 5,0000 6,0000 7,0000 8,0000 9,0000 0,0000
    7. 14 1,0000 2,0000 3,0000 4,0000 5,0000 6,0000 7,0000 8,0000 0,0000 0,0000
    8. 15 1,0000 2,0000 3,0000 4,0000 5,0000 6,0000 7,0000 8,0000 0,0000 0,0000
    9. 0 2,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000
    10. 0 3,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000
    11. 0 1,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000
    12. 0 6,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000
    13. 0 4,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000
    14. 0 5,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000
    15. 1 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000
    16. 2 1,0000 2,0000 3,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000
    17. 3 1,0000 2,0000 3,0000 4,0000 5,0000 0,0000 0,0000 0,0000 0,0000 0,0000
    18. 4 1,0000 2,0000 3,0000 4,0000 5,0000 0,0000 0,0000 0,0000 0,0000 0,0000
    19. 5 1,0000 2,0000 3,0000 4,0000 5,0000 6,0000 7,0000 0,0000 0,0000 0,0000
    20. 6 1,0000 2,0000 3,0000 4,0000 5,0000 6,0000 0,0000 0,0000 0,0000 0,0000
    21. 7 1,0000 2,0000 3,0000 4,0000 5,0000 6,0000 7,0000 8,0000 0,0000 0,0000
    22. 8 1,0000 2,0000 3,0000 4,0000 5,0000 6,0000 7,0000 8,0000 0,0000 0,0000
    23. 9 1,0000 2,0000 3,0000 4,0000 5,0000 6,0000 7,0000 8,0000 9,0000 10,0000
    Alles anzeigen

    Hier kann man jetzt ganz einfach die IDs der einzelnen Funktionen ablesen und wie man sieht werden für jede Funktion einfach alle Argumente der Reihe nach abgespeichert. Und die ID 8 entspricht d3d_model_vertex_normal_texture weswegen wie du sagtest color und alpha ignoriert werden.

    Ich meine übrigens an obiger Ausgabe einen Bug im GM festgestellt zu haben. In den Zeilen 4 und 5 hätten nämlich nacheinander die Zahlen von 1 bis 10 ausgegeben werden sollen. Allerdings wird jeweils statt der 9 eine 1 ausgegeben. Verwendet man also d3d_model_cylinder oder d3d_model_cone in abgespeicherten Modellen sollte man vorsichtig sein. Eventuell gibt's den Bug aber im GM 8.1 schon gar nicht mehr.
  • Benutzer online 1

    1 Besucher