Gamestudio Links
Zorro Links
Newest Posts
Data from CSV not parsed correctly
by EternallyCurious. 04/18/24 10:45
StartWeek not working as it should
by Zheka. 04/18/24 10:11
folder management functions
by VoroneTZ. 04/17/24 06:52
lookback setting performance issue
by 7th_zorro. 04/16/24 03:08
zorro 64bit command line support
by 7th_zorro. 04/15/24 09:36
Zorro FIX plugin - Experimental
by flink. 04/14/24 07:48
Zorro FIX plugin - Experimental
by flink. 04/14/24 07:46
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
2 registered members (flink, AndrewAMD), 656 guests, and 1 spider.
Key: Admin, Global Mod, Mod
Newest Members
EternallyCurious, howardR, 11honza11, ccorrea, sakolin
19047 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 1 of 3 1 2 3
Deformers struct in MDL7 abspeichern. #467669
08/20/17 15:41
08/20/17 15:41
Joined: Jun 2010
Posts: 212
tagimbul Offline OP
Member
tagimbul  Offline OP
Member

Joined: Jun 2010
Posts: 212
hey leute ich bin am ende meiner latien.
ich würde gerne das deformer struct im mdl7 abspeichern

das mdl7 besteht aus:


Code:
MD7_HEADER
	char	ident[4];		// "MDL7"
	long	version;		// '0', 'sub'- version number;
	long	bones_num;
	long	groups_num;
	long	mdl7data_size;	// this file size (head included), except entlump and medlump. 
	long	entlump_size;	// entity info size (not yet used, always 0)
	long	medlump_size;	// size of data for MED in bytes

	unsigned short md7_bone_stc_size;
	unsigned short md7_skin_stc_size;
	unsigned short md7_colorvalue_stc_size;
	unsigned short md7_material_stc_size;
	unsigned short md7_skinpoint_stc_size;
	unsigned short md7_triangle_stc_size;
	unsigned short md7_mainvertex_stc_size;
	unsigned short md7_framevertex_stc_size;
	unsigned short md7_bonetrans_stc_size;
	unsigned short md7_frame_stc_size;

struct MD7_BONE
{
	unsigned short parent_index;
	BYTE _unused_[2]; // 
	float x,y,z;
//ws, 12.05.2003: bone name mitspeichern...
	char name[MAX_BONENAMESIZE];
};

struct MD7_GROUP
{
	unsigned char	typ;		// = '1' -> triangle based Mesh

//ws, 26.04.2006 max weights per vertex
//	BYTE	_unused_[3];
	BYTE	deformers;
	BYTE	max_weights;
	BYTE	_unused_;

	long	groupdata_size; // size of data for this group in bytes ( MD7_GROUP stc. included).
	char	name[MAX_GROUPNAMESIZE];
	long	numskins;
	long	num_stpts;	// number of 2D skin vertices
	long	numtris;
	long	numverts;
	long	numframes;
};


struct MD7_DEFORMER
{
	BYTE	deformer_version;		// 0
	BYTE	deformer_typ;			// 0 - bones
	BYTE	_unused_[2];
	long	group_index;
	long	elements;
	long	deformerdata_size;
};

struct MD7_DEFORMERELEMENT
{
	long	element_index;		// bei deformer_typ==0 (==bones) element_index == bone index
	char	element_name[MAX_BONENAMESIZE];
	long	weights;
};

struct MD7_DEFORMERWEIGHT
{
	long	index;				// bei deformer_typ==0 (==bones) index == vertex index
	float	weight;
};



MD7_HEADER,MD7_BONE und MD7_GROUP kann ich abspeichern

header bone und group speicher ich so ab:
Code:
file.write(struct.pack("<4sllllllHHHHHHHHHH",
                                   b,
                                   0,
                                   len(self.bones),
                                   len(self.groups),
                                   self.getsize(),  # 0 = subversion
                                   0,  # entlumpsize,
                                   0,  # medlumpsize
                                   36,
                                   28,
                                   16,
                                   68,
                                   8,
                                   16,
                                   26,
                                   26,
                                   68,
                                   24))
        for bone in self.bones:
            bone.write(file)
        for group in self.groups:
            group.write(file)



das bone write und group write sieht so aus:
Code:
//bone
            file.write(struct.pack("<HHfff20s",
                                   self.parentindex, 0,
                                   self.x, self.y, self.z, b))

---------------------------------------------------------------

//group
            file.write(struct.pack("<BBBBl16slllll",
                                   1, # type 1 = triangle mesh
                                   0, # deformers ??
                                   0, # max_weights ??
                                   0, #
                                   self.getsize(),
                                   b,
                                   len(self.skins),
                                   len(self.uvs),
                                   len(self.triangles),
                                   len(self.vertices),
                                   len(self.frames)))



und jetzt das problem:
bei groups wird ein deformer mit gegeben und ein max_weight.
aber ich weis nicht in welcher reihenfolge und auch nicht genau welche formater

also schreibe ich die deformer direkt nach dem group pack

