Mesh speichern (oder: die Welt is so pöhse)

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Mesh laden: zurück zum start

Beitrag von Max_der_Held »

so.. ich hab mal bei ogre reingeschaut und siehe da! da isses!

voller eifer war ich am englisch übersetzten... und jetz kommen sie! die berge im neuen Tal!

ich werd einfach mal einen kleinen ausschnitt einfügen und dann fragen.

Code: Alles auswählen

        M_HEADER                = 0x1000,
                        // char*          version           : Version number check
        M_MESH                = 0x3000,
			// bool skeletallyAnimated   // important flag which  
                        // affects h/w buffer policies

kann man das mit :

Code: Alles auswählen


        *anim           = AllocateMemory (1)
        version.c       = ReadCharacter ( 1 )
        readdata       ( 1 , *anim , 1 ) 	mit skellet animiert, oder nicht.  
                            Ist wichtig !

einfach übersetzen? oder besser:
was heißt des 0x3000 und 0x1000 da drin?
:roll:

is des einfach nur ein beispiel?

2. frage:
kann purebasic überhaupt bools schreiben? soweit ich glaub kann pb
doch nur mindestens 1 byte speichern ? (.b oder .c)

... notfalls mach ich einfach alles fertig *schwitz* und schau dann, obs denn überhaupt functioniert...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

bools sind meistens 32bit groß, komplettes register.


> was heißt des 0x3000 und 0x1000 da drin?

$3000 bzw $1000
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

@Max_der_Held:

Also ganz genau ist das so: die kleinste, direkt adressierbare Speichereinheit ist das Byte. Das heißt nicht, dass du keine einzelnen Bits in einem Byte Speichern kannst, denn das ist natürlich möglich, nur ist das mit Aufwand verbunden. Sinnvoll ist das aber nicht, weil selbst bei Datenübertragung übers Internet 7 Extrabits vernachlässigbar sind.

Ein bedeutenderer Faktor ist, dass der Zugriff auf einzelne Bits viel langsamer ist als der Zugriff auf ein Byte.

Tatsächlich ist sogar der Zugriff auf ein Byte oft keine gute Idee und lohnt sich nur bei einer großen Anzahl von Werten (wenn man eher Speicher als Rechenzeit sparen will), denn am schnellsten kann ein 32Bit Prozessor auf einen 32Bit Wert zugreifen. Meistens nennt man die Größe in einem Kompiler, die der nativen Bitbreite der CPU entspricht einen Integer oder Long.
Deswegen ist ein Integer/Long auf einem 32Bit Prozessor meistens 32Bit, auf einem 64Bit Prozessor 64Bit usw.

Da man selten riesige Mengen von Boolean Werten hat ist ein Boolean meist genauso groß wie ein Integer/Long, auch wenn dort nur ein Binärer Wert drinsteht. Der Grund für die Existenz von Boolean als getrennte Einheiten von Integern/Longs (die bei einigen Programmiersprachen/Kompilern sogar nicht malgegeben ist) ist Hauptsächlich die Vermeidung von Programmierfehlern.
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Beitrag von Max_der_Held »

also einfach als long laden.. ? ..

aber wenn jetz ein 32 bit prozessor zwei long variablen speichert, und ein 64 bit die datei ließt, dann glaubt er doch, dass des nur eine variable ist, oder?
...
*denk*
oder is irgendwo festgelegt, welcher prozessortyp hier was geschrieben hat , sodass der 64 dann weiß, dass er hier mit 32-bit laden muss ? .. :?

oder lädt/speichert purebasic standartmäßig long datein mit 32 bit ...words mit 16, bytes mit 8.??

*confused*
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

Da hast du vollkommen recht, das mit den 32/64 bit ist ein Problem das zu Fehlern führen kann. Darum musst du als Programmierer beim laden von Dateien auch wissen was du tust.

Und es wird noch besser: du kannst dich nicht mal darauf verlassen, dass die Bytereihenfolge in einer Datei immer so ist, wie du dir das auf den ersten Blick vorstellst, denn da gibt es noch zwei verschiedene Formate, Big Endian und Little Endian.

Man kann es aber in den Griff bekommen, wie der Computer an dem du grade sitzt eindrucksvoll beweist. Das löst man ganz einfach über Konventionen. Wenn du also eine Datei als Bytes einlesen willst, weil du weist, dass das Datenformat das du grade liest so gedacht ist, dann kannst du das zb mit ReadByte machen.
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

64, 32, bit ... erst mal lesen, schreiben lernen... :-)

Beitrag von Max_der_Held »

ook.. aber ich darf wohl darauf vertrauen, dass die meißten keinen 64 bit prozessor haben, und beim .mesh format deswegen eine long var. als long gelesen werden darf,.. oder?? :?

( gedanke: ahh.. deswegen gibts für windows eine extra 64 bit version...)

liste:
  • bool = long
    integer = long
    long = long
    quad = quad
    float = float
    string = string
    car = caracter .c

    wenn des so stimmt, kann ich ohne probleme fortfahren? :?
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

Das kann dir an der stelle egal sein, weil dein 32bit wert sich in einem 64 bit long natürlich genauso wohlfühlt... aber nicht umgekehrt.

Also brauchst du dich an der stelle nicht drum kümmern, aber solche Probleme solltest du immer im Hinterkopf behalten.
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Beitrag von Max_der_Held »

ok :mrgreen:
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Beitrag von Max_der_Held »

also gut.. ich gebs auf, kobra, übernehmen sie!
der nachfolger, der das hoffentlich besser macht, kanns ja evtl auch mit c++ als dll oder gleich als .exe ins internet stellen *sigh*



( :cry: schule hat begonnen, ich bin wieder im rennen, am rennen, muss wieder rennen, sport machen.. oder so.. )
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

Kaeru Gaman hat geschrieben:ein punkt fällt mir spontan noch ein - gibt es gute englische und französische anleitungen für Irrlicht?
Englisch ja - naja noch ned ganz feddisch aber Kommentare, Ergänzungen etc wilkommen. Französisch - ja.. hmmm bin zwar aus der Schweiz aber mein Französisch ist so eingerostet - Freiwillige ? =p

Thalius
"...smoking hash-tables until until you run out of memory." :P
Antworten