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

Anonymous

unregistriert

1

25.05.2004, 22:24

Probs mit selbsterstellten TBM-Modellen beim Octree-Compiler

Also wie oben schon steht habe ich Probs mit selbsterstellten TBM-Modellen beim späteren "kompilieren" mit dem Octree-Compiler....

ich habe eine Loader für Davids Terrain-Editor geschrieben und dieser speichert direkt die Daten als TBM-File ab.
Das funktioniert auch soweit sehr gut; (das Modell wird korrekt wiedergegeben) nur wenn ich diesen erzeugten TBM-File dann mit dem Octree-Compiler "kompiliere" entsteht ein ziemlich zerfetztes Terrain, also Schrägen die es nicht gibt, Teile fehlen,....

Eigentlich komisch, dass der erzeugte TBM-File aber dennoch korrekt angezeigt wird...

naja habe hier mal die Methode die den TBM-File schreibt,
vielleicht kann mir ja jmd helfen

besonders verwirrend finde ich die Variable <dwNumVertices> in <tbModelEffectHeader>, denn als Beschreibung steht dort in der tbModel.h im Grunde "Anzahl der Indices", wenn ich aber diese Zahl (oder +-1) verwende wird das TBM-Modell gar nicht mehr angezeigt; verwende ich die Anzahl der Vertices, dann schon.... :(


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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*******************************************************************/
// TBM-Datei erstellen
int GenerateTBMFile(char* pcFilename)
{
    FILE*                       pFile;
    tbModelChunkHeader          CH;
    tbModelVerticesChunkHeader  VerticesCH;
    tbModelIndicesChunkHeader   IndicesCH;
    tbModelEffectHeader         EffectHdr;
    DWORD                       dwEffectsDataSize;


    // Datei öffnen
    pFile = fopen(pcFilename, "wb");
    if(pFile == NULL) return 1;

    // Vertexdaten-Chunk schreiben
    CH.ChunkType = TB_CT_MODEL_VERTICES;
    CH.dwDataSize = sizeof(tbModelVerticesChunkHeader) + g_dwNumVertices * g_dwVertexSize;
    VerticesCH.dwFVF = g_dwVertexFormat;
    VerticesCH.dwVertexSize = g_dwVertexSize;
    VerticesCH.fBoundingSphereRadius = g_fBoundingSphereRadius;
    VerticesCH.vBoundingBoxMin = g_vBoundingBoxMin;
    VerticesCH.vBoundingBoxMax = g_vBoundingBoxMax;
    VerticesCH.dwNumVertices = g_dwNumVertices;
    fwrite(&CH, sizeof(tbModelChunkHeader), 1, pFile);
    fwrite(&VerticesCH, sizeof(tbModelVerticesChunkHeader), 1, pFile);
    fwrite(g_bufVertex->GetBuffer(), g_dwVertexSize, g_dwNumVertices, pFile);

    // Indexdaten-Chunk schreiben
    CH.ChunkType = TB_CT_MODEL_INDICES;
    CH.dwDataSize = sizeof(tbModelIndicesChunkHeader) + g_dwNumIndices * g_dwIndexSize;
    IndicesCH.IndexFormat = g_dwIndexSize == 2 ? D3DFMT_INDEX16 : D3DFMT_INDEX32;
    IndicesCH.dwIndexSize = g_dwIndexSize;
    IndicesCH.dwNumIndices = g_dwNumIndices;
    fwrite(&CH, sizeof(tbModelChunkHeader), 1, pFile);
    fwrite(&IndicesCH, sizeof(tbModelIndicesChunkHeader), 1, pFile);
    fwrite(g_bufIndex->GetBuffer(), g_dwIndexSize, g_dwNumIndices, pFile);

    // Effekte-Chunk schreiben
    DWORD   dwNumEffects = 1;
    dwEffectsDataSize = sizeof(DWORD);
    dwEffectsDataSize += sizeof(tbModelEffectHeader);
    dwEffectsDataSize += (DWORD)(strlen(g_acEffectCode));
    CH.ChunkType = TB_CT_MODEL_EFFECTS;
    CH.dwDataSize = dwEffectsDataSize;
    fwrite(&CH, sizeof(tbModelChunkHeader), 1, pFile);
    fwrite(&dwNumEffects, sizeof(DWORD), 1, pFile);
    strcpy(EffectHdr.acName, "genEff");
    EffectHdr.bAlphaBlended = FALSE;
    EffectHdr.PrimitiveType = D3DPT_TRIANGLELIST;
    EffectHdr.dwStartIndex = 0;
    EffectHdr.dwNumPrimitives = (m_Terrain.iHeightMapRes-1)* (m_Terrain.iHeightMapRes-1) * 2;
    EffectHdr.dwMinIndex = 0;
    EffectHdr.dwNumVertices = g_dwNumVertices;//(m_Terrain.iHeightMapRes) * (m_Terrain.iHeightMapRes);
    EffectHdr.dwEffectCodeSize = (DWORD)(strlen(g_acEffectCode));
    fwrite(&EffectHdr, sizeof(tbModelEffectHeader), 1, pFile);
    fwrite(g_acEffectCode, 1, EffectHdr.dwEffectCodeSize, pFile);

    // Datei schließen
    fclose(pFile);

    return 0;
}


ansonsten poste ich gerne auch mal mehr vom Code oder stelle das Projekt zum Download bereit (wird der ein oder andere ja auch gebrauchen können)

Anonymous

unregistriert

2

30.05.2004, 19:56

Re: Probs mit selbsterstellten TBM-Modellen beim Octree-Comp

Weiss niemand Rat :(

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

30.05.2004, 20:46

Das ganze Octree-Zeugs ist fehlerhaft, weil ich nur wenig Zeit dafür hatte.
Schreib Dir lieber eigene Klassen dafür.

Werbeanzeige