Code:
if extension == "mdl":
            file.write(struct.pack("<BBBlll",
                                   deformer_version,  # 0
                                   deformer_typ,  # 0 - bones
                                   0, # _unused_[2] evtl ändern zu  " 0,0, und ein B hinzufügen"
                                   group_index,
                                   len(deformer_elements),
                                   deformerdata_size # <-- ?? XDD  shit xD
                                   ))

            for element in deformer_elements: 
                b = bytearray()
                b.extend(map(ord, element[1]))

                file.write(struct.pack("<l16sl",
                                       element[0], # element[0] == bone index nummer evtl  ändern auf " element[0] -1 " !!!
                                       b, # element[1] == bone name || b == element[1]
                                       len(element[2]) # länge von weights
                                       ))
                for weight in element[2]:
                    file.write(struct.pack("<Hf",
                                           weight[0], # weight[0] == vertex index
                                           weight[1]  # weight[1] == weight
                                           ))



ich gehe von folgender hierarchie aus:

Quote:

MDL7
____+bones
____+groups
____+deformer
_______+elements
___________+weights



ist das korrekt oder muss ich:


Quote:

MDL7
____+bones
____+groups
_______+deformer
__________+elements
______________+weights

?
wie genau werden die deformers binär abgespeichert? und was erwartet die group bei deformers und max_weights?

Last edited by tagimbul; 08/20/17 15:45.

meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Re: Deformers struct in MDL7 abspeichern. [Re: tagimbul] #467687
08/21/17 19:44
08/21/17 19:44
Joined: Jun 2010
Posts: 212
tagimbul Offline OP
Member
tagimbul  Offline OP
Member

Joined: Jun 2010
Posts: 212
Keiner eine Ahnung?
lg tom


meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Save "Deformer" in the MDL7 Binary file? [Re: tagimbul] #467710
08/24/17 08:01
08/24/17 08:01
Joined: Jun 2010
Posts: 212
tagimbul Offline OP
Member
tagimbul  Offline OP
Member

Joined: Jun 2010
Posts: 212
Have anyone idea how to write the deformer struct correctly in binary?


meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Re: Save "Deformer" in the MDL7 Binary file? [Re: tagimbul] #467754
08/27/17 16:13
08/27/17 16:13
Joined: Jul 2000
Posts: 27,978
Frankfurt
jcl Offline

Chief Engineer
jcl  Offline

Chief Engineer

Joined: Jul 2000
Posts: 27,978
Frankfurt
Da muss auch ich passen. Das Deformer struct hat schon seit vielen Jahren keiner mehr angefasst.

Re: Save "Deformer" in the MDL7 Binary file? [Re: jcl] #467755
08/27/17 16:33
08/27/17 16:33
Joined: Oct 2011
Posts: 1,082
Germany
C
Ch40zzC0d3r Offline
Serious User
Ch40zzC0d3r  Offline
Serious User
C

Joined: Oct 2011
Posts: 1,082
Germany
Warum suchst / baust du dir nicht ein modell in MED was diese Daten nutzt und reverse engineerst das ganze?
Sollte doch nicht allzu schwer sein, einfach 010 Editor laden und die structs schreiben, der supported C syntax und Zusätze

Re: Save "Deformer" in the MDL7 Binary file? [Re: Ch40zzC0d3r] #467760
08/27/17 21:16
08/27/17 21:16
Joined: Jun 2010
Posts: 212
tagimbul Offline OP
Member
tagimbul  Offline OP
Member

Joined: Jun 2010
Posts: 212
hey =)
freut mich das du bei sowas durchblickst!
reverse engineering ist mir zwar ein begriff, wurde mich auch schon empfohlen bei meinem problem, aber ich weis zu wenig über binäre formate um diese technik anzuwenden.

kannst du mir das bitte genauer erklären?

also ich würde in Blender ein model mit weights machen und es dann zum MED exportieren mit der FBX import variante.
dann hätte ich ein MDL model mit dem deformer struct bzw. mit weights.

dann wie weiter?
kannst du mir das schritt für schritt erklären?

freundliche grüsse
tom

Last edited by tagimbul; 08/27/17 21:17.

meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Re: Save "Deformer" in the MDL7 Binary file? [Re: tagimbul] #467761
08/27/17 21:51
08/27/17 21:51
Joined: Oct 2011
Posts: 1,082
Germany
C
Ch40zzC0d3r Offline
Serious User
Ch40zzC0d3r  Offline
Serious User
C

Joined: Oct 2011
Posts: 1,082
Germany
Du benutzt einen hex editor wie 010 editor oder parst die datei mit deinem code.
Entweder parst du es jetzt von hand und findest die deformer daten so, oder hat dein script findet daten die es nicht bearbeiten kann.
Reverse engineering eines dateiformates braucht ein gewisses verständnis von dateisystemen und allgemeinen dateiformaten (speichern von daten auf einem begrenzten medium zum späteren parsen). Was man dann genau macht bzw. wie man genau rangeht ist jedes mal verschieden und basiert auf dem jeweiligen wissen welches man besitzt. In deinem fall würde ich das vorhanden wissen einfach mal nutzen, und bekannte daten aus der datei "schneiden" - also entfernen.
Danach bleibt das übrig was du nicht kennst, dann markierst du dir die stellen und findest anhanf der daten heraus wie genau die struktur aussieht.

