Material::Material(Material_t tag) : tag(tag), vertexShader(this), fragmentShader(this), index0AttributeName(this) { mId = Material::MaterialIdCount++; mUuid = Math::generateUUID(); mName = ""; side() = kFrontSide; opacity() = 1.0f; transparent() = false; blending() = kNormalBlending; blendSrc() = kSrcAlphaFactor; blendDst() = kOneMinusSrcAlphaFactor; blendEquation() = kAddEquation; depthTest() = true; depthWrite() = true; polygonOffset() = false; polygonOffsetFactor() = 0; polygonOffsetUnits() = 0; // mAlphaTest = 0; overdraw() = 0; // Overdrawn pixels (typically between 0 and 1) for fixing antialiasing gaps in CanvasRenderer visible() = true; needsUpdate() = true; // By default, bind position to attribute index 0. In WebGL, attribute 0 // should always be used to avoid potentially expensive emulation. index0AttributeName("position"); linewidth() = 1.0f; metal() = false; perPixel() = true; shading() = kNoShading; vertexColors() = kNoColors; wireframe() = false; wireframeLinewidth() = 1.0f; }
int main(int argc, char *argv[]) { QApplication a(argc, argv); QMainWindow* window = new QMainWindow(); RenderGui::Viewer* viewer = new RenderGui::Viewer(); window->setCentralWidget(viewer); window->show(); int width = 640; int height = 480; SimpleScene scene; PhongMaterial metal(scene, RGBColor(0.1,0.1,0.1), RGBColor(0.8,0.8,0.8), RGBColor(0.8,0.8,0.8), 2.0); // Sphere sphere(Coord(0,0,4), metal); // scene.push_obj(&sphere); Plane triangle(Vector3d(1.0,0.0,1.0), Vector3d(0.0,1.0,1.0), Vector3d(0.0,0.0,1.0), metal); scene.push_obj(&triangle); PhongPointLight light(Coord(-5, -0.2, -0.2), RGBColor(0.2,0.2,0.2), RGBColor(0.2,0.2,0.2), RGBColor(0.2,0.2,0.2)); scene.push_light(&light); Coord cam(0,0,-1); SimpleRaytracer raytracer(scene); QImageBuffer buffer(width, height); raytracer.render(buffer, 60, cam); //buffer.setPixel(50, 50, ColorOps::white); viewer->showImage(buffer.qimage()); return a.exec(); }
void GameInterface::render(sf::RenderTarget *target) { int screenW = RenderingManager::get()->getRenderWindow()->getSize().x; int screenH = RenderingManager::get()->getRenderWindow()->getSize().y; mHUDSprite->setPosition(sf::Vector2f(0, screenH-mHUDSprite->getTexture()->getSize().y)); target->draw(*mHUDSprite); // Render resources std::stringstream stream; std::string metalStr, energyStr; stream << GameState::get()->getPlayer()->mMetal << " " << GameState::get()->getPlayer()->mEnergy; stream >> metalStr >> energyStr; sf::Text metal(metalStr, *ResourceManager::get()->getFont("Content/Fonts/font.ttf"), 20); metal.setColor(sf::Color(255,0,0)); metal.setPosition(sf::Vector2f(537, 84)+mHUDSprite->getPosition()-sf::Vector2f(metal.getLocalBounds().width/2, metal.getLocalBounds().height/2)); target->draw(metal); sf::Text energy(energyStr, *ResourceManager::get()->getFont("Content/Fonts/font.ttf"), 20); energy.setColor(sf::Color(0,0,255)); energy.setPosition(sf::Vector2f(700, 84)+mHUDSprite->getPosition()-sf::Vector2f(energy.getLocalBounds().width/2, energy.getLocalBounds().height/2)); target->draw(energy); }
void Player::initTechnologies() { Technologie recherche("Recherche", "Permet de débloquer la bibliothèque et la recherche de technologies.", 0, 0, 0, 0); Technologie exploration("Exploration", "Description", 0, 0, 0, 0); Technologie vivres("Vivres", "Description", 0, 0, 0, 0); Technologie petrole("Pétrole", "Description", 0, 0, 0, 0); Technologie caserne("Caserne", "Description", 0, 0, 0, 0); Technologie avantPoste("Avant poste", "Description", 0, 0, 0, 0); Technologie recrutement("Recrutement", "Description", 0, 0, 0, 0); Technologie metal("Métal", "Description", 0, 0, 0, 0); Technologie soldat("Soldat", "Description", 0, 0, 0, 0); Technologie demolisseur("Démolisseur", "Description", 0, 0, 0, 0); Technologie usine("Usine", "Description", 0, 0, 0, 0); Technologie aeroport("Aéroport", "Description", 0, 0, 0, 0); Technologie port("Port", "Description", 0, 0, 0, 0); Technologie jeep("Jeep", "Description", 0, 0, 0, 0); Technologie charAssault("Char", "Description", 0, 0, 0, 0); Technologie artillerie("Artillerie", "Description", 0, 0, 0, 0); Technologie dca("DCA", "Description", 0, 0, 0, 0); Technologie chasseur("Chasseur", "Description", 0, 0, 0, 0); Technologie bombardier("Bombardier", "Description", 0, 0, 0, 0); Technologie helicoptere("Hélicoptère", "Description", 0, 0, 0, 0); Technologie cuirasse("Cuirasse", "Description", 0, 0, 0, 0); Technologie torpilleur("Torpilleur", "Description", 0, 0, 0, 0); Technologie corvette("Corvette", "Description", 0, 0, 0, 0); Technologie vivresStock("Stockage de vivres", "Description", 0, 0, 0, 0); Technologie petroleStock("Stockage de pétrole", "Description", 0, 0, 0, 0); Technologie metalStock("Stockage de métaux", "Description", 0, 0, 0, 0); Technologie transportTerrestre("Transport Terrestre", "Description", 0, 0, 0, 0); Technologie transportMarin("Transport Marin", "Description", 0, 0, 0, 0); Technologie transportAerien("Transport Aérien", "Description", 0, 0, 0, 0); recherche.setTechSuivante(exploration); recherche.setTechSuivante(vivres); exploration.setTechSuivante(avantPoste); exploration.setTechSuivante(recrutement); vivres.setTechSuivante(vivresStock); vivres.setTechSuivante(caserne); vivres.setTechSuivante(petrole); vivres.setTechSuivante(metal); caserne.setTechSuivante(soldat); caserne.setTechSuivante(demolisseur); petrole.setTechSuivante(petroleStock); petrole.setTechSuivante(usine); metal.setTechSuivante(petroleStock); metal.setTechSuivante(metalStock); usine.setTechSuivante(aeroport); usine.setTechSuivante(port); usine.setTechSuivante(jeep); usine.setTechSuivante(charAssault); usine.setTechSuivante(artillerie); usine.setTechSuivante(dca); usine.setTechSuivante(transportTerrestre); aeroport.setTechSuivante(chasseur); aeroport.setTechSuivante(bombardier); aeroport.setTechSuivante(helicoptere); aeroport.setTechSuivante(transportAerien); port.setTechSuivante(cuirasse); port.setTechSuivante(torpilleur); port.setTechSuivante(corvette); port.setTechSuivante(transportMarin); demolisseur.setTechPrecedente(caserne); soldat.setTechPrecedente(caserne); caserne.setTechPrecedente(vivres); vivresStock.setTechPrecedente(vivres); petrole.setTechPrecedente(vivres); metal.setTechPrecedente(vivres); metalStock.setTechPrecedente(metal); petroleStock.setTechPrecedente(petrole); usine.setTechPrecedente(petrole); usine.setTechPrecedente(metal); aeroport.setTechPrecedente(usine); port.setTechPrecedente(usine); jeep.setTechPrecedente(usine); charAssault.setTechPrecedente(usine); artillerie.setTechPrecedente(usine); dca.setTechPrecedente(usine); transportTerrestre.setTechPrecedente(usine); chasseur.setTechPrecedente(aeroport); bombardier.setTechPrecedente(aeroport); helicoptere.setTechPrecedente(aeroport); transportAerien.setTechPrecedente(aeroport); cuirasse.setTechPrecedente(port); torpilleur.setTechPrecedente(port); corvette.setTechPrecedente(port); transportMarin.setTechPrecedente(port); vivres.setTechPrecedente(recherche); exploration.setTechPrecedente(recherche); avantPoste.setTechPrecedente(exploration); recrutement.setTechPrecedente(exploration); }
void CFeatureCreator::CreateFeatures(CBitmap* bm, int startx, int starty,std::string metalfile) { printf("Creating features\n"); int xsize=bm->xsize/8; int ysize=bm->ysize/8; int mapx=xsize+1; //geovents CBitmap vent("geovent.bmp"); CBitmap metal(metalfile); //use the green channel for geos for(int y=0;y<metal.ysize;++y){ for(int x=0;x<metal.xsize;++x){ unsigned char c=metal.mem[(y*metal.xsize+x)*4+1]; if(c==255){ int bx=x*xsize/metal.xsize; int by=y*ysize/metal.ysize; for(int tries=0;tries<1000;++tries){ int x=bx+rand()*(40)/RAND_MAX-20; int y=by+rand()*(40)/RAND_MAX-20; if(x<5) x=5; if(x>xsize-5) x=xsize-5; if(y<5) y=5; if(y>ysize-5) y=ysize-5; float h=heightmap[y*mapx+x]; if(h<5) continue; bool good=true; for(int y2=y-3;y2<=y+3;++y2){ for(int x2=x-3;x2<=x+3;++x2){ if(fabs(h-heightmap[(y2)*mapx+x2])>3) good=false; } } if(good){ FeatureFileStruct ffs; ffs.featureType=NUM_TREE_TYPES+NUM_GRASS_TYPES; ffs.relativeSize=1; ffs.rotation=0; ffs.xpos=(float)x*8+4; ffs.ypos=0; ffs.zpos=(float)y*8+4; features.push_back(ffs); for(int y2=0;y2<vent.ysize;++y2){ for(int x2=0;x2<vent.xsize;++x2){ if(vent.mem[(y2*vent.xsize+x2)*4+0]!=255 || vent.mem[(y2*vent.xsize+x2)*4+2]!=255){ bm->mem[((y*8+y2-vent.ysize/2)*bm->xsize+x*8+x2-vent.xsize/2)*4+0]=vent.mem[(y2*vent.xsize+x2)*4+0]; bm->mem[((y*8+y2-vent.ysize/2)*bm->xsize+x*8+x2-vent.xsize/2)*4+1]=vent.mem[(y2*vent.xsize+x2)*4+1]; bm->mem[((y*8+y2-vent.ysize/2)*bm->xsize+x*8+x2-vent.xsize/2)*4+2]=vent.mem[(y2*vent.xsize+x2)*4+2]; } } } break; } } } } } //trees unsigned char* map=new unsigned char[ysize*xsize]; for(int y=0;y<ysize;++y){ for(int x=0;x<xsize;++x){ map[y*xsize+x]=0; } } for(int y=0;y<ysize;++y){ for(int x=0;x<xsize;++x){ int red=0; int green=0; int blue=0; for(int y2=0;y2<8;++y2){ for(int x2=0;x2<8;++x2){ red+=bm->mem[((y*8+y2)*bm->xsize+x*8+x2)*4+0]; green+=bm->mem[((y*8+y2)*bm->xsize+x*8+x2)*4+1]; blue+=bm->mem[((y*8+y2)*bm->xsize+x*8+x2)*4+2]; } } if(green>red*1.25 && green>blue*1.25){ bool foundClose=false; for(int y2=max(0,y-3);y2<=y;++y2){ for(int x2=max(0,x-3);x2<=min(xsize-1,x+3);++x2){ if(map[y2*xsize+x2]){ foundClose=true; } } } if(!foundClose && float(rand())/RAND_MAX>0.8){ map[y*xsize+x]=1; FeatureFileStruct ffs; ffs.featureType=(rand()*NUM_TREE_TYPES)/RAND_MAX; ffs.relativeSize=0.8f+float(rand())/RAND_MAX*0.4f; ffs.rotation=0; ffs.xpos=(float)startx+x*8+4; ffs.ypos=0; ffs.zpos=(float)starty+y*8+4; features.push_back(ffs); } } } } //grass for(int y=0;y<ysize/4;++y){ for(int x=0;x<xsize/4;++x){ int red=0; int green=0; int blue=0; for(int y2=0;y2<32;++y2){ for(int x2=0;x2<32;++x2){ red+=bm->mem[((y*32+y2)*bm->xsize+x*32+x2)*4+0]; green+=bm->mem[((y*32+y2)*bm->xsize+x*32+x2)*4+1]; blue+=bm->mem[((y*32+y2)*bm->xsize+x*32+x2)*4+2]; } } if(green>red*1.07 && green>blue*1.07 && heightmap[(y*4+2)*mapx+x*4+2]>2){ map[y*xsize+x]=1; FeatureFileStruct ffs; ffs.featureType=NUM_TREE_TYPES; ffs.relativeSize=0; ffs.rotation=0; ffs.xpos=(float)x*32+16; ffs.ypos=0; ffs.zpos=(float)y*32+16; features.push_back(ffs); } } } }