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

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

1

01.02.2012, 21:58

Tilemap erstellen

Hallo,

ich versuche gerade eine Tilemap aus einem 1D Array und den Angaben Höhe und Breite zu basteln. Dabei möchte ich für jedes Tile 4 Vertices, 6 Indices und 4 Texturkoordinaten. Dabei werden die Texturkoordinaten aus einem Tile-struct erstellt das in einem vector der Klasse gespeichert ist (damit braucht man nur einmal das "Gras-Tile" hinzufügen und kann im Array dann eine Zahl benutzen [außer 0]).

Hier mal die load Methode:

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
void Tilemap::load(unsigned int *map){
    unsigned int i = 0;
    unsigned int i2 = 0;

    m_vertices.clear();
    m_indices.clear();
    m_texCoords.clear();
    m_map.clear();

    m_vertices.resize((m_width+1)*(m_height+1)*2);
    m_indices.resize(m_width*m_height*6);
    m_texCoords.resize((m_width+1)*(m_height+1)*2);
    m_map.resize(m_width*m_height);
        
    // Mesh
    for(unsigned int x = 0; x < m_width+1; x++){
        for(unsigned int y = 0; y < m_height+1; y++){
            m_vertices[i] = x*m_tileSize.x;
            m_vertices[i+1] = y*m_tileSize.y;
            
            i += 2;
        }
    }
        
    for(unsigned int x = 0; x < m_width; x++){
        for(unsigned int y = 0; y < m_height; y++){
            i = y*m_width+x;

            // Tiles
            m_map[i] = map[i];
        
            // Indices
            m_indices[i2] = x*(m_height+1)+y;
            m_indices[i2+1] = (x+1)*(m_height+1)+y;
            m_indices[i2+2] = x*(m_height+1)+y+1;
            m_indices[i2+3] = (x+1)*(m_height+1)+y;
            m_indices[i2+4] = (x+1)*(m_height+1)+y+1;
            m_indices[i2+5] = x*(m_height+1)+y+1;
            
            i2 += 6;

            // Texturkoordinaten
            m_texCoords[(x*(m_height+1)+y)*2] = m_tiles[m_map[i]-1].x0;
            m_texCoords[(x*(m_height+1)+y)*2+1] = m_tiles[m_map[i]-1].y0;

            m_texCoords[(x*(m_height+1)+y+1)*2] = m_tiles[m_map[i]-1].x0;
            m_texCoords[(x*(m_height+1)+y+1)*2+1] = m_tiles[m_map[i]-1].y1;

            m_texCoords[((x+1)*(m_height+1)+y)*2] = m_tiles[m_map[i]-1].x1;
            m_texCoords[((x+1)*(m_height+1)+y)*2+1] = m_tiles[m_map[i]-1].y0;

            m_texCoords[((x+1)*(m_height+1)+y+1)*2] = m_tiles[m_map[i]-1].x1;
            m_texCoords[((x+1)*(m_height+1)+y+1)*2+1] = m_tiles[m_map[i]-1].y1;
        }
    }

    generateBuffer();
}


So, das eigentliche Problem sind jetzt die Texturkoordinaten. Ich glaube es schonmal hinbekommen zu haben den Index richtig zu berechnen. Allerdings kommt dabei das raus:


(Link)


So soll das natürlich nicht aussehen...
Das Mesh wird soweit richtig erstellt:


(Link)


Ich verstehe nicht ganz wo jetzt mein Logikfehler ist... auf dem Papier sollte alles stimmen.

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

01.02.2012, 22:40

Ach ich bin auch ein Troll, ich versuche gerade einem Vertex 2 Texturkoordinaten zuzuordnen! Deswegen passt das auch oben rechts mit den dreien.
Wie ließe sich das am besten lösen? Mehr Texturkoordinaten bekomme ich ja nicht über die Indices.

[EDIT]

Es gibt keine Möglichkeit dies zu realisieren ohne Vertices zu duplizieren, oder hab ich was übersehen?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DeKugelschieber« (01.02.2012, 22:50)


idontknow

unregistriert

3

01.02.2012, 23:20

Vertices duplizieren? Kp wies in OGL ist aber normalerweise schreibst du einfach in dein Vertices Array dein Ramsch rein und kopierst es dann in nen Buffer..

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

02.02.2012, 00:16

Es gibt keine Möglichkeit dies zu realisieren ohne Vertices zu duplizieren, oder hab ich was übersehen?

Nein du hast nichts übersehen; du musst duplizieren.

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

5

02.02.2012, 19:34

Alles klar.

Werbeanzeige