int main(int argc, char** argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
	glEnable(GL_DEPTH_TEST);
	glutInitWindowPosition(100, 100);
	winWidth = 1300, winHeight = 800;
	glutInitWindowSize(winWidth, winHeight);
	glutCreateWindow("Traffic Simulation");
	glewInit();

	// Load the 3D models.
	trafficLight.ReadFile("Models/TrafficLight.obj");
	trafficLight2.ReadFile("Models/TrafficLight.obj");
	trafficLight3.ReadFile("Models/TrafficLight.obj");
	trafficLight4.ReadFile("Models/TrafficLight.obj");
	//cout << "\n|||||||||||\n";
	car.ReadFile("Models/taxi.obj");
	//cout << "\n|||||||||||\n";
	surveillanceCamera.ReadFile("Models/camera.obj");
	//cout << "\n|||||||||||\n";
	init();
	glutDisplayFunc(display);
	glutReshapeFunc(reshape);
	glutKeyboardFunc(keyboard);
	glutSpecialFunc(specialKey);
	glutTimerFunc(0, timer, updateInterval);
	glutMainLoop();
	

	system("pause");
}
void keyboard(unsigned char key, int x, int y)
{
	switch(key)
	{
	case 'r':
		// Add code for reset
		localCarSpeed.z = 0;
		carPosition.x = 3;
		carPosition.z = 45;
		carDirection = 180;
		localCarSpeed.z = 0;
		counter = 0;
		trafficLight.setSignal(NS_Signal);
		trafficLight2.setSignal(WE_Signal);
		trafficLight3.setSignal(WE_Signal);
		trafficLight4.setSignal(NS_Signal);
		worldCarSpeed = computeRotatedVector(localCarSpeed, carDirection);
		break;
	case 'b':
		localCarSpeed.z = 0;
		worldCarSpeed = computeRotatedVector(localCarSpeed, carDirection);
		
		break;
	case 's':
		ScreenShot(winHeight, winWidth);
		break;

	case 27:
		exit(0);
		break;
	}

	glutPostRedisplay();
}
示例#3
0
文件: main.cpp 项目: Slesa/Trinity
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    TrafficLight widget;
    widget.resize(110, 300);
    widget.show();

    return a.exec();
}
示例#4
0
文件: Car.cpp 项目: KPRSN/MotorCity
// Update position
void Car::updatePosition() {
    // Did we arrive to the next position?
    switch (mDirection) {
        case Tile::EAST:
            if (getCenterPosition().x >= mNextCheckpoint.x) {
                nextTile();
            }
            break;
        case Tile::SOUTH:
            if (getCenterPosition().y >= mNextCheckpoint.y) {
                nextTile();
            }
            break;
        case Tile::WEST:
            if (getCenterPosition().x <= mNextCheckpoint.x) {
                nextTile();
            }
            break;
        case Tile::NORTH:
            if (getCenterPosition().y <= mNextCheckpoint.y) {
                nextTile();
            }
            break;
        default:
            break;
    }
    
    // Traffic light check
    TrafficLight* light = mNextTile->getTrafficLight();
    // Resetting greenlight (avoid stopping IN an intersection)
    if (mCurrentIntersection) {
        // Gone past intersection
        if (!mCurrentIntersection->isInside(getRect())) {
            mCurrentIntersection = NULL;
            mGreenlit = false;
        }
    }
    // Do not drive past a red light
    // (Drive if: no light, green light or not yet inside next tile)
    if (!light || light->getStatus(mDirection) || !mNextTile->isInside(getRect()) || mGreenlit) {
        // Set greenlight (avoid stopping IN an intersection)
        if (light && mNextTile->isInside(getRect()) && light->getStatus(mDirection)) {
            mCurrentIntersection = mNextTile;
            mGreenlit = true;
        }
        move(mDirection);
    }
}
示例#5
0
/**
 * @brief Create a GUI driven by a state machine, realtime-debug this state machine in another window
 */
