Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

28.07.2008, 11:17

[Erledigt]Problem mit Python Exporter in Blender

Hi,

ich bastel gerade an nem Exporter für Blender in Python. Mit meinem bisherigen Skript(?) kann ich die Anzahl der Vertices, die Vertices selbst(Position und Normalen), die Anzahl der Indices und dann die Indices ausgeben.
Mit dem Standard-Würfel der am Anfang da ist funktionniert das so ganz gut aber sobald ich auf Subdivide drücke werden die Indices in meinem Programm falsch eingelesen (werden höher als die Anzahl der Vertices)

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
def write_obj(filepath):
        out = file(filepath, 'w')
        sce = bpy.data.scenes.active
        ob = sce.objects.active
        mesh = ob.getData(mesh=1)

    # Anzahl der Vertices in die Datei schreiben
    out.write (struct.pack('I', GetNumVertices()))

    # Vertices in die Datei schreiben
        for vert in mesh.verts:
            # Positionsvektor in die Datei schreiben
            out.write(struct.pack('f', vert.co.x))
            out.write(struct.pack('f', vert.co.y))
            out.write(struct.pack('f', vert.co.z))
            
            # Normalenvektor in die Datei schreiben
            out.write(struct.pack('f', vert.no.x))
            out.write(struct.pack('f', vert.no.y))
            out.write(struct.pack('f', vert.no.z))

    # Anzahl der Indices in die Datei schreiben
    out.write (struct.pack('I', GetNumIndices()))

    #Indices in die Datei schreiben
        for face in mesh.faces: # 4-ecke durchgehen
  
                # Indices in die Datei schreiben
                out.write (struct.pack('H', face.v[0].index))
                out.write (struct.pack('H', face.v[1].index))
                out.write (struct.pack('H', face.v[2].index))
            
                out.write (struct.pack('H', face.v[0].index))
                out.write (struct.pack('H', face.v[2].index))
                out.write (struct.pack('H', face.v[3].index))
        out.close()
Blender.Window.FileSelector(write_obj, "Export")


und hier im Programm:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Anzahl der Vertices einlesen

    Model.read (&GLOBALS::NumVertices, sizeof(unsigned int));
// Vertices laden

    for (unsigned int Vertex=0; Vertex < GLOBALS::NumVertices; ++Vertex)
    {
        // Positionsvektor einlesen

        Model.read (&v.Pos.x, sizeof(float));
        Model.read (&v.Pos.z, sizeof(float));
        Model.read (&v.Pos.y, sizeof(float));

        // Normalenvektor einlesen

        Model.read (&v.Normal.x, sizeof(float));
        Model.read (&v.Normal.z, sizeof(float));
        Model.read (&v.Normal.y, sizeof(float));
    
        GLOBALS::VB->SetVertices (&v, 1, Vertex);
    }

// Anzahl der Indices einlesen

    Model.read (&GLOBALS::NumIndices, sizeof (unsigned int));

// Indices laden

    for (unsigned int Index=0; Index < GLOBALS::NumIndices; ++Index)
    {
        Model.read (&i, sizeof(WORD));      

        GLOBALS::IB->SetIndices (&i, 1, Index);
    }


Mir ist aufgefallen, dass die Datei 6Byte zu groß ist (ist 926 Bytes groß)
(26Vertices*6*4Bytes+144Indices*2Bytes+8Bytes=920)
und dass Index 0-47 normal sind und ab Byte Nr. 728 (also Index 48 ) die Indexgröße die Anzahl der Vertices übersteigt.

Ich hoffe, dass mir irgendwer helfen kann(auch wenns jetzt hier ein wenig lang geworden ist)^^
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

2

28.07.2008, 19:32

Hi,

ich hab die Lösung für mein Problem selbst gefunden.
Ich hab herausgefunden, dass es in Python einen Unterschied zwischen Text und Binären Dateien gibt. Man muss also beim öffnen der Datei nicht nur w sondern wb angeben.

Jetzt hab ich aber immer noch ein Problem und zwar sieht eine Seite des Würfens ziemlich verzerrt aus. Woran liegt das? (Tritt erst auf wenn ich den Würfel 2 mal "Subdivided"^^ hab.(also 386 Vertices und 2304 Indices))

(Link)
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

3

30.07.2008, 13:26

(Wollte hier eigentlich net nur Selbstgespräche führen aber ich will die Lösung meines Problem doch mal Preisgeben^^)

Und zwar hab ich die Würfel immer nur ohne Culling gezeichnet und jetzt hab ich CollMode mal auf CW gestellt und hab dann gesehen dass in dem Würfel unnötige Dreiecke gezeichnet werden(Bei den Verzerrungen sind dann 2 Dreiecke genau übereinander).

Hab dann noch ein 3ds exportiert in mein Programm geladen und da tritt das gleiche Problem auf.
=> Subdivide = Buggy^^

EDIT Muss das hier nochmal richtig stellen^^ und zwar war das Ganze ein unglaublich dummer Fehler! Ich hab einfach nur die DrawIndexedPrimitive falsch aufgerufen^^
=> Subdivide != Buggy
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

Werbeanzeige