Exemplo n.º 1
0
void loadIsland()
{
    float x, z;

    for(int i = 0; i < game_map.getStageMap().size(); i++)
    {
        for(int j = 0; j < game_map.getStageMap().at(i).size(); j++)
        {
            A_RGB rgb = game_map.getStageMap().at(i).at(j);
            if(rgb.isBlack())
            {
                Ground hole = Ground(i,j);
                hole.getPosition().convert_to_xz(&x, &z);

                glPushMatrix();
                    glTranslatef(x,-0.5f,z);
                    glScalef(0.5f,0.5f,0.5f);
                    glmDraw(cube_hole, GLM_SMOOTH | GLM_MATERIAL | GLM_TEXTURE);
                glPopMatrix();
            }
            else if(rgb.isGreen())
            {
                Ground floor = Ground(i,j);
                floor.getPosition().convert_to_xz(&x, &z);

                glPushMatrix();
                    glTranslatef(x,-0.5f,z);
                    glScalef(0.5f,0.5f,0.5f);
                    glmDraw(cube, GLM_SMOOTH | GLM_MATERIAL | GLM_TEXTURE);
                glPopMatrix();
            }
            else if(rgb.isRed())
            {
                Ground crack = Ground(i,j);
                crack.getPosition().convert_to_xz(&x, &z);

                A_RGB east = game_map.getStageMap().at(i).at(j+1);
                A_RGB west = game_map.getStageMap().at(i).at(j-1);
                if(east.isRed() || west.isRed())
                {
                    glPushMatrix();
                        glTranslatef(x,-0.5f,z);
                        glRotatef(90.0f, 0.0f, 1.0f, 0.0f);
                        glScalef(0.5f,0.5f,0.5f);
                        glmDraw(cube_crack, GLM_SMOOTH | GLM_MATERIAL | GLM_TEXTURE);
                    glPopMatrix();
                }
                else
                {
                    glPushMatrix();
                        glTranslatef(x,-0.5f,z);
                        glScalef(0.5f,0.5f,0.5f);
                        glmDraw(cube_crack, GLM_SMOOTH | GLM_MATERIAL | GLM_TEXTURE);
                    glPopMatrix();
                }

            }
        }
    }
}
Exemplo n.º 2
0
int Ground(int stgnum, Agent_status *agent, node_t *trees,int auto_or_mamual,Girl *Girl_status){
    int count = 0;
    if(agent->END_FLAG == 0)
    {
        Gravity(stgnum,agent,trees,auto_or_mamual,Girl_status);
        agent->Jumpflag = 0;
        control(stgnum,agent,trees,auto_or_mamual,Girl_status);

        if(count > 10)
            {
                resistance(agent);
                count = 0;
            }
        count++;

        /*
          if((agent->X >= Girl_status->X))
          {
          END(1,stgnum,trees,auto_or_mamual,agent);
          return 0;
          }
        */


        //    if (agent->END_FLAG != 1)
        //    {
        //            usleep(20000);
        Ground(stgnum,agent,trees,auto_or_mamual,Girl_status);
        //    }
    }
    return 0;
}
Exemplo n.º 3
0
int simulate(int stgnum,node_t *trees,int auto_or_mamual,int on_off){

    int points;
    curs_set(0);//おまじない?
    timeout(0);//getchをリアルタイムにする
    noecho();//echo off,音
    cbreak();//カノニカルモード

    stage(stgnum);

    Agent_status *agent;
    agent = (Agent_status *)malloc(sizeof(Agent_status));

    agent->TIMES=100;

    agent->X = 1;
    agent->Y = place_start_boy();
    agent->Y = 35;
    agent->Jumpflag = 0;
    agent->INTERTIA = 0;
    agent->TIMES = 100;
    agent->END_FLAG = 0;
    agent->ENEMY_TOUCH_FLAG = 0;
    agent->ON_OFF = on_off;

    printBoy(agent,stgnum);


    Girl *Girl_status;
    Girl_status = (Girl *)malloc(sizeof(Girl));

    Girl_search(Girl_status);

    Ground(stgnum,agent,trees,auto_or_mamual,Girl_status);
    points = agent->TOTAL_POINTS;

    free(agent);
    free(Girl_status);

    return points;
}
Exemplo n.º 4
0
osg::Group* Simulation::SetupScene() {
	osg::Node* ground = Ground();
	osg::Node* leinwand_01 = Leinwand();
	osg::Node* leinwand_02 = Leinwand();
	osg::Node* leinwand_03 = Leinwand();
	// Declare a node which will serve as the root node
	// for the scene graph. Since we will be adding nodes
	// as 'children' of this node we need to make it a 'group'
	// instance.
	// The 'node' class represents the most generic version of nodes.
	// This includes nodes that do not have children (leaf nodes.)
	// The 'group' class is a specialized version of the node class.
	// It adds functions associated with adding and manipulating
	// children.

	osg::Group* root = new osg::Group();
	root->addChild(ground);
	osg::PositionAttitudeTransform* leinwand01_transform = new osg::PositionAttitudeTransform();
	osg::PositionAttitudeTransform* leinwand02_transform = new osg::PositionAttitudeTransform();
	osg::PositionAttitudeTransform* leinwand03_transform = new osg::PositionAttitudeTransform();
	leinwand01_transform->setPosition(osg::Vec3(6,6,0));
	leinwand02_transform->setPosition(osg::Vec3(-6,6,0));
	leinwand03_transform->setPosition(osg::Vec3(6,-6,0));
	leinwand03_transform->setAttitude(osg::Quat(M_PI,osg::Vec3d(0.0,0.0,1.0)));
	leinwand01_transform->setAttitude(osg::Quat(-M_PI/2,osg::Vec3d(0.0,0.0,1.0)));
	root->addChild(leinwand01_transform);
	root->addChild(leinwand02_transform);
	root->addChild(leinwand03_transform);
	leinwand01_transform->addChild(leinwand_01);
	leinwand02_transform->addChild(leinwand_02);
	leinwand03_transform->addChild(leinwand_03);

	osg::Texture2D* leinwandFaceTexture01 = new osg::Texture2D;
	osg::Texture2D* leinwandFaceTexture02 = new osg::Texture2D;
	osg::Texture2D* leinwandFaceTexture03 = new osg::Texture2D;

	// protect from being optimized away as static state:
	leinwandFaceTexture01->setDataVariance(osg::Object::STATIC);
	leinwandFaceTexture02->setDataVariance(osg::Object::STATIC);
	leinwandFaceTexture03->setDataVariance(osg::Object::STATIC);

	// load an image by reading a file:
	osg::Image* leinwandFace01 = osgDB::readImageFile("textures/wall1_1024.jpg");
	osg::Image* leinwandFace02 = osgDB::readImageFile("textures/wall2_1024.jpg");
	osg::Image* leinwandFace03 = osgDB::readImageFile("textures/wall3_1024.jpg");

	if (!leinwandFace01) std::cout << " couldn't find texture." << std::endl;
	if (!leinwandFace02) std::cout << " couldn't find texture." << std::endl;
	if (!leinwandFace03) std::cout << " couldn't find texture." << std::endl;

	// Assign the texture to the image we read from file:
	leinwandFaceTexture01->setImage(leinwandFace01);
	leinwandFaceTexture02->setImage(leinwandFace02);
	leinwandFaceTexture03->setImage(leinwandFace03);

	// Create a new StateSet with default settings:
	osg::StateSet* state_leinwand01 = new osg::StateSet();
	osg::StateSet* state_leinwand02 = new osg::StateSet();
	osg::StateSet* state_leinwand03 = new osg::StateSet();

	// Assign texture unit 0 of our new StateSet to the texture
	// we just created and enable the texture.
	state_leinwand01->setTextureAttributeAndModes
			  (0,leinwandFaceTexture01,osg::StateAttribute::ON);
	state_leinwand02->setTextureAttributeAndModes
			  (0,leinwandFaceTexture02,osg::StateAttribute::ON);
	state_leinwand03->setTextureAttributeAndModes
			  (0,leinwandFaceTexture03,osg::StateAttribute::ON);

	// Associate this state set with the Geode.
	leinwand01_transform->setStateSet(state_leinwand01);
	leinwand02_transform->setStateSet(state_leinwand02);
	leinwand03_transform->setStateSet(state_leinwand03);

	return root;
}
//Draws the 3D scene
void drawScene() {

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glClearColor(R,G,B,1);
    glMatrixMode(GL_MODELVIEW); // keep it like this
    glLoadIdentity();

    glTranslatef(0.0f, 0.0f, -12.0f);




    nightLight();



    glRotatef(10, 1.0f, 0.0f, 0.0f);
    glRotatef(-10, 0.0f, 0.0f, 1.0f);
    glRotatef(_angle,0.0f, 1.0f, 0.0f);
    //glRotatef(10, 1.0f, 0.0f, 0.0f);
    //glRotatef(-10, 0.0f, 0.0f, 1.0f);
    //glRotatef(_angle,0.0f, 1.0f, 0.0f);

    glColor3f(1.0f, 1.0f, 0.0f);
    glTranslatef(0.0f,0.0f,-3.0f);
    glBegin(GL_QUADS);
//---------------------------- Top start ----------------
    //Front


    glColor3f(1,0.6,0.2);

    glVertex3f(-2.0f, 2.0f, 1.0f); //1
    glVertex3f(2.0f, 2.0f, 1.0f);
    glVertex3f(2.0f, 1.0f, 1.0f);
    glVertex3f(-2.0f, 1.0f, 1.0f);

    glVertex3f(-2.0f, 1.0f, 1.0f); //2
    glVertex3f(-0.75f, 1.0f, 1.0f);
    glVertex3f(-0.75f, -1.0f, 1.0f);
    glVertex3f(-2.0f, -1.0f, 1.0f);

    glVertex3f(0.75f, 1.0f, 1.0f); //3
    glVertex3f(2.0f, 1.0f, 1.0f);
    glVertex3f(2.0f, -1.0f, 1.0f);
    glVertex3f(0.75f, -1.0f, 1.0f);

    glVertex3f(-0.75f, -0.5f, 1.0f); //4
    glVertex3f(-0.75f, -1.0f, 1.0f);
    glVertex3f(0.75f, -1.0f, 1.0f);
    glVertex3f(0.75f, -0.5f, 1.0f);

    glVertex3f(-2.0f, 2.0f, 0.5f); //1
    glVertex3f(2.0f, 2.0f, 0.5f);
    glVertex3f(2.0f, 1.0f, 0.5f);
    glVertex3f(-2.0f, 1.0f, 0.5f);

    glVertex3f(-2.0f, 1.0f, 0.5f); //2
    glVertex3f(-0.75f, 1.0f, 0.5f);
    glVertex3f(-0.75f, -1.0f, 0.5f);
    glVertex3f(-2.0f, -1.0f, 0.5f);

    glVertex3f(0.75f, 1.0f, 0.5f); //3
    glVertex3f(2.0f, 1.0f, 0.5f);
    glVertex3f(2.0f, -1.0f, 0.5f);
    glVertex3f(0.75f, -1.0f, 0.5f);

    glVertex3f(-0.75f, -0.5f, 0.5f); //4
    glVertex3f(-0.75f, -1.0f, 0.5f);
    glVertex3f(0.75f, -1.0f, 0.5f);
    glVertex3f(0.75f, -0.5f, 0.5f);

    glVertex3f(-2.0f, 2.0f, 0.5f); //1234 top
    glVertex3f(2.0f, 2.0f, 0.5f);
    glVertex3f(2.0f, 2.0f, 1.0f);
    glVertex3f(-2.0f, 2.0f, 1.0f);

    glVertex3f(0.75f, 1.0f, 0.5f); //1234 middle
    glVertex3f(0.75f, 1.0f, 1.0f);
    glVertex3f(0.75f, -1.0f, 1.0f);
    glVertex3f(0.75f, -1.0f, 0.5f);

    glVertex3f(-0.75f, 1.0f, 0.5f); //1234 middle
    glVertex3f(-0.75f, 1.0f, 1.0f);
    glVertex3f(-0.75f, -1.0f, 1.0f);
    glVertex3f(-0.75f, -1.0f, 0.5f);

    glVertex3f(-2.0f, 2.0f, 0.5f); //5 back
    glVertex3f(-2.5f, 1.75f, 0.5f);
    glVertex3f(-2.5f, -1.0f, 0.5f);
    glVertex3f(-2.0f, -1.0f, 0.5f);

    glVertex3f(-2.0f, 2.0f, 1.0f); //5 front
    glVertex3f(-2.5f, 1.75f, 1.0f);
    glVertex3f(-2.5f, -1.0f, 1.0f);
    glVertex3f(-2.0f, -1.0f, 1.0f);

    glVertex3f(-2.0f, 2.0f, 1.0f); //5 top
    glVertex3f(-2.0f, 2.0f, 0.5f);
    glVertex3f(-2.5f, 1.75f, 0.5f);
    glVertex3f(-2.5f, 1.75f, 1.0f);

    glVertex3f(-2.5f, 1.75f, 0.5f); //6 back
    glVertex3f(-2.75f, 1.50f, 0.5f);
    glVertex3f(-2.75f, -1.0f, 0.5f);
    glVertex3f(-2.5f, -1.0f, 0.5f);

    glVertex3f(-2.5f, 1.75f, 1.0f); //6 back
    glVertex3f(-2.75f, 1.50f, 1.0f);
    glVertex3f(-2.75f, -1.0f, 1.0f);
    glVertex3f(-2.5f, -1.0f, 1.0f);

    glVertex3f(-2.50f, 1.75f, 1.0f); //6 top
    glVertex3f(-2.50f, 1.75f, 0.5f);
    glVertex3f(-2.75f, 1.5f, 0.5f);
    glVertex3f(-2.75f, 1.5f, 1.0f);
    glEnd();
    glBegin(GL_POLYGON);

    glVertex3f(-2.75f,1.5f,1.0f);  //1
    glVertex3f(-3.00f,1.5f,1.0f);  //2
    glVertex3f(-3.25f,1.25f,1.0f); //3
    glVertex3f(-3.50f,1.25f,1.0f);  //4
    glVertex3f(-3.70f,1.00f,1.0f);  //5
    glVertex3f(-4.00f,0.75f,1.0f); //6
    glVertex3f(-4.10f,0.60f,1.0f);  //7
    glVertex3f(-4.50f,0.30f,1.0f); //8 -------------------
    //------------------------------

    glVertex3f(-4.50f,-1.0f,1.0f);
    glVertex3f(-2.75f,-1.0f,1.0f);

    glVertex3f(-2.75f,1.5f,0.5f);  //1
    glVertex3f(-3.00f,1.5f,0.5f);  //2
    glVertex3f(-3.25f,1.25f,0.5f); //3
    glVertex3f(-3.50f,1.25f,0.5f);  //4
    glVertex3f(-3.70f,1.00f,0.5f);  //5
    glVertex3f(-4.00f,0.75f,0.5f); //6
    glVertex3f(-4.10f,0.60f,0.5f);  //7
    glVertex3f(-4.50f,0.30f,0.5f); //8 -------------------
    //------------------------------

    glVertex3f(-4.50f,-1.0f,0.5f);
    glVertex3f(-2.75f,-1.0f,0.5f);
    glEnd();
    //glutSolidTeapot(2.5);
    glBegin(GL_QUADS);

    glVertex3f(-4.50f,0.30f,0.5f);
    glVertex3f(-5.50f,0.30f,0.5f);
    glVertex3f(-5.50f,-1.0f,0.5f);
    glVertex3f(-4.50f,-1.0f,0.5f);
    glVertex3f(-4.50f,0.30f,1.0f);
    glVertex3f(-5.50f,0.30f,1.0f);
    glVertex3f(-5.50f,-1.0f,1.0f);
    glVertex3f(-4.50f,-1.0f,1.0f);
    glVertex3f(-4.50f,0.30f,1.0f);
    glVertex3f(-5.50f,0.30f,1.0f);
    glVertex3f(-5.50f,0.30f,0.5f);
    glVertex3f(-4.50f,0.30f,0.5f);
    glEnd();

    glBegin(GL_POLYGON);

    glVertex3f(-5.50f,0.30f,0.5f);
    glVertex3f(-5.75f,0.50f,0.5f);
    glVertex3f(-6.25f,0.65f,0.5f);
    glVertex3f(-6.75f,0.45f,0.5f);
    glVertex3f(-7.25f,0.10f,0.5f);
    glVertex3f(-7.25f,-1.0f,0.5f);
    glVertex3f(-5.50f,-1.0f,0.5f);
    glEnd();
    //-------------------------
    glBegin(GL_POLYGON);
    glVertex3f(-5.50f,0.30f,1.0f);
    glVertex3f(-5.75f,0.50f,1.0f);
    glVertex3f(-6.25f,0.65f,1.0f);
    glVertex3f(-6.75f,0.45f,1.0f);
    glVertex3f(-7.25f,0.10f,1.0f);
    glVertex3f(-7.25f,-1.0f,1.0f);
    glVertex3f(-5.50f,-1.0f,1.0f);
    //------------------------
    glEnd();
    glBegin(GL_QUADS);
    glVertex3f(-7.25f,-1.0f,1.0f);
    glVertex3f(-7.25f,-1.0f,0.5f);
    glVertex3f(-7.25f,0.10f,0.5f);
    glVertex3f(-7.25f,0.10f,1.0f); //-------- left fill side wall

    glVertex3f(-7.25f,0.10f,1.0f);
    glVertex3f(-6.75f,0.45f,1.0f);
    glVertex3f(-6.75f,0.45f,0.5f);
    glVertex3f(-7.25f,0.10f,0.5f);


    glVertex3f(-6.75f,0.45f,1.0f);
    glVertex3f(-6.25f,0.65f,1.0f);
    glVertex3f(-6.25f,0.65f,0.5f);
    glVertex3f(-6.75f,0.45f,0.5f);


    glVertex3f(-6.25f,0.65f,1.0f);
    glVertex3f(-5.75f,0.50f,1.0f);
    glVertex3f(-5.75f,0.50f,0.5f);
    glVertex3f(-6.25f,0.65f,0.5f);


    glVertex3f(-5.75f,0.50f,1.0f);
    glVertex3f(-5.50f,0.30f,1.0f);
    glVertex3f(-5.50f,0.30f,0.5f);
    glVertex3f(-5.75f,0.50f,0.5f);
    glEnd();

    glBegin(GL_QUADS);
    glVertex3f(2.0f,2.0f,1.0f);
    glVertex3f(2.50f,1.80f,1.15f);
    glVertex3f(2.50f,-1.0f,1.15f);
    glVertex3f(2.0f,-1.0f,1.0f);

    glVertex3f(2.0f,2.0f,0.5f);
    glVertex3f(2.50f,1.80f,0.65f);
    glVertex3f(2.50f,-1.0f,0.65f);
    glVertex3f(2.0f,-1.0f,0.5f);

    glVertex3f(2.0f,2.0f,1.0f);
    glVertex3f(2.0f,2.0f,0.5f);
    glVertex3f(2.50f,1.80f,0.65f);
    glVertex3f(2.50f,1.80f,1.15f);//----------------right wall

    glVertex3f(2.50f,1.80f,1.15f);
    glVertex3f(3.00f,2.0f,1.20f);
    glVertex3f(3.00f,-1.0f,1.20f);
    glVertex3f(2.50f,-1.0f,1.15f);

    glVertex3f(2.50f,1.80f,0.65f);
    glVertex3f(3.00f,2.0f,0.70f);
    glVertex3f(3.00f,-1.0f,0.70f);
    glVertex3f(2.50f,-1.0f,0.65f);

    glVertex3f(2.50f,1.80f,1.15f);
    glVertex3f(2.50f,1.80f,0.65f);
    glVertex3f(3.00f,2.0f,0.70f);
    glVertex3f(3.00f,2.0f,1.20f); //-----------------------------------

    glVertex3f(3.00f,2.0f,1.20f);
    glVertex3f(4.00f,2.0f,1.35f);
    glVertex3f(4.00f,-1.0f,1.35f);
    glVertex3f(3.00f,-1.0f,1.20f);

    glVertex3f(3.00f,2.0f,0.70f);
    glVertex3f(4.00f,2.0f,0.85f);
    glVertex3f(4.00f,-1.0f,0.85f);
    glVertex3f(3.00f,-1.0f,0.70f);

    glVertex3f(3.0f,2.0f,1.20f);
    glVertex3f(3.0f,2.0f,0.70f);
    glVertex3f(4.00f,2.0f,0.85f);
    glVertex3f(4.00f,2.0f,1.35f);//---------------------------

    glVertex3f(4.00f,2.0f,1.35f);
    glVertex3f(4.25f,1.80f,1.45f);
    glVertex3f(4.25f,-1.0f,1.45f);
    glVertex3f(4.00f,-1.0f,1.35f);

    glVertex3f(4.00f,2.0f,0.85f);
    glVertex3f(4.25f,1.80f,0.95f);
    glVertex3f(4.25f,-1.0f,0.95f);
    glVertex3f(4.00f,-1.0f,0.85f);

    glVertex3f(4.00f,2.0f,0.85f);
    glVertex3f(4.00f,2.0f,1.35f);
    glVertex3f(4.25f,1.80f,1.45f);
    glVertex3f(4.25f,1.80f,0.95f); //-----------------------

    glVertex3f(4.25f,1.80f,1.45f);
    glVertex3f(5.00f,0.50f,1.65f);
    glVertex3f(5.00f,-1.0f,1.65f);
    glVertex3f(4.25f,-1.0f,1.45f);

    glVertex3f(4.25f,1.80f,0.95f);
    glVertex3f(5.00f,0.50f,1.15f);
    glVertex3f(5.00f,-1.0f,1.15f);
    glVertex3f(4.25f,-1.0f,0.95f);

    glVertex3f(4.25f,1.80f,0.95f);
    glVertex3f(4.25f,1.80f,1.45f);
    glVertex3f(5.00f,0.50f,1.65f);
    glVertex3f(5.00f,0.50f,1.15f); //-------------------

    glVertex3f(5.00f,0.50f,1.65f);
    glVertex3f(5.25f,0.50f,1.75f);
    glVertex3f(5.25f,-1.0f,1.75f);
    glVertex3f(5.00f,-1.0f,1.65f);

    glVertex3f(5.00f,0.50f,1.15f);
    glVertex3f(5.25f,0.50f,1.25f);
    glVertex3f(5.25f,-1.0f,1.25f);
    glVertex3f(5.00f,-1.0f,1.15f);

    glVertex3f(5.00f,0.50f,1.15f);
    glVertex3f(5.00f,0.50f,1.65f);
    glVertex3f(5.25f,0.50f,1.75f);
    glVertex3f(5.25f,0.50f,1.25f); //-----------------------

    glVertex3f(5.25f,0.50f,1.75f);
    glVertex3f(5.75f,0.35f,1.95f);
    glVertex3f(5.75f,-1.0f,1.95f);
    glVertex3f(5.25f,-1.0f,1.75f);

    glVertex3f(5.25f,0.50f,1.25f);
    glVertex3f(5.75f,0.35f,1.45f);
    glVertex3f(5.75f,-1.0f,1.45f);
    glVertex3f(5.25f,-1.0f,1.25f);

    glVertex3f(5.25f,0.50f,1.25f);
    glVertex3f(5.25f,0.50f,1.75f);
    glVertex3f(5.75f,0.35f,1.95f);
    glVertex3f(5.75f,0.35f,1.45f);  //----------------

    glVertex3f(5.75f,0.35f,1.95f);
    glVertex3f(6.25f,0.25f,2.15f);
    glVertex3f(6.25f,-1.0f,2.15f);
    glVertex3f(5.75f,-1.0f,1.95f);

    glVertex3f(5.75f,0.35f,1.45f);
    glVertex3f(6.25f,0.25f,1.65f);
    glVertex3f(6.25f,-1.0f,1.65f);
    glVertex3f(5.75f,-1.0f,1.45f);

    glVertex3f(5.75f,0.35f,1.45f);
    glVertex3f(5.75f,0.35f,1.95f);
    glVertex3f(6.25f,0.25f,2.15f);
    glVertex3f(6.25f,0.25f,1.65f); //------------------


    glVertex3f(6.25f,0.25f,2.15f);
    glVertex3f(6.25f,0.25f,1.65f);
    glVertex3f(6.25f,-1.0f,1.65f);
    glVertex3f(6.25f,-1.0f,2.15f); //-------------right fill side wall

    glVertex3f(-7.25f,-0.7f,4.5f);
    glVertex3f(-7.25f,-1.0f,4.5f);
    glVertex3f(6.25f,-1.0f,4.5f);
    glVertex3f(6.25f,-0.7f,4.5f); //----------black front red boundary

    glVertex3f(-7.25f,-0.7f,4.5f);
    glVertex3f(-7.25f,-0.7f,4.3f);
    glVertex3f(6.25f,-0.7f,4.3f);
    glVertex3f(6.25f,-0.7f,4.5f); //----------black front red boundary

    glColor3f(0.8,0.5,0.5);

    glVertex3f(-4.25f,-0.7f,4.5f);
    glVertex3f(-4.25f,-0.7f,4.7f);
    glVertex3f(2.25f,-0.7f,4.7f);
    glVertex3f(2.25f,-0.7f,4.5f); //----------staircase

    glVertex3f(-4.25f,-0.7f,4.7f);
    glVertex3f(-4.25f,-1.0f,4.7f);
    glVertex3f(2.25f,-1.0f,4.7f);
    glVertex3f(2.25f,-0.7f,4.7f); //----------staircase

    glVertex3f(-4.25f,-0.7f,4.5f);
    glVertex3f(-4.25f,-1.0f,4.5f);
    glVertex3f(-4.25f,-1.0f,4.7f);
    glVertex3f(-4.25f,-0.7f,4.7f); //----------staircase

    glVertex3f(2.25f,-0.7f,4.5f);
    glVertex3f(2.25f,-1.0f,4.5f);
    glVertex3f(2.25f,-1.0f,4.7f);
    glVertex3f(2.25f,-0.7f,4.7f); //----------staircase

    glVertex3f(-4.25f,-0.85f,4.7f);
    glVertex3f(-4.25f,-0.85f,5.0f);
    glVertex3f(2.25f,-0.85f,5.0f);
    glVertex3f(2.25f,-0.85f,4.7f); //----------staircase

    glVertex3f(-4.25f,-0.85f,5.0f);
    glVertex3f(-4.25f,-1.0f,5.0f);
    glVertex3f(2.25f,-1.0f,5.0f);
    glVertex3f(2.25f,-0.85f,5.0f); //----------staircase

    glVertex3f(-4.25f,-0.85f,4.7f);
    glVertex3f(-4.25f,-1.0f,4.7f);
    glVertex3f(-4.25f,-1.0f,5.0f);
    glVertex3f(-4.25f,-0.85f,5.0f); //----------staircase

    glVertex3f(2.25f,-0.85f,4.7f);
    glVertex3f(2.25f,-1.0f,4.7f);
    glVertex3f(2.25f,-1.0f,5.0f);
    glVertex3f(2.25f,-0.85f,5.0f); //----------staircase END

    glVertex3f(2.75f,-0.7f,5.5f);
    glVertex3f(2.75f,-1.0f,5.5f);
    glVertex3f(2.75f,-1.0f,8.5f);
    glVertex3f(2.75f,-0.7f,8.5f); // right decor

    glVertex3f(2.75f,-0.7f,5.5f);
    glVertex3f(3.00f,-0.7f,5.5f);
    glVertex3f(3.00f,-0.7f,8.5f);
    glVertex3f(2.75f,-0.7f,8.5f); // right decor

    glVertex3f(2.75f,-0.7f,8.5f);
    glVertex3f(2.75f,-1.0f,8.5f);
    glVertex3f(5.75f,-1.0f,8.5f);
    glVertex3f(5.75f,-0.7f,8.5f); // right decor

    glVertex3f(2.75f,-0.7f,8.5f);
    glVertex3f(5.75f,-0.7f,8.5f);
    glVertex3f(5.75f,-0.7f,8.25f);
    glVertex3f(2.75f,-0.7f,8.25f); // right decor

    glEnd();
    glBegin(GL_QUADS);
    glColor3f(0,0,0);

    glVertex3f(0.75f, 1.0f, 4.0f); //---- black box start
    glVertex3f(2.0f, 1.0f, 4.0f);
    glVertex3f(2.0f, -1.0f, 4.0f);
    glVertex3f(0.75f, -1.0f, 4.0f);

    glVertex3f(0.75f, 1.0f, 3.0f);
    glVertex3f(2.0f, 1.0f, 3.0f);
    glVertex3f(2.0f, -1.0f, 3.0f);
    glVertex3f(0.75f, -1.0f, 3.0f);

    glVertex3f(0.75f, 1.0f, 4.0f);
    glVertex3f(0.75f, 1.0f, 3.0f);
    glVertex3f(0.75f, -1.0f, 3.0f);
    glVertex3f(0.75f, -1.0f, 4.0f);

    glVertex3f(2.0f, 1.0f, 4.0f);
    glVertex3f(2.0f, 1.0f, 3.0f);
    glVertex3f(2.0f, -1.0f, 3.0f);
    glVertex3f(2.0f, -1.0f, 4.0f);

    glVertex3f(0.75f, 1.0f, 4.0f);
    glVertex3f(0.75f, 1.0f, 3.0f);
    glVertex3f(2.0f, 1.0f, 3.0f);
    glVertex3f(2.0f, 1.0f, 4.0f);  //---------- black box end

    glVertex3f(-0.25f, 1.0f, 3.5f);
    glVertex3f(-0.30f, 1.0f, 3.5f);
    glVertex3f(-0.30f, -1.0f, 3.5f);
    glVertex3f(-0.25f, -1.0f, 3.5f);  //---------- black stand
    glVertex3f(-0.25f, 1.0f, 3.48f);
    glVertex3f(-0.30f, 1.0f, 3.48f);
    glVertex3f(-0.30f, -1.0f, 3.48f);
    glVertex3f(-0.25f, -1.0f, 3.48f);  //---------- black stand

    glVertex3f(-7.25f, -1.0f, 4.5f);
    glVertex3f(-7.25f, -1.0f, 1.0f);
    glVertex3f(6.25f, -1.0f, 1.8f);
    glVertex3f(6.25f, -1.0f, 4.5f);

    glVertex3f(-7.25f, -0.8f, 4.5f);
    glVertex3f(-7.25f, -0.8f, 1.0f);
    glVertex3f(6.25f, -0.8f, 1.8f);
    glVertex3f(6.25f, -0.8f, 4.5f);

    glVertex3f(-7.25f, -0.8f, 4.5f);
    glVertex3f(-7.25f, -1.0f, 4.5f);
    glVertex3f(-7.25f, -1.0f, 1.0f);
    glVertex3f(-7.25f, -0.8f, 1.0f);

    glVertex3f(6.25f, -0.8f, 4.5f);
    glVertex3f(6.25f, -1.0f, 4.5f);
    glVertex3f(6.25f, -1.0f, 1.8f);
    glVertex3f(6.25f, -0.8f, 1.8f);


    glEnd();
    glBegin(GL_QUADS);
    glColor3f(0,1,0.4);
    glVertex3f(-0.25f, 1.0f, 3.49f);
    glVertex3f(0.20f, 1.0f, 3.49f);
    glVertex3f(0.20f, 0.65f, 3.49f);
    glVertex3f(-0.25f, 0.65f, 3.49f);  //---------- flag


    glEnd();

    glBegin(GL_QUADS);
    glColor3f(1,0,0);
    glVertex3f(-0.18f, 0.85f, 3.49f);
    glVertex3f(0.02f, 0.85f, 3.49f);
    glVertex3f(0.02f, 0.75f, 3.49f);
    glVertex3f(-0.18f, 0.75f, 3.49f);
    glVertex3f(-0.1f, 0.88f, 3.49f);
    glVertex3f(0.02f, 0.85f, 3.49f);
    glVertex3f(-0.1f, 0.75f, 3.49f);
    glVertex3f(-0.18f, 0.85f, 3.49f);
    glColor3f(0,0,0);
    glVertex3f(-7.25f, -0.7f, 6.5f);
    glVertex3f(-7.30f, -0.7f, 6.5f);
    glVertex3f(-7.30f, -1.0f, 6.5f);
    glVertex3f(-7.25f, -1.0f, 6.5f);  //----------  tree black stand
    glVertex3f(-7.25f, -0.7f, 6.48f);
    glVertex3f(-7.30f, -0.7f, 6.48f);
    glVertex3f(-7.30f, -1.0f, 6.48f);
    glVertex3f(-7.25f, -1.0f, 6.48f);  //---------- tree black stand



    glEnd();

    glPushMatrix();
    glColor3f(0,1,0);
    glTranslated(-7.27,-0.5,6.49);
    glutSolidSphere(0.25,10,10);
    glPopMatrix;

    Ground();






    glutSwapBuffers();
}
Exemplo n.º 6
0
void Display(void) {
    
    // バッファのクリア
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); // カラーバッファとZバッファの消去 (ステンシルバッファ使うときは、別途(GL_STENCIL_BUFFER_BIT)指定する必要あり)
 
    // 座標変換 (ワールド変換 -> ビュー座標変換(カメラ) -> 射影変換 -> クリッピング)
    // NOTE : なぜか 通常の順序とは逆に、Viewport変換 -> 射影変換 -> モデルビュー変換の順に設定する.
    // OpenGL的には、カレント変換行列の生成を行っているが、逆からかけていくことによって作られたカレント行列に、モデル行列をかけるだけで、描画位置が決まるようになる.

    glViewport(0, 0, WindowWidth, WindowHeight);

    // 射影変換の際に必要な情報
    glMatrixMode(GL_PROJECTION); //行列モードの設定(GL_PROJECTION : 透視変換行列の設定、GL_MODELVIEW:モデルビュー変換行列)
    glLoadIdentity(); // カレント行列の初期化
    gluPerspective(30.0, (double)WindowWidth/(double)WindowHeight, 0.1, 1000.0); // 透視投影の視体積

    // ビュー変換に必要な情報 (毎loopでカメラを動かしているイメージ)
    
    ViewPointY += ( -50.0 - ViewPointY) * 0.001;
    
    gluLookAt(
              0.0,  ViewPointY     ,  ViewPointZ, // 視点の位置x,y,z;
              0.0,  ViewPointY+200 ,   0.0,   // 視界の中心位置の参照点座標x,y,z
              0.0,    0.0,   1.0 );  //視界の上方向のベクトルx,y,z
  
    //モデルビュー変換行列の設定--------------------------
    glMatrixMode(GL_MODELVIEW);//行列モードの設定(GL_PROJECTION : 透視変換行列の設定、GL_MODELVIEW:モデルビュー変換行列)
    glLoadIdentity();//行列の初期化
    
    // 陰影ON---------------------
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0); // 光源0を利用
    // --------------------------
    
    // NOTE : 光源を利用する際は、glColor3dが無効になるので、オブジェクトの色は`glMaterialfv(適用する面, 光源の種類, 反射する色)`で指定する
    
    /*
     * 複数のオブジェクトを描画する際は、Initializeで作成したカレント行列を元に描画する必要があるので、オブジェクトの描画ごとにカレント行列をPushして、描画おわり次第Popする.
     */
    
    // 球
    glPushMatrix(); // カレント行列をスタックに保存しておく (popされるまでのカレント行列への変更を無視できる)
    glMaterialfv(GL_FRONT, GL_AMBIENT, ms_ruby.ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE, ms_ruby.diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR, ms_ruby.specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, &ms_ruby.shininess);
    glTranslated(0.0, 10.0, 20.0); // 平行移動値の設定 (OpenGL内部では、カレント行列に平行移動行列を乗算して、カレント行列を更新している)
    glutSolidSphere(4.0, 20, 20);
    glPopMatrix();

    // 立方体
    glPushMatrix();
    glMaterialfv(GL_FRONT, GL_DIFFUSE, green);
    glTranslated(-20.0, 0.0, 20.0);
    glutSolidCube(10.0); // 引数: 一辺の長さ
    glPopMatrix();

    // 円錐
    glPushMatrix();
    glMaterialfv(GL_FRONT, GL_DIFFUSE, blue);
    glTranslated(20.0, 100.0, 0.0);
    glutSolidCone(5.0, 10.0, 20, 20); // 引数: (半径、高さ、Z軸まわりの分割数、Z軸に沿った分割数)
    glPopMatrix();
    
    // 直方体
    // NOTE 「GLUT」に関数が与えられている球(glutSolidSphere)や立方体(glutSolidCube)の場合には、
    // 物体の「表」「裏」の情報に与えたれているが、任意の物体を自前で定義した場合には、各面に対して法線ベクトルを定義する必要がある
    glPushMatrix();
    glMaterialfv(GL_FRONT, GL_AMBIENT, ms_jade.ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE, ms_jade.diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR, ms_jade.specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, &ms_jade.shininess);
    glTranslated(30.0, 50.0, 0.0); // 平行移動値の設定
    glBegin(GL_QUADS);
    for (int j = 0; j < 6; j++) {
        glNormal3dv(normal[j]); //法線ベクトルの指定
        for (int i = 0; i < 4; i++) {
            glVertex3dv(vertex[face[j][i]]);
        }
    }
    glEnd();
    glPopMatrix();
    
    //陰影OFF-----------------------------
    glDisable(GL_LIGHTING);
    //-----------------------------------

    glPushMatrix();
    Ground();
    glPopMatrix();
    
    glutSwapBuffers(); // glutInitDisplayModel(GLUT_DOUBLE)でダブルバッファリングを可にしているので必要
}