TileMap OpenGL (non riesco a far renderizzare in modo corretto)

Valcars

Nuovo Utente
1
1
Salve a tutti e scusatemi per il disturbo... io avrei un problema con la renderizzazione di alcuni oggetti in 2D per poter creare una mappa....
In pratica io leggo da un file di testo dove dentro ci sono solo numeri.... ogni numero corrisponde a un MapObject che ha un ID....
Quindi se nel file di testo ad esempio scrivo
1 e l'id del MapObject allora renderizza questo oggetto.... non so se riesco a farmi capire bene cmq il problema è che quando mi renderizza gli oggetti la seconda linea è uguale alla prima....cmq provo a postarvi il codice per farvi capire meglio....
Ho una classe TileMap:
TileMap.hpp

C++:
#ifndef __TILEMAP_HPP__
#define __TILEMAP_HPP__

#include "MapObject.hpp"

class TileMap {

    public:
        std::vector<MapObject> MapObj;
     
     
        TileMap() {}      
        TileMap(std::vector<MapObject> &mapObject, const char* tileMapFile, unsigned int map_width, unsigned int map_height);
        void onInit(std::vector<MapObject> &mapObject, std::vector<std::vector<unsigned int>> data, unsigned int map_width, unsigned int map_height);
        void onRenderer(unsigned int screen_width, unsigned int screen_height);
        void onDestroy();

};

#endif // __TILEMAP_HPP__

TileMap.cpp
C++:
#include "TileMap.hpp"
#include <string>
#include <fstream>
#include <sstream>
#include <iostream>

/* ============================================================================================== */
/*                                              TileMap                                           */
/* ============================================================================================== */
TileMap::TileMap(std::vector<MapObject> &mapObject, const char* tileMapFile, unsigned int map_width, unsigned int map_height){

    MapObj = mapObject;

    std::vector<unsigned int> tileData;
    unsigned int tileCode;
    std::string line;
    std::vector<std::vector<unsigned int>> Data;

    std::ifstream file(tileMapFile);
    if(!file.is_open()){
        std::cout << "Error open Map File" << std::endl;
    }
   
    while(std::getline(file, line)){
        std::istringstream sstream(line);
        while(sstream >> tileCode){
            tileData.push_back(tileCode);

        }
        Data.push_back(tileData);
    }
   
    file.close();

    std::cout  << Data.size() - 1 << std::endl; //Y
    std::cout  << Data[0].size() << std::endl; //X

    if(Data.size() > 0){
        onInit(mapObject, Data, map_width, map_height);
    }
       
}



/* ============================================================================================== */
/*                                             onInit                                             */
/* ============================================================================================== */
void TileMap::onInit(std::vector<MapObject> &mapObject, std::vector<std::vector<unsigned int>> data, unsigned int map_width, unsigned int map_height){

    unsigned int widthVectorX = data[0].size(); //X
    unsigned int heightVectorY = data.size() - 1; //Y
    unsigned int mapObjectPositionX = map_width / widthVectorX;
    unsigned int mapObjectPositionY = map_height / heightVectorY;

    for(int y = 0; y < heightVectorY; y++){
        for(int x = 0; x < widthVectorX; x++){
           
            for(auto &mObj : mapObject){
                if(data[y][x] == mObj.ID && mObj.ID == 1){
                    mObj.Position = glm::vec2(mObj.Size.x *  x, mObj.Size.y *  y);
                    mObj.Color = glm::vec3(0.4, 0.7, 0.1);
                    MapObj.push_back(mObj);
                    std::cout << "Sono mattone 1" <<  " X: " << mObj.Position.x << " Y: " << mObj.Position.y << std::endl;
                }

                if(data[y][x] == mObj.ID && mObj.ID == 2){
                    mObj.Position = glm::vec2(mObj.Size.x *  x,  mObj.Size.y *  y);
                    mObj.Color = glm::vec3(0.8, 0.3, 0.2);
                    MapObj.push_back(mObj);
                    std::cout << "Sono mattone 2" <<  " X: " << mObj.Position.x << " Y: " << mObj.Position.y << std::endl;
                }

                if(data[y][x] == mObj.ID && mObj.ID == 3){
                    mObj.Position = glm::vec2(mObj.Size.x *  x,  mObj.Size.y *  y);
                    mObj.Color = glm::vec3(0.2, 0.4, 0.6);
                    MapObj.push_back(mObj);
                    std::cout << "Sono mattone 3" <<  " X: " << mObj.Position.x << " Y: " << mObj.Position.y << std::endl;
                }
               
            }
           
        }
       
    }
    std::cout << MapObj.size() << std::endl;
   
}



/* ============================================================================================== */
/*                                           onRenderer                                           */
/* ============================================================================================== */
void TileMap::onRenderer(unsigned int screen_width, unsigned int screen_height){
   
    // for(auto mObj : MapObj){
    //     mObj.onRenderer(screen_width, screen_height);
    // }
   
    for(int i = 0; i < MapObj.size(); i++){
        MapObj[i].onRenderer(screen_width, screen_height);
    }
  
}



/* ============================================================================================== */
/*                                            onDestroy                                           */
/* ============================================================================================== */
void TileMap::onDestroy(){

    for(int i = 0; i < MapObj.size(); i++){
        MapObj[i].onDestroy();
    }
}
File Di testo dove leggo gli id degli oggetti

Codice:
1 2 2 1 2 3 1 2 2 1 1 1 1
3 1 1 1 1 2 2 3 1 2 2 1 2

Ho allegato un'immagine per farvi vedere come me lo renderizza
in pratica la seconda linea è uguale alla prima... credo che sia un problema di posizione perchè ho provato a mostrare a video ogni posizione degli oggetti e si trova...però con capisco perchè mi da questo problema...
spero qualcuno possa aiutarmi
 

Allegati

  • Schermata del 2023-01-04 12-21-35.png
    Schermata del 2023-01-04 12-21-35.png
    20.1 KB · Visualizzazioni: 24
Ultima modifica da un moderatore:

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili