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

serial chiller

Frischling

  • »serial chiller« ist der Autor dieses Themas

Beiträge: 61

Wohnort: Rheinbach ;-(

Beruf: berufs chiller

  • Private Nachricht senden

1

19.11.2004, 19:44

höhendaten aus Heightmap laden

Tag,
ich versuche atm höhendaten aus einem .raw file zu laden, die werte dürften (imho) auch korrekt sein, aber ne iteration in der der IndexBuffer gefüllt werden soll scheint nicht richtig abzulaufen.
Zudem weiss ich nicht ob der Code den ich bis jetzt habe auch funktionieren wird wenn das 1. problem behoben ist, also poste ich gleich mal den relevanten Code, in der Hoffnung dass ihr mich auf nicht vorhandene Fehler hinweist um den troll zu beschäftigen... ;)
danke

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
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
int     iNumVertices;
int     iNumIndices;
WORD    wIndex;
SHeightmapVertex    Vertex;
tbVector3           vPosition;

LoadRawFile("Terrain.raw", 128 * 128, g_HeightMap);
iNumVertices = 128*128;

g_pHeightmapVB = new tbVertexBuffer;
    if(g_pHeightmapVB->Init(iNumVertices * sizeof(SHeightmapVertex), sizeof(SHeightmapVertex), HEIGHTMAP_VERTEX_FVF,
                        D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, D3DPOOL_DEFAULT))
    {
        // Fehler!

        return TB_ERROR;
    }

iNumIndices = (127) * (127) * 6;
    g_pHeightmapIB = new tbIndexBuffer;
    if(g_pHeightmapIB->Init(iNumIndices * sizeof(WORD), sizeof(WORD), D3DFMT_INDEX16))
    {
        // Fehler!

        return TB_ERROR;
    }

    for(int Xa = 0; Xa <= 127; Xa++)
    {
    
    
        for(int Ya = 0; Ya <= 128;Ya++)
        {

            //Vertizes


            vPosition.x = (float) Xa;
            vPosition.y = (float) Height(g_HeightMap, Xa,Ya);
            vPosition.z = (float) Ya;
        
            vPosition.x /= 100;
            vPosition.y /= 1024;
            vPosition.z /= 100;
            // Rückruffunktionen aufrufen

            Vertex.vPosition = vPosition;
            Vertex.dwColor = (DWORD)(tbColor(1.0f, 1.0f, 0.0f));
            Vertex.vTexture = TextureProc(tbVector2(vPosition.x, vPosition.z));

            // Den Vertex setzen

            g_pHeightmapVB->SetVertex(GetVertexIndex(Xa, Ya), &Vertex);


        }

    }

    if(g_pHeightmapVB->Update()) return TB_ERROR;


    for(int Xb = 0; Xb < 127; Xb++)
    {
    
        for(int Yb = 0; Yb < 127; Yb++)
        {
// Erstes Dreieck erzeugen, bei dem der Vertex (x, y) links oben ist

            // (x,y) _______ (x+1,y)

            //   1   |     /    2

            //       |    /

            //       |   /

            //       |  /

            //       | /

            //       |/

            //  (x,y+1)

            //     3

        
            wIndex = GetVertexIndex(Xb, Yb);        g_pHeightmapIB->AddIndex(&wIndex);

            wIndex = GetVertexIndex((Xb+1), Yb);    g_pHeightmapIB->AddIndex(&wIndex);

            wIndex = GetVertexIndex(Xb, (Yb + 1));  g_pHeightmapIB->AddIndex(&wIndex);
        

            // Zweites Dreieck

            wIndex = GetVertexIndex(Xb, Yb+1);      g_pHeightmapIB->AddIndex(&wIndex);

            wIndex = GetVertexIndex(Xb+1, Yb);      g_pHeightmapIB->AddIndex(&wIndex);
        
            wIndex = GetVertexIndex(Xb+1,Yb+1); g_pHeightmapIB->AddIndex(&wIndex);

        
        };
    };  if(g_pHeightmapIB->Update()) return TB_ERROR;

    // ------------------------------------------------------------------



    g_pHeightmapTexture = tbTextureManager::GetTexture("Terrain.bmp");
    if(g_pHeightmapTexture == NULL) return TB_ERROR;

    return TB_OK;
}

2

22.11.2004, 12:46

Deinen IB kannst gleich mal abschreiben :)

127*127*6 = 96774 > 65535
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

3

22.11.2004, 13:07

genau, mach dir 64*64er Patches (Quadtree ?)

Anonymous

unregistriert

4

22.11.2004, 16:09

thx schonmal. :)
aber habt ihr vielleicht trotzdem ne idee warum die iteration so aussieht? ???
ich mach die log datei auch eben nochn stück kürzer... :P

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

22.11.2004, 19:02

Ähm wieso abschrieben? Solange der int Wert aller Einträge innerhalb des Bereiches -65535 65535 oder 2*65535 bleibt, ist alles in Ordnung, da interessiert die Größes des Buffers nicht...

Schleierhat ist mir warum du eine 128 * 128 Textur lädest aber von der X-Achse und der Y-Achse nur jede 16. Zeile abfragst und setzt....

C-/C++-Quelltext

1
 for(int Xa = 0; Xa < 128; Xa+=16) 


(verzeih mir wenn ich da was missverstanden habe...)

serial chiller

Frischling

  • »serial chiller« ist der Autor dieses Themas

Beiträge: 61

Wohnort: Rheinbach ;-(

Beruf: berufs chiller

  • Private Nachricht senden

6

22.11.2004, 19:07

lol ja, sicaine hat mich eben auch drauf hingewiesen. :krank:
danke :)
jetzt sieht es so aus:

(Link)

irgendwie ziemlich....durchsichtig. und ohne textur ???
der FVF ist jetzt

C-/C++-Quelltext

1
#define HEIGHTMAP_VERTEX_FVF (D3DFVF_XYZ | D3DFVF_TEX1)

hoffe der ist wenigstens korrekt :ohoh:

7

22.11.2004, 19:33

sieht eher nach Fehldarstellung aus, vb falsch gefüllt bzw bei den Indices falsch gefüllt ?

serial chiller

Frischling

  • »serial chiller« ist der Autor dieses Themas

Beiträge: 61

Wohnort: Rheinbach ;-(

Beruf: berufs chiller

  • Private Nachricht senden

8

27.11.2004, 19:32

hab den source mal editiert
+ der indexbuffer ist bestimmt nicht richtig gefüllt....
http://www.3dsp.sicaine.net/screens/heightmap.jpg
http://www.3dsp.sicaine.net/screens/heightmap2.jpg

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

9

27.11.2004, 20:39

Sieht mir eher nach einem VB Fehler aus, oder warum sind viele Vertices so weit oben und viele so weit unten? Evl schau Dir mal den VB als Punktwolke an.
"Games are algorithmic entertainment."

10

28.11.2004, 19:19

Verdächtig sehen auch die Löcher aus und die komische Schwarzgepunktete Linie unterhalb des Mesh.


Kann es sein, das du die Anzahl der Vertice nicht richtig gesetzt hast?
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige