void World::build(void) { int num_samples = 16; vp.set_hres(400); vp.set_vres(400); vp.set_samples(num_samples); vp.set_max_depth(0); background_color = RGBColor(0.5); tracer_ptr = new RayCast(this); Pinhole* pinhole_ptr = new Pinhole; pinhole_ptr->set_eye(2, 3.5, 5); pinhole_ptr->set_lookat(0,0,0); pinhole_ptr->set_view_distance(800.0); pinhole_ptr->compute_uvw(); set_camera(pinhole_ptr); Directional* light_ptr = new Directional; light_ptr->set_direction(14, 20, 25); light_ptr->scale_radiance(1.75); light_ptr->set_shadows(true); add_light(light_ptr); Image* image_ptr = new Image; image_ptr->read_ppm_file("F:/Documents/Visual Studio 2005/Projects/Rytracer/TextureFiles/ppm/CountryScene.ppm"); CylindricalMap* map_ptr = new CylindricalMap; ImageTexture* texture_ptr = new ImageTexture(image_ptr); texture_ptr->set_mapping(map_ptr); SV_Matte* sv_matte_ptr = new SV_Matte; sv_matte_ptr->set_ka(0.40); sv_matte_ptr->set_kd(0.95); sv_matte_ptr->set_cd(texture_ptr); OpenCylinder* cylinder_ptr = new OpenCylinder; cylinder_ptr->set_material(sv_matte_ptr); add_object(cylinder_ptr); }
/*! \brief Actually draws the zoom button Unless a subclass has a particularly large button, it is probably unnecessary to check the update rectangle. \param tab The \a tab to update. \param direct Draw without double buffering. \param rect The area of the button to update. */ void WinDecorator::_DrawZoom(Decorator::Tab* tab, bool direct, BRect rect) { _DrawBeveledRect(rect, tab->zoomPressed); // Draw the Zoom box BRect zoomBox(rect); zoomBox.InsetBy(2, 2); zoomBox.InsetBy(1, 0); zoomBox.bottom--; zoomBox.right--; if (true) zoomBox.OffsetBy(1, 1); fDrawingEngine->SetHighColor(RGBColor(0,0,0)); fDrawingEngine->StrokeRect(zoomBox); zoomBox.InsetBy(1, 1); fDrawingEngine->StrokeLine(zoomBox.LeftTop(), zoomBox.RightTop()); }
void WinDecorator::_DrawZoom(BRect r) { DrawBeveledRect(r,GetZoom()); // Draw the Zoom box BRect rect(r); rect.InsetBy(2,2); rect.InsetBy(1,0); rect.bottom--; rect.right--; if (GetZoom()) rect.OffsetBy(1,1); fDrawingEngine->SetHighColor(RGBColor(0,0,0)); fDrawingEngine->StrokeRect(rect); rect.InsetBy(1,1); fDrawingEngine->StrokeLine(rect.LeftTop(),rect.RightTop()); }
Floor::Floor(int screenWidth, int screenHeight) { COLOR[0] = RGBColor(0.32f, 0.48f, 0.25f, 1.0f); // collina COLOR[1] = RGBColor(0.57f, 0.79f, 0.83f, 1.0f); // primavera COLOR[2] = RGBColor(0.38f, 0.82f, 0.89f, 1.0f); // estate COLOR[3] = RGBColor(0.41f, 0.59f, 0.61f, 1.0f); // autunno COLOR[4] = RGBColor(0.66f, 0.66f, 0.66f, 1.0f); // inverno COLOR[5] = RGBColor(0.20f, 0.70f, 0.10f, 1.0f); // erba this->width = screenWidth; this->height = screenHeight; int vectorSize = this->width * this->height; this->pixels = new float[vectorSize * 3]; this->pixels_copy = new float[vectorSize * 3]; int snowSize = this->width * (this->height / 2); this->snow_pixels = new float[snowSize * 3](); }
void WinDecorator::_DrawClose(BRect r) { // Just like DrawZoom, but for a close button DrawBeveledRect(r,GetClose()); // Draw the X BRect rect(r); rect.InsetBy(4,4); rect.right--; rect.top--; if (GetClose()) rect.OffsetBy(1,1); fDrawingEngine->SetHighColor(RGBColor(0,0,0)); fDrawingEngine->StrokeLine(rect.LeftTop(),rect.RightBottom()); fDrawingEngine->StrokeLine(rect.RightTop(),rect.LeftBottom()); rect.OffsetBy(1,0); fDrawingEngine->StrokeLine(rect.LeftTop(),rect.RightBottom()); fDrawingEngine->StrokeLine(rect.RightTop(),rect.LeftBottom()); }
RGB24Buffer *QTFileLoader::RGB24BufferFromQImage(QImage *image) { if (image == NULL) return NULL; RGB24Buffer *result = new RGB24Buffer(image->height(), image->width(), false); /** * TODO: Make this faster using .bits() method. * So far don't want to mess with possible image formats * */ for (int i = 0; i < image->height(); i++) { for (int j = 0; j < image->width(); j++) { QRgb pixel = image->pixel(j,i); result->element(i,j) = RGBColor(qRed(pixel), qGreen(pixel), qBlue(pixel)); } } return result; }
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 ColorGenerator::Generate(Vector<RGBColor> &Result, const Vec3f &Scale) { const UINT ColorCount = Result.Length(); KMeansClustering<Vec3f, Vec3fKMeansMetric> Clustering; Vector<Vec3f> AllColors(ColorCount * 25); const UINT AllColorsCount = AllColors.Length(); for(UINT Index = 0; Index < AllColorsCount; Index++) { Vec3f CurColor = Vec3f(rnd(), rnd(), rnd()); while(CurColor.x + CurColor.y + CurColor.z < 0.5f) { CurColor = Vec3f(rnd(), rnd(), rnd()); } AllColors[Index] = Vec3f(CurColor.x * Scale.x, CurColor.y * Scale.y, CurColor.z * Scale.z); } Clustering.Cluster(AllColors, ColorCount, 20, false); for(UINT ColorIndex = 0; ColorIndex < ColorCount; ColorIndex++) { Result[ColorIndex] = RGBColor(Clustering.ClusterCenter(ColorIndex)); } }
// cube pyramid void addLightingTest3( std::shared_ptr<Container> container ) { addGroundPlane( container ); addSphereLight( container, Vector4( 1.0, 0.8, -0.0 ), 0.5, RGBColor( 1.0, 1.0, 1.0 ), 20.0 ); float size = 0.4; Vector4 c( -0.6, -0.5, -2.0 ); // back corner // Create a partial pyramid of size pyramid_size blocks in each direction // x // x x // x x x int pyramid_size = 5; for( int xs = 0; xs <= pyramid_size; xs++ ) { for( int ys = 0; ys <= pyramid_size; ys++ ) { for( int zs = 0; zs <= pyramid_size; zs++ ) { if( xs + ys + zs == pyramid_size ) { container->add( std::make_shared<AxisAlignedSlab>( c.x + (float) xs * size, c.y + (float) ys * size, c.z + (float) zs * size, size ) ); } } } } //container->add( new AxisAlignedSlab( c.x, c.y, c.z + 2.0 * size, size ) ); //container->add( new AxisAlignedSlab( c.x + size, c.y, c.z, size ) ); //container->add( new AxisAlignedSlab( c.x, c.y + size, c.z, size ) ); //container->add( new AxisAlignedSlab( c.x, c.y, c.z + size, size ) ); }
void StateManager::LoadVertexColor(RGBColor &C, UINT Index) { for(UINT i = 0; i < VertexDeclaration.Length(); i++) { const D3D9Base::D3DVERTEXELEMENT9 &Decl = VertexDeclaration[i]; if(Decl.Usage == D3DDECLUSAGE_COLOR && Decl.UsageIndex == 0) { StreamInfo &Stream = VBufferStreams[Decl.Stream]; Assert(Stream.StreamData != NULL, "Reference to unbound stream"); BYTE *ByteStream = (BYTE *)(Stream.StreamData->Buffer.CArray() + Stream.OffsetInBytes + Index * Stream.Stride + Decl.Offset); float *FloatStream = (float *)ByteStream; Vec4f Result = Vec4f(0.0f, 0.0f, 0.0f, 0.0f); if(Decl.Type == D3DDECLTYPE_D3DCOLOR) { C = RGBColor(ByteStream[0], ByteStream[1], ByteStream[2], ByteStream[3]); return; } else { SignalError(String("Unsupported type: ") + String(UINT(Decl.Type))); } } } }
// =========================================================================== // member method definitions // =========================================================================== GUIVisualizationSettings::GUIVisualizationSettings() throw() : name(""), antialiase(false), dither(false), vehicleQuality(0), backgroundColor(RGBColor((SUMOReal) 1, (SUMOReal) 1, (SUMOReal) 1)), showGrid(false), gridXSize(100), gridYSize(100), laneShowBorders(false), showLinkDecals(true), showRails(true), drawEdgeName(false), edgeNameSize(50), edgeNameColor(RGBColor((SUMOReal) 1, (SUMOReal) .5, (SUMOReal) 0)), drawInternalEdgeName(false), internalEdgeNameSize(40), internalEdgeNameColor(RGBColor((SUMOReal) .5, (SUMOReal) .25, (SUMOReal) 0)), hideConnectors(false), minVehicleSize(1), vehicleExaggeration(1), showBlinker(true), drawLaneChangePreference(false), drawVehicleName(false), vehicleNameSize(50), vehicleNameColor(RGBColor((SUMOReal) .8, (SUMOReal) .6, (SUMOReal) 0)), junctionMode(0), drawLinkTLIndex(false), drawLinkJunctionIndex(false), drawJunctionName(false), junctionNameSize(50), junctionNameColor(RGBColor((SUMOReal) 0, (SUMOReal) 1, (SUMOReal) .5)), showLane2Lane(false), addMode(0), minAddSize(1), addExaggeration(1), drawAddName(false), addNameSize(50), minPOISize(0), poiExaggeration(1), drawPOIName(false), poiNameSize(50), poiNameColor(RGBColor((SUMOReal) 1., (SUMOReal) 0, (SUMOReal) .5)), showSizeLegend(true) { }
PerfectSpecular::PerfectSpecular() : BRDF(), m_k(0.0), m_c(RGBColor(0.0)) {}
RGBColor operator*(const RGBColor& color, float scalar) { return RGBColor(color.r * scalar, color.g * scalar, color.b * scalar); }
void Ship::draw() { drawWithColor(RGBColor(0, 0, 1)); }
// ------------ GUILaneWrapper::Colorer::Colorer() { mySchemes.push_back(GUIColorScheme("uniform", RGBColor(0,0,0), "", true)); mySchemes.push_back(GUIColorScheme("by selection (lane-/streetwise)", RGBColor(0.7f, 0.7f, 0.7f), "unselected", true)); mySchemes.back().addColor(RGBColor(0, .4f, .8f), 1, "selected"); mySchemes.push_back(GUIColorScheme("by vclass", RGBColor(0,0,0), "all", true)); mySchemes.back().addColor(RGBColor(0, .1f, .5f), 1, "public"); // ... traffic states ... mySchemes.push_back(GUIColorScheme("by allowed speed (lanewise)", RGBColor(1,0,0))); mySchemes.back().addColor(RGBColor(0, 0, 1), (SUMOReal)(150.0/3.6)); mySchemes.push_back(GUIColorScheme("by current occupancy (lanewise)", RGBColor(0,0,1))); mySchemes.back().addColor(RGBColor(1, 0, 0), (SUMOReal)0.95); mySchemes.push_back(GUIColorScheme("by first vehicle waiting time (lanewise)", RGBColor(0,1,0))); mySchemes.back().addColor(RGBColor(1,0,0), (SUMOReal)200); mySchemes.push_back(GUIColorScheme("by lane number (streetwise)", RGBColor(1,0,0))); mySchemes.back().addColor(RGBColor(0,0,1), (SUMOReal)5); // ... emissions ... mySchemes.push_back(GUIColorScheme("by CO2 emissions (HBEFA)", RGBColor(0,1,0))); mySchemes.back().addColor(RGBColor(1,0,0), (SUMOReal)(10./7.5/5.)); mySchemes.push_back(GUIColorScheme("by CO emissions (HBEFA)", RGBColor(0,1,0))); mySchemes.back().addColor(RGBColor(1,0,0), (SUMOReal)(0.05/7.5/2.)); mySchemes.push_back(GUIColorScheme("by PMx emissions (HBEFA)", RGBColor(0,1,0))); mySchemes.back().addColor(RGBColor(1,0,0), (SUMOReal)(.005/7.5/5.)); mySchemes.push_back(GUIColorScheme("by NOx emissions (HBEFA)", RGBColor(0,1,0))); mySchemes.back().addColor(RGBColor(1,0,0), (SUMOReal)(.125/7.5/5.)); mySchemes.push_back(GUIColorScheme("by HC emissions (HBEFA)", RGBColor(0,1,0))); mySchemes.back().addColor(RGBColor(1,0,0), (SUMOReal)(.02/7.5/4.)); mySchemes.push_back(GUIColorScheme("by fuel consumption (HBEFA)", RGBColor(0,1,0))); mySchemes.back().addColor(RGBColor(1,0,0), (SUMOReal)(.005/7.5*100.)); mySchemes.push_back(GUIColorScheme("by noise emissions (Harmonoise)", RGBColor(0,1,0))); mySchemes.back().addColor(RGBColor(1,0,0), (SUMOReal)100); }
Model::Model() { this->screenWidth = 0.7 * glutGet(GLUT_SCREEN_WIDTH); this->screenHeight = 0.7 * glutGet(GLUT_SCREEN_HEIGHT); // Crea il sole this->sun = new Sun(); this->sun->circles.push_back(Sun::Circle( Vertex2d(this->screenWidth * 0.15f, this->screenHeight * 0.8f), 55, 2, 1, RGBColor(1.0, 0.9, 0.0, 0.3) )); this->sun->circles.push_back(Sun::Circle( Vertex2d(this->screenWidth * 0.15f, this->screenHeight * 0.8f), 45, 2, 0, RGBColor(1.0, 0.95, 0.0, 0.9) )); this->sun->circles.push_back(Sun::Circle( Vertex2d(this->screenWidth * 0.15f, this->screenHeight * 0.8f), 40, 0, 0, RGBColor(1.0, 1.0, 0.0, 1.0) )); // Crea le nuvole for (int i=0; i<8; i++) { int circles = rand() % 3 + 3; this->clouds.push_back(Cloud( Vertex2d(0, this->screenHeight * (rand() % 30 + 60) / 100.0f), RGBColor(0.9, 0.9, 0.9, 1.0), 1.0f * circles, 0.5f * circles * circles * circles, 0, (rand() % 10) * 3 / 10.0f + 3 )); } // Crea il pavimento this->floor = new Floor(this->screenWidth, 2 * this->screenHeight / 5); this->tree = new Tree( Vertex2d(this->screenWidth / 2.0f, this->screenHeight / 15.0f), 0, this->screenHeight * 3 / 10.0, this->screenWidth / 80.0, 5, this->floor, false ); this->shrub1 = new Tree( Vertex2d(this->screenWidth / 2.0f, this->tree->position.y + this->tree->logHeight), M_PI / 8, this->tree->logHeight / 2.0, this->tree->logWidth / 2, 3, this->floor, true ); this->shrub2 = new Tree( Vertex2d(this->screenWidth / 2.0f, this->tree->position.y + this->tree->logHeight), -M_PI / 8, this->tree->logHeight / 2.0f, this->tree->logWidth / 2.0, 3, this->floor, true ); // Aggiunge la neve for (int i=0; i<this->snow.SNOW_FLAKES; i++) { this->snow.flakes.push_back(Snowflake()); this->snow.flakes.back().position.y = rand() % screenHeight + screenHeight + 2; this->snow.flakes.back().weight = (rand() % 100) / 100.0f + 2.0f; this->snow.flakes.back().startX = rand() % screenWidth; this->snow.flakes.back().lastZ = rand() % (int)(this->floor->height / 2 - this->snow.flakes.back().weight) / 1.0f + this->snow.flakes.back().weight; } }
Bullet Ship::fire() { return Bullet(getPosition(), -10, RGBColor(0, 0, 1)); }
RGBColor RGBColor::operator*(const RGBColor& otherColor) const { return RGBColor(r * otherColor.r, g * otherColor.g, b * otherColor.b); }
RGBColor RGBColor::operator-(const RGBColor& otherColor) const { return RGBColor(r - otherColor.r, g - otherColor.g, b - otherColor.b); }
RGBColor RGBColor::clamp() const { return RGBColor(LESS_ZERO(CLAMP_COMPONENT(r)), LESS_ZERO(CLAMP_COMPONENT(g)), LESS_ZERO(CLAMP_COMPONENT(b))); }
} template<> const std::string invalid_return<std::string>::value = ""; template<> const std::string invalid_return<std::string>::type = "string"; template<> std::string SUMOSAXAttributes::getInternal(const int attr) const { const std::string ret = getString(attr); if (ret == "") { throw EmptyData(); } return ret; } template<> const RGBColor invalid_return<RGBColor>::value = RGBColor(); template<> const std::string invalid_return<RGBColor>::type = "color"; template<> RGBColor SUMOSAXAttributes::getInternal(const int /* attr */) const { return getColor(); } template<> const PositionVector invalid_return<PositionVector>::value = PositionVector(); template<> const std::string invalid_return<PositionVector>::type = "PositionVector"; template<> PositionVector SUMOSAXAttributes::getInternal(const int attr) const { return getShape(attr); }
PointLight::PointLight() : ls(1.f) , color(RGBColor(glm::vec3(1.f))) , location(glm::vec3(0.f)) { }
//----------------------------------------------------------------- void BaseGameManager::LoadUnitSurfaces() { gAbramsTurret.load( "units/pics/pak/TitaTNSD.pak" ); gAbramsBody.load( "units/pics/pak/TitaHNSD.pak" ); gLeopardTurret.load( "units/pics/pak/PantTNSD.pak" ); gLeopardBody.load( "units/pics/pak/PantHNSD.pak" ); gValentineTurret.load( "units/pics/pak/MantTNSD.pak" ); gValentineBody.load( "units/pics/pak/MantHNSD.pak" ); gHammerheadTurret.load( "units/pics/pak/StinTNSD.pak" ); gHammerheadBody.load( "units/pics/pak/StinHNSD.pak" ); //gHumveeBody.load( "units/pics/pak/ScouHNSD.pak" ); gScorpionTurret.load( "units/pics/pak/WolfTNSD.pak" ); gScorpionBody.load( "units/pics/pak/WolfHNSD.pak" ); gLynxTurret.load( "units/pics/pak/BobcTNSD.pak" ); gLynxBody.load( "units/pics/pak/BobcHNSD.pak" ); gM109Turret.load( "units/pics/pak/DrakTNSD.pak" ); gM109Body.load( "units/pics/pak/DrakHNSD.pak" ); gBearTurret.load( "units/pics/pak/BearTNSD.pak" ); gBearBody.load( "units/pics/pak/BearHNSD.pak" ); gSpahPanzerTurret.load( "units/pics/pak/SpahTNSD.pak" ); gSpahPanzerBody.load( "units/pics/pak/SpahHNSD.pak" ); gArcherTurret.load( "units/pics/pak/ArchTNSD.pak" ); gArcherBody.load( "units/pics/pak/ArchHNSD.pak" ); #ifdef _GRAY_MAPPED_UNITS Palette::init("wads/netp.act"); ColorTable gray256; float grayPercent = 1.25f; // 256 shades of gray. gray256.init(256); for (int num = 0; num < 256; num++) { int c = Palette::color[num].getBrightnessInt(); int nearestColor = Palette::findNearestColor( RGBColor(int(c * grayPercent), int(c * grayPercent), int(c * grayPercent))); gray256.setColor(num, nearestColor); } gray256.setColor(255, 0); //********** DARK BLUE UNITS ************ colorMapGray(gAbramsTurret, gAbramsTurretDarkBlue, gray256); colorMapGray(gAbramsBody, gAbramsBodyDarkBlue, gray256); colorMapGray(gLeopardTurret, gLeopardTurretDarkBlue, gray256); colorMapGray(gLeopardBody, gLeopardBodyDarkBlue, gray256); colorMapGray(gValentineTurret, gValentineTurretDarkBlue, gray256); colorMapGray(gValentineBody, gValentineBodyDarkBlue, gray256); colorMapGray(gHammerheadTurret, gHammerheadTurretDarkBlue, gray256); colorMapGray(gHammerheadBody, gHammerheadBodyDarkBlue, gray256); //colorMapGray(gHumveeBody, gHumveeBodyDarkBlue, gray256); colorMapGray(gScorpionTurret, gScorpionTurretDarkBlue, gray256); colorMapGray(gScorpionBody, gScorpionBodyDarkBlue, gray256); colorMapGray(gLynxTurret, gLynxTurretDarkBlue, gray256); colorMapGray(gLynxBody, gLynxBodyDarkBlue, gray256); colorMapGray(gM109Turret, gM109TurretDarkBlue, gray256); colorMapGray(gM109Body, gM109BodyDarkBlue, gray256); colorMapGray(gBearTurret, gBearTurretDarkBlue, gray256); colorMapGray(gBearBody, gBearBodyDarkBlue, gray256); colorMapGray(gSpahPanzerTurret, gSpahPanzerTurretDarkBlue, gray256); colorMapGray(gSpahPanzerBody, gSpahPanzerBodyDarkBlue, gray256); colorMapGray(gArcherTurret, gArcherTurretDarkBlue, gray256); colorMapGray(gArcherBody, gArcherBodyDarkBlue, gray256); #else //********** DARK BLUE UNITS ************ gAbramsTurretDarkBlue.load( "units/pics/pak/TitaTNSD.pak" ); gAbramsBodyDarkBlue.load( "units/pics/pak/TitaHNSD.pak" ); gLeopardTurretDarkBlue.load( "units/pics/pak/PantTNSD.pak" ); gLeopardBodyDarkBlue.load( "units/pics/pak/PantHNSD.pak" ); gValentineTurretDarkBlue.load( "units/pics/pak/MantTNSD.pak" ); gValentineBodyDarkBlue.load( "units/pics/pak/MantHNSD.pak" ); gHammerheadTurretDarkBlue.load( "units/pics/pak/StinTNSD.pak" ); gHammerheadBodyDarkBlue.load( "units/pics/pak/StinHNSD.pak" ); //gHumveeBodyDarkBlue.load( "units/pics/pak/ScouHNSD.pak" ); gScorpionTurretDarkBlue.load( "units/pics/pak/WolfTNSD.pak" ); gScorpionBodyDarkBlue.load( "units/pics/pak/WolfHNSD.pak" ); gLynxTurretDarkBlue.load( "units/pics/pak/BobcTNSD.pak" ); gLynxBodyDarkBlue.load( "units/pics/pak/BobcHNSD.pak" ); gM109TurretDarkBlue.load( "units/pics/pak/DrakTNSD.pak" ); gM109BodyDarkBlue.load( "units/pics/pak/DrakHNSD.pak" ); gBearTurretDarkBlue.load( "units/pics/pak/BearTNSD.pak" ); gBearBodyDarkBlue.load( "units/pics/pak/BearHNSD.pak" ); gSpahPanzerTurretDarkBlue.load( "units/pics/pak/SpahTNSD.pak" ); gSpahPanzerBodyDarkBlue.load( "units/pics/pak/SpahHNSD.pak" ); gArcherTurretDarkBlue.load( "units/pics/pak/ArchTNSD.pak" ); gArcherBodyDarkBlue.load( "units/pics/pak/ArchHNSD.pak" ); #endif //********** SHADOWS ************ gAbramsTurretShadow.load( "units/pics/pak/TitaTSSD.pak" ); gAbramsBodyShadow.load( "units/pics/pak/TitaHSSD.pak" ); gLeopardTurretShadow.load( "units/pics/pak/PantTSSD.pak" ); gLeopardBodyShadow.load( "units/pics/pak/PantHSSD.pak" ); gValentineTurretShadow.load( "units/pics/pak/MantTSSD.pak" ); gValentineBodyShadow.load( "units/pics/pak/MantHSSD.pak" ); gHammerheadTurretShadow.load( "units/pics/pak/StinTSSD.pak" ); gHammerheadBodyShadow.load( "units/pics/pak/StinHSSD.pak" ); //gHumveeBodyShadow.load( "units/pics/pak/ScouHSSD.pak" ); gLynxTurretShadow.load( "units/pics/pak/BobcTSSD.pak" ); gLynxBodyShadow.load( "units/pics/pak/BobcHSSD.pak" ); gM109TurretShadow.load( "units/pics/pak/DrakTSSD.pak" ); gM109BodyShadow.load( "units/pics/pak/DrakHSSD.pak" ); gSpahPanzerTurretShadow.load( "units/pics/pak/SpahTSSD.pak" ); gSpahPanzerBodyShadow.load( "units/pics/pak/SpahHSSD.pak" ); gBearTurretShadow.load( "units/pics/pak/BearTSSD.pak" ); gBearBodyShadow.load( "units/pics/pak/BearHSSD.pak" ); gScorpionTurretShadow.load( "units/pics/pak/WolfTSSD.pak" ); gScorpionBodyShadow.load( "units/pics/pak/WolfHSSD.pak" ); gArcherTurretShadow.load( "units/pics/pak/ArchTSSD.pak" ); gArcherBodyShadow.load( "units/pics/pak/ArchHSSD.pak" ); }
RGBColor operator*(float scalar, const RGBColor& color) { return RGBColor(scalar * color.r, scalar * color.g, scalar * color.b); }
// =========================================================================== // member method definitions // =========================================================================== GUIVisualizationSettings::GUIVisualizationSettings() : name(""), antialiase(false), dither(false), backgroundColor(RGBColor::WHITE), showGrid(false), gridXSize(100), gridYSize(100), laneShowBorders(false), showLinkDecals(true), showRails(true), edgeName(false, 50, RGBColor(255, 128, 0, 255)), internalEdgeName(false, 40, RGBColor(128, 64, 0, 255)), cwaEdgeName(false, 50, RGBColor::MAGENTA), streetName(false, 55, RGBColor::YELLOW), hideConnectors(false), laneWidthExaggeration(1), vehicleQuality(0), showBlinker(true), drawLaneChangePreference(false), drawMinGap(false), showBTRange(false), vehicleSize(1), vehicleName(false, 50, RGBColor(204, 153, 0, 255)), personQuality(0), personSize(1), personName(false, 50, RGBColor(0, 153, 204, 255)), containerQuality(0), containerSize(1), containerName(false, 50, RGBColor(0, 153, 204, 255)), drawLinkTLIndex(false, 50, RGBColor(128, 128, 255, 255)), drawLinkJunctionIndex(false, 50, RGBColor(128, 128, 255, 255)), junctionName(false, 50, RGBColor(0, 255, 128, 255)), internalJunctionName(false, 50, RGBColor(0, 204, 128, 255)), showLane2Lane(false), drawJunctionShape(true), drawCrossingsAndWalkingareas(true), addMode(0), addSize(1), addName(false, 50, RGBColor(255, 0, 128, 255)), poiSize(0), poiName(false, 50, RGBColor(255, 0, 128, 255)), poiType(false, 50, RGBColor(255, 0, 128, 255)), polySize(0), polyName(false, 50, RGBColor(255, 0, 128, 255)), polyType(false, 50, RGBColor(255, 0, 128, 255)), showSizeLegend(true), gaming(false), selectionScale(1), drawForSelecting(false) { /// add lane coloring schemes GUIColorScheme scheme = GUIColorScheme("uniform", RGBColor::BLACK, "road", true); scheme.addColor(RGBColor::GREY, 1, "sidewalk"); scheme.addColor(RGBColor(192, 66, 44), 2, "bike lane"); scheme.addColor(RGBColor(0, 0, 0, 0), 3, "green verge"); scheme.addColor(RGBColor(150, 200, 200), 4, "waterway"); scheme.addColor(RGBColor(92, 92, 92), 5, "no passenger"); // paths, service roads etc scheme.addColor(RGBColor::RED, 6, "closed"); // road closing laneColorer.addScheme(scheme); scheme = GUIColorScheme("by selection (lane-/streetwise)", RGBColor(128, 128, 128, 255), "unselected", true); scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected"); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by permission code", RGBColor(240, 240, 240), "nobody"); scheme.addColor(RGBColor(10, 10, 10), (SUMOReal)SVC_PASSENGER, "passenger"); scheme.addColor(RGBColor(128, 128, 128), (SUMOReal)SVC_PEDESTRIAN, "pedestrian"); scheme.addColor(RGBColor(80, 80, 80), (SUMOReal)(SVC_PEDESTRIAN | SVC_DELIVERY), "pedestrian_delivery"); scheme.addColor(RGBColor(192, 66, 44), (SUMOReal)SVC_BICYCLE, "bicycle"); scheme.addColor(RGBColor(40, 100, 40), (SUMOReal)SVC_BUS, "bus"); scheme.addColor(RGBColor(166, 147, 26), (SUMOReal)SVC_TAXI, "taxi"); scheme.addColor(RGBColor::BLACK, (SUMOReal)(SVCAll & ~SVC_NON_ROAD), "normal_road"); scheme.addColor(RGBColor::BLACK, (SUMOReal)(SVCAll & ~(SVC_PEDESTRIAN | SVC_NON_ROAD)), "disallow_pedestrian"); scheme.addColor(RGBColor(255, 206, 0), (SUMOReal)(SVCAll & ~(SVC_PEDESTRIAN | SVC_BICYCLE | SVC_MOPED | SVC_NON_ROAD)), "motorway"); scheme.addColor(RGBColor(150, 200, 200), (SUMOReal)SVC_SHIP, "waterway"); scheme.addColor(RGBColor::GREEN, (SUMOReal)SVCAll, "all"); laneColorer.addScheme(scheme); // ... traffic states ... scheme = GUIColorScheme("by allowed speed (lanewise)", RGBColor::RED); scheme.addColor(RGBColor::YELLOW, (SUMOReal)(30 / 3.6)); scheme.addColor(RGBColor::GREEN, (SUMOReal)(55 / 3.6)); scheme.addColor(RGBColor::CYAN, (SUMOReal)(80 / 3.6)); scheme.addColor(RGBColor::BLUE, (SUMOReal)(120 / 3.6)); scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(150 / 3.6)); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by current occupancy (lanewise, brutto)", RGBColor::BLUE); scheme.addColor(RGBColor::RED, (SUMOReal)0.95); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by current occupancy (lanewise, netto)", RGBColor::BLUE); scheme.addColor(RGBColor::RED, (SUMOReal)0.95); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by first vehicle waiting time (lanewise)", RGBColor::BLUE); scheme.addColor(RGBColor::CYAN, (SUMOReal)30); scheme.addColor(RGBColor::GREEN, (SUMOReal)100); scheme.addColor(RGBColor::YELLOW, (SUMOReal)200); scheme.addColor(RGBColor::RED, (SUMOReal)300); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by lane number (streetwise)", RGBColor::RED); scheme.addColor(RGBColor::BLUE, (SUMOReal)5); laneColorer.addScheme(scheme); // ... emissions ... scheme = GUIColorScheme("by CO2 emissions", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)(10. / 7.5 / 5.)); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by CO emissions", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)(0.05 / 7.5 / 2.)); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by PMx emissions", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)(.005 / 7.5 / 5.)); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by NOx emissions", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)(.125 / 7.5 / 5.)); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by HC emissions", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)(.02 / 7.5 / 4.)); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by fuel consumption", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)(.005 / 7.5 * 100.)); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)100); laneColorer.addScheme(scheme); // ... weights (experimental) ... scheme = GUIColorScheme("by global travel time", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)100); scheme.setAllowsNegativeValues(true); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by global speed percentage", RGBColor::RED); scheme.addColor(RGBColor::YELLOW, (SUMOReal)50); scheme.addColor(RGBColor::GREEN, (SUMOReal)100); scheme.setAllowsNegativeValues(true); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by given length/geometrical length", RGBColor::BLACK); scheme.addColor(RGBColor::RED, (SUMOReal)0.25); scheme.addColor(RGBColor::YELLOW, (SUMOReal)0.5); scheme.addColor(RGBColor(179, 179, 179, 255), (SUMOReal)1.0); scheme.addColor(RGBColor::GREEN, (SUMOReal)2.0); scheme.addColor(RGBColor::BLUE, (SUMOReal)4.0); laneColorer.addScheme(scheme); laneColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true)); scheme = GUIColorScheme("by loaded weight", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)100); scheme.setAllowsNegativeValues(true); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by priority", RGBColor::YELLOW); scheme.addColor(RGBColor::RED, (SUMOReal) - 20); scheme.addColor(RGBColor::GREEN, (SUMOReal)20); scheme.setAllowsNegativeValues(true); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by height at start", RGBColor::RED); scheme.addColor(RGBColor::BLUE, (SUMOReal) - 10); scheme.addColor(RGBColor::YELLOW, (SUMOReal)50); scheme.addColor(RGBColor::GREEN, (SUMOReal)100); scheme.addColor(RGBColor::MAGENTA, (SUMOReal)200); scheme.setAllowsNegativeValues(true); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by height at segment start", RGBColor::RED); scheme.addColor(RGBColor::BLUE, (SUMOReal) - 10); scheme.addColor(RGBColor::YELLOW, (SUMOReal)50); scheme.addColor(RGBColor::GREEN, (SUMOReal)100); scheme.addColor(RGBColor::MAGENTA, (SUMOReal)200); scheme.setAllowsNegativeValues(true); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by inclination", RGBColor::GREY); scheme.addColor(RGBColor::YELLOW, (SUMOReal) .1); scheme.addColor(RGBColor::RED, (SUMOReal) .3); scheme.addColor(RGBColor::GREEN, (SUMOReal) - .1); scheme.addColor(RGBColor::BLUE, (SUMOReal) - .3); scheme.setAllowsNegativeValues(true); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by segment inclination", RGBColor::GREY); scheme.addColor(RGBColor::YELLOW, (SUMOReal) .1); scheme.addColor(RGBColor::RED, (SUMOReal) .3); scheme.addColor(RGBColor::GREEN, (SUMOReal) - .1); scheme.addColor(RGBColor::BLUE, (SUMOReal) - .3); scheme.setAllowsNegativeValues(true); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by average speed", RGBColor::RED); scheme.addColor(RGBColor::YELLOW, (SUMOReal)(30 / 3.6)); scheme.addColor(RGBColor::GREEN, (SUMOReal)(55 / 3.6)); scheme.addColor(RGBColor::CYAN, (SUMOReal)(80 / 3.6)); scheme.addColor(RGBColor::BLUE, (SUMOReal)(120 / 3.6)); scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(150 / 3.6)); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by average relative speed ", RGBColor::RED); scheme.addColor(RGBColor::YELLOW, (SUMOReal)(0.25)); scheme.addColor(RGBColor::GREEN, (SUMOReal)(0.5)); scheme.addColor(RGBColor::CYAN, (SUMOReal)(0.75)); scheme.addColor(RGBColor::BLUE, (SUMOReal)(1)); scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(1.25)); laneColorer.addScheme(scheme); /// add vehicle coloring schemes vehicleColorer.addScheme(GUIColorScheme("given vehicle/type/route color", RGBColor::YELLOW, "", true)); vehicleColorer.addScheme(GUIColorScheme("uniform", RGBColor::YELLOW, "", true)); vehicleColorer.addScheme(GUIColorScheme("given/assigned vehicle color", RGBColor::YELLOW, "", true)); vehicleColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true)); vehicleColorer.addScheme(GUIColorScheme("given/assigned route color", RGBColor::YELLOW, "", true)); vehicleColorer.addScheme(GUIColorScheme("depart position as HSV", RGBColor::YELLOW, "", true)); vehicleColorer.addScheme(GUIColorScheme("arrival position as HSV", RGBColor::YELLOW, "", true)); vehicleColorer.addScheme(GUIColorScheme("direction/distance as HSV", RGBColor::YELLOW, "", true)); scheme = GUIColorScheme("by speed", RGBColor::RED); scheme.addColor(RGBColor::YELLOW, (SUMOReal)(30 / 3.6)); scheme.addColor(RGBColor::GREEN, (SUMOReal)(55 / 3.6)); scheme.addColor(RGBColor::CYAN, (SUMOReal)(80 / 3.6)); scheme.addColor(RGBColor::BLUE, (SUMOReal)(120 / 3.6)); scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(150 / 3.6)); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by waiting time", RGBColor::BLUE); scheme.addColor(RGBColor::CYAN, (SUMOReal)30); scheme.addColor(RGBColor::GREEN, (SUMOReal)100); scheme.addColor(RGBColor::YELLOW, (SUMOReal)200); scheme.addColor(RGBColor::RED, (SUMOReal)300); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by time since lane change", RGBColor(179, 179, 179, 255), "0"); scheme.addColor(RGBColor(189, 189, 179, 255), -180); scheme.addColor(RGBColor(255, 255, 0, 255), -20); scheme.addColor(RGBColor(255, 0, 0, 255), -0.001); scheme.addColor(RGBColor(0, 0, 255, 255), 0.001); scheme.addColor(RGBColor(0, 255, 255, 255), 20); scheme.addColor(RGBColor(179, 189, 189, 255), 180); scheme.setAllowsNegativeValues(true); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by max speed", RGBColor::RED); scheme.addColor(RGBColor::YELLOW, (SUMOReal)(30 / 3.6)); scheme.addColor(RGBColor::GREEN, (SUMOReal)(55 / 3.6)); scheme.addColor(RGBColor::CYAN, (SUMOReal)(80 / 3.6)); scheme.addColor(RGBColor::BLUE, (SUMOReal)(120 / 3.6)); scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(150 / 3.6)); vehicleColorer.addScheme(scheme); // ... emissions ... scheme = GUIColorScheme("by CO2 emissions", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)5.); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by CO emissions", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)0.05); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by PMx emissions", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal).005); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by NOx emissions", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal).125); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by HC emissions", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal).02); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by fuel consumption", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal).005); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)100.); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by reroute number", RGBColor::RED); scheme.addColor(RGBColor::YELLOW, (SUMOReal)1.); scheme.addColor(RGBColor::WHITE, (SUMOReal)10.); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true); scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected"); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by offset from best lane", RGBColor(179, 179, 179, 255), "0"); scheme.addColor(RGBColor(255, 0, 0, 255), -3, "-3"); scheme.addColor(RGBColor(255, 255, 0, 255), -1, "-1"); scheme.addColor(RGBColor(0, 255, 255, 255), 1, "1"); scheme.addColor(RGBColor(0, 0, 255, 255), 3, "3"); scheme.setAllowsNegativeValues(true); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by acceleration", RGBColor(179, 179, 179, 255), "0"); scheme.addColor(RGBColor(255, 0, 0, 255), -4.5 /* -SUMOVTypeParameter::getDefaultDecel() */); scheme.addColor(RGBColor(255, 255, 0, 255), -0.1); scheme.addColor(RGBColor(0, 255, 255, 255), 0.1); scheme.addColor(RGBColor(0, 0, 255, 255), 2.6 /* SUMOVTypeParameter::getDefaultAccel() */); scheme.setAllowsNegativeValues(true); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by time gap", RGBColor(255, 255, 0, 255), "0"); scheme.addColor(RGBColor(179, 179, 179, 255), -1); scheme.addColor(RGBColor(0, 255, 255, 255), 1); scheme.addColor(RGBColor(0, 0, 255, 255), 2); scheme.setAllowsNegativeValues(true); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by depart delay", RGBColor::BLUE); scheme.addColor(RGBColor::CYAN, (SUMOReal)30); scheme.addColor(RGBColor::GREEN, (SUMOReal)100); scheme.addColor(RGBColor::YELLOW, (SUMOReal)200); scheme.addColor(RGBColor::RED, (SUMOReal)300); vehicleColorer.addScheme(scheme); vehicleColorer.addScheme(GUIColorScheme("random", RGBColor::YELLOW, "", true)); /// add person coloring schemes personColorer.addScheme(GUIColorScheme("given person/type color", RGBColor::YELLOW, "", true)); personColorer.addScheme(GUIColorScheme("uniform", RGBColor::YELLOW, "", true)); personColorer.addScheme(GUIColorScheme("given/assigned person color", RGBColor::YELLOW, "", true)); personColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true)); scheme = GUIColorScheme("by speed", RGBColor::RED); scheme.addColor(RGBColor::YELLOW, (SUMOReal)(2.5 / 3.6)); scheme.addColor(RGBColor::GREEN, (SUMOReal)(5 / 3.6)); scheme.addColor(RGBColor::BLUE, (SUMOReal)(10 / 3.6)); personColorer.addScheme(scheme); scheme = GUIColorScheme("by mode", RGBColor::YELLOW); // walking scheme.addColor(RGBColor::BLUE, (SUMOReal)(1)); // riding scheme.addColor(RGBColor::RED, (SUMOReal)(2)); // stopped scheme.addColor(RGBColor::GREEN, (SUMOReal)(3)); // waiting for ride personColorer.addScheme(scheme); scheme = GUIColorScheme("by waiting time", RGBColor::BLUE); scheme.addColor(RGBColor::CYAN, (SUMOReal)30); scheme.addColor(RGBColor::GREEN, (SUMOReal)100); scheme.addColor(RGBColor::YELLOW, (SUMOReal)200); scheme.addColor(RGBColor::RED, (SUMOReal)300); personColorer.addScheme(scheme); scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true); scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected"); personColorer.addScheme(scheme); personColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true)); personColorer.addScheme(GUIColorScheme("random", RGBColor::YELLOW, "", true)); /// add container coloring schemes containerColorer.addScheme(GUIColorScheme("given container/type color", RGBColor::YELLOW, "", true)); containerColorer.addScheme(GUIColorScheme("uniform", RGBColor::YELLOW, "", true)); containerColorer.addScheme(GUIColorScheme("given/assigned container color", RGBColor::YELLOW, "", true)); containerColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true)); scheme = GUIColorScheme("by speed", RGBColor::RED); scheme.addColor(RGBColor::YELLOW, (SUMOReal)(2.5 / 3.6)); scheme.addColor(RGBColor::GREEN, (SUMOReal)(5 / 3.6)); scheme.addColor(RGBColor::BLUE, (SUMOReal)(10 / 3.6)); containerColorer.addScheme(scheme); scheme = GUIColorScheme("by mode", RGBColor::YELLOW); // walking scheme.addColor(RGBColor::BLUE, (SUMOReal)(1)); // riding scheme.addColor(RGBColor::RED, (SUMOReal)(2)); // stopped scheme.addColor(RGBColor::GREEN, (SUMOReal)(3)); // waiting for ride containerColorer.addScheme(scheme); scheme = GUIColorScheme("by waiting time", RGBColor::BLUE); scheme.addColor(RGBColor::CYAN, (SUMOReal)30); scheme.addColor(RGBColor::GREEN, (SUMOReal)100); scheme.addColor(RGBColor::YELLOW, (SUMOReal)200); scheme.addColor(RGBColor::RED, (SUMOReal)300); containerColorer.addScheme(scheme); scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true); scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected"); containerColorer.addScheme(scheme); containerColorer.addScheme(GUIColorScheme("by angle", RGBColor::YELLOW, "", true)); /// add junction coloring schemes scheme = GUIColorScheme("uniform", RGBColor::BLACK, "", true); scheme.addColor(RGBColor(150, 200, 200), 1, "waterway"); junctionColorer.addScheme(scheme); scheme = GUIColorScheme("by selection", RGBColor(128, 128, 128, 255), "unselected", true); scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected"); junctionColorer.addScheme(scheme); scheme = GUIColorScheme("by type", RGBColor::GREEN, "traffic_light", true); scheme.addColor(RGBColor(0, 128, 0), 1, "traffic_light_unregulated"); scheme.addColor(RGBColor::YELLOW, 2, "priority"); scheme.addColor(RGBColor::RED, 3, "priority_stop"); scheme.addColor(RGBColor::BLUE, 4, "right_before_left"); scheme.addColor(RGBColor::CYAN, 5, "allway_stop"); scheme.addColor(RGBColor::GREY, 6, "district"); scheme.addColor(RGBColor::MAGENTA, 7, "unregulated"); scheme.addColor(RGBColor::BLACK, 8, "dead_end"); scheme.addColor(RGBColor::ORANGE, 9, "rail_signal"); scheme.addColor(RGBColor(192, 128, 64), 10, "zipper"); // light brown scheme.addColor(RGBColor(192, 255, 192), 11, "traffic_light_right_on_red"); // light green scheme.addColor(RGBColor(128, 0, 128), 12, "rail_crossing"); // dark purple junctionColorer.addScheme(scheme); /// add lane scaling schemes { GUIScaleScheme scheme = GUIScaleScheme("default", 1, "uniform", true); laneScaler.addScheme(scheme); scheme = GUIScaleScheme("by selection (lane-/streetwise)", 0.5, "unselected", true); scheme.addColor(5, 1, "selected"); laneScaler.addScheme(scheme); // ... traffic states ... scheme = GUIScaleScheme("by allowed speed (lanewise)", 0); scheme.addColor(10, (SUMOReal)(150.0 / 3.6)); laneScaler.addScheme(scheme); scheme = GUIScaleScheme("by current occupancy (lanewise, brutto)", 0); scheme.addColor(10, (SUMOReal)0.95); laneScaler.addScheme(scheme); scheme = GUIScaleScheme("by current occupancy (lanewise, netto)", 0); scheme.addColor(10, (SUMOReal)0.95); laneScaler.addScheme(scheme); scheme = GUIScaleScheme("by first vehicle waiting time (lanewise)", 0); scheme.addColor(10, (SUMOReal)300); laneScaler.addScheme(scheme); scheme = GUIScaleScheme("by lane number (streetwise)", 1); scheme.addColor(10, (SUMOReal)5); laneScaler.addScheme(scheme); // ... emissions ... scheme = GUIScaleScheme("by CO2 emissions", 0); scheme.addColor(10, (SUMOReal)(10. / 7.5 / 5.)); laneScaler.addScheme(scheme); scheme = GUIScaleScheme("by CO emissions", 0); scheme.addColor(10, (SUMOReal)(0.05 / 7.5 / 2.)); laneScaler.addScheme(scheme); scheme = GUIScaleScheme("by PMx emissions", 0); scheme.addColor(10, (SUMOReal)(.005 / 7.5 / 5.)); laneScaler.addScheme(scheme); scheme = GUIScaleScheme("by NOx emissions", 0); scheme.addColor(10, (SUMOReal)(.125 / 7.5 / 5.)); laneScaler.addScheme(scheme); scheme = GUIScaleScheme("by HC emissions", 0); scheme.addColor(10, (SUMOReal)(.02 / 7.5 / 4.)); laneScaler.addScheme(scheme); scheme = GUIScaleScheme("by fuel consumption", 0); scheme.addColor(10, (SUMOReal)(.005 / 7.5 * 100.)); laneScaler.addScheme(scheme); scheme = GUIScaleScheme("by noise emissions (Harmonoise)", 0); scheme.addColor(10, (SUMOReal)100); laneScaler.addScheme(scheme); // ... weights (experimental) ... scheme = GUIScaleScheme("by global travel time", 0); scheme.addColor(10, (SUMOReal)100); scheme.setAllowsNegativeValues(true); laneScaler.addScheme(scheme); scheme = GUIScaleScheme("by global speed percentage", 0); scheme.addColor(10, (SUMOReal)100); scheme.setAllowsNegativeValues(true); laneScaler.addScheme(scheme); scheme = GUIScaleScheme("by given length/geometrical length", 0); scheme.addColor(10, (SUMOReal)10.0); laneScaler.addScheme(scheme); scheme = GUIScaleScheme("by loaded weight", 0); scheme.addColor(-1000, (SUMOReal) - 1000); scheme.addColor(1000, (SUMOReal)1000); scheme.setAllowsNegativeValues(true); laneScaler.addScheme(scheme); scheme = GUIScaleScheme("by priority", 1); scheme.addColor(0.5, (SUMOReal) - 20); scheme.addColor(5, (SUMOReal)20); scheme.setAllowsNegativeValues(true); laneScaler.addScheme(scheme); scheme = GUIScaleScheme("by average speed", 0); scheme.addColor(10, (SUMOReal)(150.0 / 3.6)); laneScaler.addScheme(scheme); scheme = GUIScaleScheme("by average relative speed", 0); scheme.addColor(0.5, (SUMOReal)(0.5)); scheme.addColor(2, (SUMOReal)(1)); scheme.addColor(10, (SUMOReal)(2)); laneScaler.addScheme(scheme); } #ifdef HAVE_INTERNAL /// add edge coloring schemes edgeColorer.addScheme(GUIColorScheme("uniform (streetwise)", RGBColor::BLACK, "", true)); scheme = GUIColorScheme("by selection (streetwise)", RGBColor(128, 128, 128, 255), "unselected", true); scheme.addColor(RGBColor(0, 80, 180, 255), 1, "selected"); edgeColorer.addScheme(scheme); scheme = GUIColorScheme("by purpose (streetwise)", RGBColor(), "normal", true); scheme.addColor(RGBColor(128, 0, 128, 255), 1, "connector"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_CONNECTOR scheme.addColor(RGBColor::BLUE, 2, "internal"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_INTERNAL edgeColorer.addScheme(scheme); scheme = GUIColorScheme("by allowed speed (streetwise)", RGBColor::RED); scheme.addColor(RGBColor::YELLOW, (SUMOReal)(30 / 3.6)); scheme.addColor(RGBColor::GREEN, (SUMOReal)(55 / 3.6)); scheme.addColor(RGBColor::CYAN, (SUMOReal)(80 / 3.6)); scheme.addColor(RGBColor::BLUE, (SUMOReal)(120 / 3.6)); scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(150 / 3.6)); edgeColorer.addScheme(scheme); scheme = GUIColorScheme("by current occupancy (streetwise)", RGBColor::BLUE); scheme.addColor(RGBColor::RED, (SUMOReal)0.95); edgeColorer.addScheme(scheme); scheme = GUIColorScheme("by current speed (streetwise)", RGBColor::RED); scheme.addColor(RGBColor::YELLOW, (SUMOReal)(30 / 3.6)); scheme.addColor(RGBColor::GREEN, (SUMOReal)(55 / 3.6)); scheme.addColor(RGBColor::CYAN, (SUMOReal)(80 / 3.6)); scheme.addColor(RGBColor::BLUE, (SUMOReal)(120 / 3.6)); scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(150 / 3.6)); edgeColorer.addScheme(scheme); scheme = GUIColorScheme("by current flow (streetwise)", RGBColor::BLUE); scheme.addColor(RGBColor::RED, (SUMOReal)5000); edgeColorer.addScheme(scheme); scheme = GUIColorScheme("by relative speed (streetwise)", RGBColor::RED); scheme.addColor(RGBColor::YELLOW, (SUMOReal)(0.25)); scheme.addColor(RGBColor::GREEN, (SUMOReal)(0.5)); scheme.addColor(RGBColor::CYAN, (SUMOReal)(0.75)); scheme.addColor(RGBColor::BLUE, (SUMOReal)(1)); scheme.addColor(RGBColor::MAGENTA, (SUMOReal)(1.25)); edgeColorer.addScheme(scheme); /// add edge scaling schemes { edgeScaler.addScheme(GUIScaleScheme("uniform", 1, "", true)); GUIScaleScheme scheme = GUIScaleScheme("by selection (streetwise)", 0.5, "unselected", true); scheme.addColor(5, 1, "selected"); edgeScaler.addScheme(scheme); scheme = GUIScaleScheme("by allowed speed (streetwise)", 0); scheme.addColor(10, (SUMOReal)(150.0 / 3.6)); edgeScaler.addScheme(scheme); scheme = GUIScaleScheme("by current occupancy (streetwise)", 0); scheme.addColor(10, (SUMOReal)0.95); edgeScaler.addScheme(scheme); scheme = GUIScaleScheme("by current speed (streetwise)", 0); scheme.addColor(10, (SUMOReal)(150.0 / 3.6)); edgeScaler.addScheme(scheme); scheme = GUIScaleScheme("by current flow (streetwise)", 0); scheme.addColor(20, (SUMOReal)5000); edgeScaler.addScheme(scheme); scheme = GUIScaleScheme("by relative speed (streetwise)", 0); scheme.addColor(20, (SUMOReal)1); edgeScaler.addScheme(scheme); } #endif }
RGBColor operator/(const RGBColor& color, float scalar) { return RGBColor(color.r / scalar, color.g / scalar, color.b / scalar); }
// =========================================================================== // member method definitions // =========================================================================== GUIVisualizationSettings::GUIVisualizationSettings() : name(""), antialiase(false), dither(false), backgroundColor(RGBColor::WHITE), showGrid(false), gridXSize(100), gridYSize(100), laneShowBorders(false), showLinkDecals(true), showRails(true), edgeName(false, 50, RGBColor(255, 128, 0, 255)), internalEdgeName(false, 40, RGBColor(128, 64, 0, 255)), streetName(false, 55, RGBColor::YELLOW), hideConnectors(false), laneWidthExaggeration(1), vehicleQuality(0), minVehicleSize(1), vehicleExaggeration(1), showBlinker(true), drawLaneChangePreference(false), drawMinGap(false), vehicleName(false, 50, RGBColor(204, 153, 0, 255)), drawLinkTLIndex(false), drawLinkJunctionIndex(false), junctionName(false, 50, RGBColor(0, 255, 128, 255)), internalJunctionName(false, 50, RGBColor(0, 204, 128, 255)), showLane2Lane(false), addMode(0), minAddSize(1), addExaggeration(1), addName(false, 50, RGBColor(255, 0, 128, 255)), minPOISize(0), poiExaggeration(1), poiName(false, 50, RGBColor(255, 0, 128, 255)), minPolySize(0), polyExaggeration(1), polyName(false, 50, RGBColor(255, 0, 128, 255)), showSizeLegend(true), gaming(false), selectionScale(1) { /// add lane coloring schemes GUIColorScheme scheme = GUIColorScheme("uniform", RGBColor::BLACK, "", true); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by selection (lane-/streetwise)", RGBColor(179, 179, 179, 255), "unselected", true); scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected"); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by vclass", RGBColor::BLACK, "all", true); scheme.addColor(RGBColor(0, 26, 128, 255), 1, "public"); laneColorer.addScheme(scheme); // ... traffic states ... scheme = GUIColorScheme("by allowed speed (lanewise)", RGBColor::RED); scheme.addColor(RGBColor::BLUE, (SUMOReal)(150.0 / 3.6)); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by current occupancy (lanewise)", RGBColor::BLUE); scheme.addColor(RGBColor::RED, (SUMOReal)0.95); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by first vehicle waiting time (lanewise)", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)200); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by lane number (streetwise)", RGBColor::RED); scheme.addColor(RGBColor::BLUE, (SUMOReal)5); laneColorer.addScheme(scheme); // ... emissions ... scheme = GUIColorScheme("by CO2 emissions (HBEFA)", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)(10. / 7.5 / 5.)); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by CO emissions (HBEFA)", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)(0.05 / 7.5 / 2.)); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by PMx emissions (HBEFA)", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)(.005 / 7.5 / 5.)); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by NOx emissions (HBEFA)", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)(.125 / 7.5 / 5.)); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by HC emissions (HBEFA)", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)(.02 / 7.5 / 4.)); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by fuel consumption (HBEFA)", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)(.005 / 7.5 * 100.)); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)100); laneColorer.addScheme(scheme); // ... weights (experimental) ... scheme = GUIColorScheme("by global travel time", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)100); scheme.setAllowsNegativeValues(true); laneColorer.addScheme(scheme); scheme = GUIColorScheme("by global speed percentage", RGBColor::RED); scheme.addColor(RGBColor::YELLOW, (SUMOReal)50); scheme.addColor(RGBColor::GREEN, (SUMOReal)100); scheme.setAllowsNegativeValues(true); laneColorer.addScheme(scheme); /// add vehicle coloring schemes vehicleColorer.addScheme(GUIColorScheme("given vehicle/type/route color", RGBColor::YELLOW, "", true)); vehicleColorer.addScheme(GUIColorScheme("uniform", RGBColor::YELLOW, "", true)); vehicleColorer.addScheme(GUIColorScheme("given/assigned vehicle color", RGBColor::YELLOW, "", true)); vehicleColorer.addScheme(GUIColorScheme("given/assigned type color", RGBColor::YELLOW, "", true)); vehicleColorer.addScheme(GUIColorScheme("given/assigned route color", RGBColor::YELLOW, "", true)); vehicleColorer.addScheme(GUIColorScheme("depart position as HSV", RGBColor::YELLOW, "", true)); vehicleColorer.addScheme(GUIColorScheme("arrival position as HSV", RGBColor::YELLOW, "", true)); vehicleColorer.addScheme(GUIColorScheme("direction/distance as HSV", RGBColor::YELLOW, "", true)); scheme = GUIColorScheme("by speed", RGBColor::RED); scheme.addColor(RGBColor::BLUE, (SUMOReal)(150.0 / 3.6)); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by waiting time", RGBColor::BLUE); scheme.addColor(RGBColor::RED, (SUMOReal)(5 * 60)); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by time since last lanechange", RGBColor::WHITE); scheme.addColor(RGBColor::GREY, (SUMOReal)(5 * 60)); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by max speed", RGBColor::RED); scheme.addColor(RGBColor::BLUE, (SUMOReal)(150.0 / 3.6)); vehicleColorer.addScheme(scheme); // ... emissions ... scheme = GUIColorScheme("by CO2 emissions (HBEFA)", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)5.); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by CO emissions (HBEFA)", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)0.05); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by PMx emissions (HBEFA)", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal).005); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by NOx emissions (HBEFA)", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal).125); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by HC emissions (HBEFA)", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal).02); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by fuel consumption (HBEFA)", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal).005); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by noise emissions (Harmonoise)", RGBColor::GREEN); scheme.addColor(RGBColor::RED, (SUMOReal)100.); vehicleColorer.addScheme(scheme); scheme = GUIColorScheme("by reroute number", RGBColor::RED); scheme.addColor(RGBColor::YELLOW, (SUMOReal)1.); scheme.addColor(RGBColor::WHITE, (SUMOReal)10.); vehicleColorer.addScheme(scheme); #ifdef HAVE_INTERNAL /// add edge coloring schemes edgeColorer.addScheme(GUIColorScheme("uniform (streetwise)", RGBColor::BLACK, "", true)); scheme = GUIColorScheme("by selection (streetwise)", RGBColor(179, 179, 179, 255), "unselected", true); scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected"); edgeColorer.addScheme(scheme); scheme = GUIColorScheme("by purpose (streetwise)", RGBColor(), "normal", true); scheme.addColor(RGBColor(128, 0, 128, 255), 1, "connector"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_CONNECTOR scheme.addColor(RGBColor::BLUE, 2, "internal"); // see MSEdge::EdgeBasicFunction::EDGEFUNCTION_INTERNAL edgeColorer.addScheme(scheme); scheme = GUIColorScheme("by allowed speed (streetwise)", RGBColor::RED); scheme.addColor(RGBColor::BLUE, (SUMOReal)(150.0 / 3.6)); edgeColorer.addScheme(scheme); scheme = GUIColorScheme("by current occupancy (streetwise)", RGBColor::BLUE); scheme.addColor(RGBColor::RED, (SUMOReal)0.95); edgeColorer.addScheme(scheme); scheme = GUIColorScheme("by current speed (streetwise)", RGBColor::RED); scheme.addColor(RGBColor::BLUE, (SUMOReal)(150.0 / 3.6)); edgeColorer.addScheme(scheme); scheme = GUIColorScheme("by current flow (streetwise)", RGBColor::BLUE); scheme.addColor(RGBColor::RED, (SUMOReal)5000); edgeColorer.addScheme(scheme); scheme = GUIColorScheme("by relative speed (streetwise)", RGBColor::RED); scheme.addColor(RGBColor::BLUE, (SUMOReal)1); edgeColorer.addScheme(scheme); #endif junctionColorer.addScheme(GUIColorScheme("uniform", RGBColor::BLACK, "", true)); scheme = GUIColorScheme("by selection", RGBColor(179, 179, 179, 255), "unselected", true); scheme.addColor(RGBColor(0, 102, 204, 255), 1, "selected"); junctionColorer.addScheme(scheme); }
//28.5 折射测试图,同16,不同可能是加入了菲涅尔系数变化 void World::build(void){ int num_samples = 16; vp.set_hres(600); vp.set_vres(600); vp.set_samples(num_samples); vp.set_max_depth(5); background_color = RGBColor(0.0, 0.3, 0.25); tracer_ptr = new Whitted(this); Ambient* ambient_ptr = new Ambient; ambient_ptr->scale_radiance(0.25); set_ambient_light(ambient_ptr); Pinhole* pinhole_ptr = new Pinhole; pinhole_ptr->set_eye(-8, 5.5, 40); pinhole_ptr->set_lookat(1, 4, 0); pinhole_ptr->set_view_distance(2400.0); pinhole_ptr->compute_uvw(); set_camera(pinhole_ptr); // point light PointLight* light_ptr1 = new PointLight; light_ptr1->set_location(40, 50, 0); light_ptr1->scale_radiance(4.5); light_ptr1->set_shadows(true); add_light(light_ptr1); // point light PointLight* light_ptr2 = new PointLight; light_ptr2->set_location(-10, 20, 10); light_ptr2->scale_radiance(4.5); light_ptr2->set_shadows(true); add_light(light_ptr2); // directional light Directional* light_ptr3 = new Directional; light_ptr3->set_direction(-1, 0, 0); light_ptr3->scale_radiance(4.5); light_ptr3->set_shadows(true); add_light(light_ptr3); // transparent sphere Dielectric* dielectic_ptr = new Dielectric; dielectic_ptr->set_ks(0.2); dielectic_ptr->set_exp(2000.0); // dielectic_ptr->set_eta_in(1.5); // for Figure 28.5(a) dielectic_ptr->set_eta_in(0.75); // for Figure 28.5(b) dielectic_ptr->set_eta_out(1.0); dielectic_ptr->set_cf_in(white); dielectic_ptr->set_cf_out(white); Sphere* sphere_ptr1 = new Sphere(Point3D(0.0, 4.5, 0.0), 3.0); sphere_ptr1->set_material(dielectic_ptr); add_object(sphere_ptr1); // red sphere Reflective* reflective_ptr = new Reflective; reflective_ptr->set_ka(0.3); reflective_ptr->set_kd(0.3); reflective_ptr->set_cd(red); reflective_ptr->set_ks(0.2); reflective_ptr->set_exp(2000.0); reflective_ptr->set_kr(0.25); Sphere* sphere_ptr2 = new Sphere(Point3D(4, 4, -6), 3); sphere_ptr2->set_material(reflective_ptr); add_object(sphere_ptr2); Matte* matte_ptr3 = new Matte; matte_ptr3->set_ka(0.15); matte_ptr3->set_kd(0.5); matte_ptr3->set_cd(0, 0.4, 0.2); // dark green // rectangle Point3D p0(-20, 0, -100); Vector3D a(0, 0, 120); Vector3D b(40, 0, 0); Rectangle* rectangle_ptr = new Rectangle(p0, a, b); rectangle_ptr->set_material(matte_ptr3); add_object(rectangle_ptr); }
void GUISUMOAbstractView::showToolTipFor(unsigned int id) { if (id != 0) { GUIGlObject* object = GUIGlObjectStorage::gIDStorage.getObjectBlocking(id); if (object != 0) { Position pos = getPositionInformation(); pos.add(0, p2m(15)); GLHelper::drawTextBox(object->getFullName(), pos, GLO_MAX - 1, p2m(20), RGBColor::BLACK, RGBColor(255, 179, 0, 255)); GUIGlObjectStorage::gIDStorage.unblockObject(id); } } }
void World::build(void) { int num_samples = 4; // at max_depth = 10, this renders very slowly vp.set_hres(600); vp.set_vres(600); vp.set_max_depth(10); vp.set_samples(num_samples); Ambient* ambient_ptr = new Ambient; ambient_ptr->scale_radiance(0.25); set_ambient_light(ambient_ptr); background_color = RGBColor(0.0, 0.3, 0.25); tracer_ptr = new Whitted(this); Pinhole* pinhole_ptr = new Pinhole; pinhole_ptr->set_eye(1, 7.5, 20); pinhole_ptr->set_lookat(0, -0.35, 0); pinhole_ptr->set_view_distance(5250.0); pinhole_ptr->compute_uvw(); set_camera(pinhole_ptr); PointLight* light_ptr = new PointLight; light_ptr->set_location(20, 20, 15); light_ptr->scale_radiance(2.75); light_ptr->set_shadows(true); add_light(light_ptr); // transparent bowl Transparent* glass_ptr = new Transparent; glass_ptr->set_ks(0.5); glass_ptr->set_exp(2000.0); glass_ptr->set_ior(1.5); glass_ptr->set_kr(0.05); glass_ptr->set_kt(0.9); double inner_radius = 0.9; double outer_radius = 1.0; //FlatRimmedBowl* bowl_ptr = new FlatRimmedBowl(inner_radius, outer_radius); //bowl_ptr->set_material(glass_ptr); //add_object(bowl_ptr); RoundRimmedBowl* bowl_ptr = new RoundRimmedBowl(inner_radius, outer_radius, Point3D(0)); bowl_ptr->set_material(glass_ptr); add_object(bowl_ptr); // the two spheres in the bowl just touch its inner surface // red sphere /*Reflective* reflective_ptr1 = new Reflective; reflective_ptr1->set_ka(0.6); reflective_ptr1->set_kd(0.4); reflective_ptr1->set_cd(red); reflective_ptr1->set_ks(0.5); reflective_ptr1->set_exp(2000.0); reflective_ptr1->set_kr(0.25); double radius = 0.4; double theta = 55.0; theta = 3.1415926 * theta / 180.0; double xc = -(0.9 - radius) * cos(theta); double yc = -(0.9 - radius) * sin(theta); Sphere* sphere_ptr2 = new Sphere(Point3D(xc, yc, 0), radius); sphere_ptr2->set_material(reflective_ptr1); add_object(sphere_ptr2); // yellow sphere Reflective* reflective_ptr2 = new Reflective; reflective_ptr2->set_ka(0.6); reflective_ptr2->set_kd(0.4); reflective_ptr2->set_cd(1, 1, 0); // yellow reflective_ptr2->set_ks(0.5); reflective_ptr2->set_exp(2000.0); reflective_ptr2->set_kr(0.5); radius = 0.35; theta = 35.0; theta = 3.1415926 * theta / 180.0; xc = (0.9 - radius) * cos(theta); yc = -(0.9 - radius) * sin(theta); Sphere* sphere_ptr3 = new Sphere(Point3D(xc, yc, 0), radius); sphere_ptr3->set_material(reflective_ptr2); add_object(sphere_ptr3); */ // rectangle Checker3D* checker_ptr = new Checker3D; checker_ptr->set_size(1.0); checker_ptr->set_color1(white); checker_ptr->set_color2(0.5); SV_Matte* sv_matte_ptr = new SV_Matte; sv_matte_ptr->set_ka(0.8); sv_matte_ptr->set_kd(0.85); sv_matte_ptr->set_cd(checker_ptr); Point3D p0(-2, -1, -5); Vector3D a(0, 0, 9); Vector3D b(4, 0, 0); Rectangle* rectangle_ptr = new Rectangle(p0, a, b); rectangle_ptr->set_material(sv_matte_ptr); add_object(rectangle_ptr); }