Das ganze klingt relativ abstrakt, du solltest es einfach mal anwenden.
Reverse engineering ist eigentlich nur logik kombiniert mit dem oben genannten wissen laugh

Last edited by Ch40zzC0d3r; 08/27/17 21:51.
Re: Save "Deformer" in the MDL7 Binary file? [Re: Ch40zzC0d3r] #467765
08/28/17 17:58
08/28/17 17:58
Joined: Jun 2010
Posts: 212
tagimbul Offline OP
Member
tagimbul  Offline OP
Member

Joined: Jun 2010
Posts: 212
ok.
ich hab mich in dieses Thema eingearbeitet und weis nun genau was ich zu tun habe =)
vielen dank für den Anstoss! grin


meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Re: Save "Deformer" in the MDL7 Binary file? [Re: tagimbul] #467819
09/03/17 08:04
09/03/17 08:04
Joined: Jun 2010
Posts: 212
tagimbul Offline OP
Member
tagimbul  Offline OP
Member

Joined: Jun 2010
Posts: 212
man ich bin so aufgeregt grin
hätte ich doch von anfang an das mdl7 versucht zu parsen grin
beim parsen vielen mir so viele details auf die ich bei meinem exporter noch garnicht berücksichtig hatte!
und gleichzeitig ist es eine super lehrstunde in sachen binär und hex verarbeitung^^
bin nun etwa bei 50% und nähere mich dem deformer struct immer wie mehr grin
ich mache es nun so das ist den parser nutze um das mdl 7 in ein text dokument zu verwandeln. den code werde ich dann auch zur verfügung stellen =)

bisher habe ich ja nur versucht den alten exporter von thomas oppl zu updaten.
aber wenn ich den parser fertig habe werde ich einen ganz neuen und eigenen exporter kreieren der wirklich alles berücksichtigt was das mdl7 file zu bieten hat.
danke nochmal für den crashkurs Ch40zzC0d3r ^^

Last edited by tagimbul; 09/03/17 08:05.

meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Re: Save "Deformer" in the MDL7 Binary file? [Re: tagimbul] #467876
09/05/17 12:23
09/05/17 12:23
Joined: Jun 2010
Posts: 212
tagimbul Offline OP
Member
tagimbul  Offline OP
Member

Joined: Jun 2010
Posts: 212
ich peil's nicht....
ich kriege das ganze file geparst aber dann sind da, ohne deformer's, noch ein paar bytes übrig mit bone strings drin.
die kommen nach dem parsen von den frame matrizen:
Code:
05 00 00 00 0C 00 00 00 4D 42 49 00 01 00 00 00
10 02 00 00 02 00 00 00 94 00 00 00 02 00 00 00
42 6F 6E 65 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 BC C1 00 00 00 BF 00 00 00 41 00 00 00 00
04 00 00 00 00 00 00 00 42 6F 6E 65 31 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
42 6F 6E 65 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 C0 41 00 00 00 00
00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00
03 00 00 00 64 01 00 00 02 00 00 00 01 00 00 00
02 00 00 00 42 6F 6E 65 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 80 3F 00 00 00 00 00 00 00 00
DD 0F C9 BF 00 00 00 00 00 00 00 00 00 00 00 00
18 00 00 00 01 00 00 00 00 00 00 00 00 00 80 3F
00 00 80 3F 00 00 80 3F 00 00 80 3F 00 00 80 3F
00 00 80 3F 42 6F 6E 65 31 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 80 3F 00 00 00 00 00 00 00 00
35 05 AC 3F 00 00 00 00 00 00 00 00 00 00 00 00
18 00 00 00 01 00 00 00 00 00 00 00 00 00 80 3F
00 00 80 3F 00 00 80 3F 00 00 80 3F 00 00 80 3F
00 00 80 3F 02 00 00 00 01 00 00 00 42 6F 6E 65
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 3F
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 18 00 00 00 01 00 00 00
00 00 00 00 00 00 80 3F 00 00 80 3F 00 00 80 3F
00 00 80 3F 00 00 80 3F 00 00 80 3F 01 00 00 00
00 00 00 00



was könnte das noch sein?
es handelt sich hierbei um ein mdl7 file das im MED erzeugt wurde.
kann das doch das deformer struct sein?
weill in der group steht deformers = 0
also muss das ja was anderes sein...
oder speichert MED deformers auch wenn sie garnicht benutzt werden?

edit:
ich habe auch beim parsen das mdl7data_size erreicht. dann hab ich noch das medlump_size übrig das ist genau der teil wo da steht.
es hat eine anzahl von 548 hex
und medlump_size hat eine grösse von 548
aber wieso sind dort strings drin?
laut Mdl7.h sind das 2 +3 int's....

Last edited by tagimbul; 09/05/17 12:35.

meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Page 1 of 3 1 2 3

Moderated by  old_bill, Tobias 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1