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!
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]).
void Tilemap::load(unsignedint*map){
unsignedint i =0;
unsignedint 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);
// Meshfor(unsignedint x =0; x < m_width+1; x++){
for(unsignedint 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(unsignedint x =0; x < m_width; x++){
for(unsignedint 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:
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?
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..