// A.18 scenario graphics example // scene. CC # include "scene. H "# define baseradius 0.2 # define radius 0.08 # define baselen 1 # define uplen 0.6 # define lowlen 0.6 # define eyeradius 0.04 # define chairleglen 0.55int main (INT argc, char ** argv) {float V [] [3] = {-0.3,-0.2, 0.0}, {0.3,-0.2, 0.0}, {0.3, 0.2 }, {-0.3, 0.2, 0.0 }}; // light nodes light * light1 = new light; light * light2 = new light; turnoff * off1 = new turnoff (light1 ); turnoff * off2 = new turnoff (light2); // setting light values: light1-> setvalue (Position,-2,-3, 1.5, 1 ); light1-> setvalue (spot_direction, 2, 3,-1.5); light1-> setvalue (cutoffangle, 40.0); light1-> turnon (); light2-> setvalue (position, 5, 5, 5, 0); light2-> setvalue (specular, 1.0, 1.0, 1.0); light2-> setvalue (diffuse, 1.0, 1.0, 1.0, 1.0, 1.0); light2-> turnon (); // nodes for camera: Camera * camera1 = new camera (Perspective); camera1-> setvalue (Position, 2.2, 0.9, 3 ); camera1-> setvalue (aimat, 0, 0, 0); camera1-> setvalue (updirection, 0, 1, 0); camera1-> setvalue (aspect, 1 ); camera1-> setvalue (near, 1); camera1-> setvalue (far, 20); camera1-> setvalue (yangle, 50); // nodes for Robot: material * robotmat = new material; Material * eyemat = new material; cylinder * base = new cylinder; sphere * head = new sphere; sphere * eyel = new sphere; sphere * eyer = new sphere; cylinder * upperarml = new cylinder; cylinder * upperarmr = new cylinder; cylinder * lowerarml = new cylinder; cylinder * lowerarmr = new cylinder; cylinder * upperlegl = new cylinder; cylinder * upperlegr = new cylinder; cylinder * lowerlegl = new cylinder; cylinder * lowerlegr = new cylinder; polygon * paper = new polygon; transformation * eyeltrans = new transformation; transformation * eyertrans = new transformation; transformation * headtrans = new transformation; transformation * uparmltrans = new transformation; transformation * region = new transformation; transformation * region = new transformation; transformation * lowlegtrans = new transformation; transformation * basetrans = new transformation; // robot value: robotmat-> setvalue (diffuse, 0.0, 0.0, 1.0, 1.0); robotmat-> setvalue (ambient, 0.0, 0.0, 1.0, 1.0); robotmat-> setvalue (specular, 1.0, 1.0, 1.0, 1.0); robotmat-> setvalue (shininess, 100.0); eyemat-> setvalue (diffuse, 1.0, 1.0, 1.0, 1.0 ); eyemat-> setvalue (ambient, 1.0, 1.0, 1.0); eyemat-> setvalue (specular, 1.0, 1.0, 1.0, 1.0); eyemat-> setvalue (shininess, 100.0); base-> setvalue (height, baselen); base-> setvalue (radius, baseradius); head-> setvalue (radius, baseradius); eyel-> setvalue (radius, eyeradius); eyer-> setvalue (radius, eyeradius); upperarml-> setvalue (height, uplen); upperarml-> setvalue (radius, radius); lowerarml-> setvalue (height, lowlen); lowerarml-> setvalue (radius, radius); upperarmr-> setvalue (height, uplen); upperarmr-> setvalue (radius, radius); lowerarmr-> setvalue (height, lowlen); lowerarmr-> setvalue (radius, radius); upperlegl-> setvalue (height, uplen); upperlegl-> setvalue (radius, radius); lowerlegl-> setvalue (height, lowlen); lowerlegl-> setvalue (radius, radius); upperlegr-> setvalue (height, uplen); upperlegr-> setvalue (radius, radius); lowerlegr-> setvalue (height, lowlen); lowerlegr-> setvalue (radius, radius); paper-> setverticesv (v, 4); paper-> setmaterial (eyemat); eyeltrans-> setvalue (translation, baseradius-eyeradius/2, 0, 0, 0); eyeltrans-> setvalue (rotation, 30, 0, 0, 1, 1); eyertrans-> setvalue (translation, baseradius-eyeradius/2, 0, 0, 0); eyertrans-> setvalue (rotation,-30, 0, 0, 1, 1); headtrans-> setvalue (translation, 0, 0, baselen + baseradius/3, 0); uparmltrans-> setvalue (translation, 0, 0,-uplen, 0); uparmltrans-> setvalue (rotation, -45, 0, 1, 0, 1); uparmltrans-> setvalue (translation, 0, baseradius + radius, baselen, 2); uparmrtrans-> setvalue (translation, 0, 0,-uplen, 0); uparmrtrans-> setvalue (rotation,-45, 0, 1, 0, 1); uparmrtrans-> setvalue (translation, 0, -(baseradius + radius), baselen, 2); lowarmtrans-> setvalue (translation, 0, 0,-uplen, 0); lowarmtrans-> setvalue (rotation,-45, 0, 1, 0, 1); uplegltrans-> setvalue (translation, 0, 0,-uplen, 0); uplegltrans-> setvalue (rotation,-90, 0, 1, 0, 1); uplegltrans-> setvalue (translation, 0, baseradius + radius, 0, 2); uplegrtrans-> setvalue (translation, 0, 0,-uplen, 0 ); uplegrtrans-> setvalue (rotation,-100, 0, 1, 0, 1); uplegrtrans-> setvalue (translation, 0,-(baseradius + radius), 0, 2 ); lowlegtrans-> setvalue (translation, 0, 0,-uplen, 0); lowlegtrans-> setvalue (rotation, 95, 0, 1, 0, 1 ); basetrans-> setvalue (rotation,-90, 1, 0, 0); basetrans-> setvalue (rotation,-10, 0, 0, 1, 1 ); head-> settransform (headtrans); eyel-> settransform (eyeltrans); eyer-> settransform (eyertrans); eyer-> setmaterial (eyemat); eyel-> setmaterial (eyemat ); upperarml-> settransform (Transform); lowerarml-> settransform (lowarmtrans); upperarmr-> settransform (Transform); lowerarmr-> settransform (Transform); upperlegl-> settransform (Transform ); lowerlegl-> settransform (lowlegtrans); upperlegr-> settransform (Transform); lowerlegr-> settransform (lowlegtrans); base-> settransform (basetrans); paper-> settransform (rotation, 20, 0, 1, 0, 0); paper-> settransform (translation, 0.05,-0.15,-0.2, 1); // set relationship in Robot: robotmat-> addchild (light1); light1-> addchild (base); base-> addchild (off1); off1-> addchild (light2); light2-> addchild (head ); head-> addchild (off2); head-> addchild (eyel); head-> addchild (eyer); base-> addchild (upperarml); upperarml-> addchild (lowerarml ); base-> addchild (upperarmr); upperarmr-> addchild (lowerarmr); base-> addchild (upperlegl); upperlegl-> addchild (lowerlegl); base-> addchild (upperlegr ); upperlegr-> addchild (lowerlegr); lowerarmr-> addchild (paper); // nodes for Chair: Cube * seat = new cube (0.7, 0.06, 0.7 ); line * leg1 = new line; line * leg2 = new line; line * leg3 = new line; line * leg4 = new line; drawstyle * legstyle = new drawstyle; color * chaircolor = new color; // chair value: Float V1 [] [3] = {-0.3, 0, 0.3}, {-0.35,-1 * chairleglen, 0.3 }}; float V2 [] [3] = {0.3, 0, 0.3}, {0.35,-1 * chairleglen, 0.3 }}; float V3 [] [3] = {0.3, 0,-0.3}, {0.35,-1 * chairleglen,-0.3 }}; float V4 [] [3] = {-0.3, 0,-0.3}, {-0.35,-1 * chairleglen,-0.3 }}; chaircolor-> setvalue (red); seat-> settransform (translation, 0,-0.15, 0, 0); legstyle-> setvalue (linewidth, 7 ); leg1-> setstyle (legstyle); leg1-> setverticesv (V1); leg2-> setstyle (legstyle); leg2-> setverticesv (V2); leg3-> setstyle (legstyle ); leg3-> setverticesv (V3); leg4-> setstyle (legstyle); leg4-> setverticesv (V4); seat-> addchild (leg1); seat-> addchild (leg2 ); seat-> addchild (leg3); seat-> addchild (leg4); chaircolor-> addchild (seat); // transformation nodes for both robot and Chair: transformation * trans1 = new transformation; trans1-> setvalue (translation,-0.5, 0, 0, 2); trans1-> addchild (chaircolor); trans1-> addchild (robotmat ); // root node: node * root = new node; root-> addchild (trans1); root-> addchild (camera1); // Viewer: glviewer * myviewer = new glviewer; myviewer-> Init (argc, argv); myviewer-> setvalue (backcolor, grey); myviewer-> setvalue (buffer, double); myviewer-> createwin ("Working Hard ", (500,500); glviewer * myviewer2 = new glviewer; myviewer2-> Init (argc, argv); myviewer2-> setvalue (backcolor, Magenta); myviewer2-> createwin ("working hard2 ", 200,200); myviewer2-> setvalue (buffer, double); myviewer-> show (Root); myviewer2-> show (Root); Return 0 ;}