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(); } } } } }
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; }
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; }
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(); }
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)でダブルバッファリングを可にしているので必要 }