예제 #1
0
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;
}
예제 #2
0
파일: main.cpp 프로젝트: mtao/tests
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();
}
예제 #3
0
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);
}
예제 #4
0
파일: Player.cpp 프로젝트: Molipate/jeu
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);
			}
		}
	}
}