int main(int argc, char** argv)
{
    QApplication app(argc, argv);

    //! [Target setup]
    TrafficLight trafficLight;
    trafficLight.resize(110, 300);
    trafficLight.show();

    // set up the debug interface on the local registry and connect to it
    // this is simpler than writing another class that handles in-process debuggging
    // just pay the cost for the in-process communication, it's not that much anyway
    QRemoteObjectRegistryHost registryHostNode(QUrl(QStringLiteral("local:registry")));
    QRemoteObjectHost hostNode(QUrl(QStringLiteral("local:replica")), QUrl(QStringLiteral("local:registry")));
    QsmDebugInterfaceSource interfaceSource;
    interfaceSource.setQStateMachine(trafficLight.machine());
    hostNode.enableRemoting(interfaceSource.remoteObjectSource());
    //! [Target setup]

    //! [Client setup for viewing the state machine]
    StateMachineView view;
    view.resize(800, 600);
    view.show();

    QRemoteObjectNode clientNode(QUrl(QStringLiteral("local:registry")));
    auto interfaceReplica = clientNode.acquire<DebugInterfaceReplica>();
    interfaceReplica->waitForSource();

    DebugInterfaceClient client;
    client.setDebugInterface(interfaceReplica);
    QObject::connect(&client, &DebugInterfaceClient::repopulateView,
                     [&]() {
            qDebug() << "Updating state machine in view";
            view.scene()->setRootState(client.machine());
            view.scene()->layout();
        }
    );
    //! [Client setup for viewing the state machine]

    app.exec();
}
void update()
{  //Calculate direction
	speed = localCarSpeed.z / .02;
	if (carDirection==180)
	{
		carHeading = "N";
	}
	else if (carDirection > 180 && carDirection < 270)
	{
		carHeading = "NW";

	}
	else if (carDirection == 270 )
	{
		carHeading = "W";

	}
	else if (carDirection > 270 && carDirection < 360)
	{
		carHeading = "SW";

	}
	else if (carDirection == 0)
	{
		carHeading = "S";

	}
	else if (carDirection > 0 && carDirection < 90)
	{
		carHeading = "SE";

	}
	else if (carDirection == 90 )
	{
		carHeading = "E";

	}
	else if (carDirection > 90 && carDirection < 180)
	{
		carHeading = "NE";

	}
	// Light controller
	if (counter == 5000)
	{
		if (NS_Signal == Green)
			NS_Signal = Yellow;
		if ( WE_Signal == Green)
		{
			WE_Signal = Yellow;
		}
		trafficLight.setSignal(NS_Signal);
		trafficLight4.setSignal(NS_Signal);
		trafficLight2.setSignal(WE_Signal);
		trafficLight3.setSignal(WE_Signal);

	}
	// Light controller
	if (counter == 6000)
	{
		if (NS_Signal == Red)
			NS_Signal = Green;
		if (WE_Signal == Red)
		{
			WE_Signal = Green;
		}
		if (NS_Signal == Yellow)
			NS_Signal = Red;
		if (WE_Signal == Yellow)
		{
			WE_Signal = Red;
		}
	
		trafficLight.setSignal(NS_Signal);
		trafficLight4.setSignal(NS_Signal);
		trafficLight2.setSignal(WE_Signal);
		trafficLight3.setSignal(WE_Signal);
		counter = 0;

	}

	
	//update carposition and camera
	carPosition.x += worldCarSpeed.x; carPosition.y += worldCarSpeed.y; carPosition.z += worldCarSpeed.z;
	worldCameraOffset = computeRotatedVector(localCameraOffset, carDirection);
	worldCameraOffset.x += carPosition.x; worldCameraOffset.y += carPosition.y; worldCameraOffset.z += carPosition.z;
	
}
void drawScene()
{// covert speed to string
	string speedword = to_string(speed);

	string SpeedPhrase = "Speed: ";
	SpeedPhrase.append(speedword);
	string Direction = "Direction: ";
	Direction.append(carHeading);
	glColor3f(1, 0, 0);
	//print words
	glWindowPos2i((winWidth / 2) -125, winHeight - (sHeight*1.2));
	printString(SpeedPhrase);
	glWindowPos2i((winWidth / 2) + 75, winHeight - (sHeight*1.2));
	printString(Direction);


	// Draw terrain
	glCallList(terrainID);

	glEnable(GL_LIGHTING);
	trafficLight.setMaterials();
	
	/*vector<string> test;
	test=trafficLight.GetMaterialNames();
	for (int i = 0; i < test.size(); i++)
		cout << "name: " << test[i] << endl;*/
	// North-East (NS_Signal)
	glPushMatrix();
	glTranslatef(10, 0, -10.5);
	glScalef(1/3.28/12, 1/3.28/12, 1/3.28/12);
	trafficLight.setSignal(NS_Signal);
	trafficLight.Draw();
	glPopMatrix();
	
	
	glPushMatrix();
	glTranslatef(10, 0, -10);
	glRotatef(-45, 0, 1, 0);
	glCallList(surveillanceCameraID);
	glPopMatrix();

	// North-West (WE_Signal)
///board 1
	//glColor3f(1, 1, 0);
	glPushMatrix();
	board.Draw();
	glPopMatrix();
// board 2
	glPushMatrix();
	board2.Draw();
	glPopMatrix();

	glPushMatrix();
	glTranslatef(-10, 0, -10.5);
	glScalef(1 / 3.28 / 12, 1 / 3.28 / 12, 1 / 3.28 / 12);
	glRotatef(90, 0, 1, 0);
	trafficLight2.setSignal(WE_Signal);
	trafficLight2.Draw();
	glPopMatrix();

	glPushMatrix();
	glTranslatef(-10, 0, -10);
	glRotatef(45, 0, 1, 0);
	glCallList(surveillanceCameraID);
	glPopMatrix();
	
	// South-East (WE_Signal)
	glPushMatrix();
	glTranslatef(10, 0, 10);
	glScalef(1 / 3.28 / 12, 1 / 3.28 / 12, 1 / 3.28 / 12);
	glRotatef(-90, 0, 1, 0);
	trafficLight3.setSignal(WE_Signal);
	trafficLight3.Draw();
	glPopMatrix();

	glPushMatrix();
	glTranslatef(10, 0, 10.5);
	glRotatef(-135, 0, 1, 0);
	glCallList(surveillanceCameraID);
	glPopMatrix();

	// South West(SN_Signal)
	glPushMatrix();
	glTranslatef(-10, 0, 10);
	glScalef(1 / 3.28 / 12, 1 / 3.28 / 12, 1 / 3.28 / 12);
	glRotatef(180, 0, 1, 0);
	trafficLight4.setSignal(NS_Signal);
	trafficLight4.Draw();
	glPopMatrix();

	glPushMatrix();
	glTranslatef(-10, 0, 10.5);
	glRotatef(135, 0, 1, 0);
	glCallList(surveillanceCameraID);
	glPopMatrix();

	// Draw the car.
	glPushMatrix();
	glTranslatef(carPosition.x, carPosition.y, carPosition.z);
	glRotatef(carDirection, 0, 1, 0);
	glCallList(carID);
	glPopMatrix();



	
}