I2luY2x1ZGUmbHQ7d2luZG93cy5oJmd0OwojaW5jbHVkZSZsdDtHTC9nbHV0LmgmZ3Q7CiNpbmNsdWRlJmx0O3N0ZGxpYi5oJmd0OwoKZG91YmxlIHJvdGF0ZV95PTA7CmRvdWJsZSByb3RhdGVfeD0wOwpkb3VibGUgcm90YXRlX3o9MDsKCnZvaWQgc3BlY2lhbGtleXMoaW50IGtleSwgaW50IHgsIGludCB5KQp7CmlmKGtleT09R0xVVF9LRVlfUklHSFQpCiAgICByb3RhdGVfeS09NTsKZWxzZSBpZihrZXk9PUdMVVRfS0VZX0xFRlQpCiAgICByb3RhdGVfeSs9NTsKZWxzZSBpZihrZXk9PUdMVVRfS0VZX1VQKQogICAgcm90YXRlX3grPTU7CmVsc2UgaWYoa2V5PT1HTFVUX0tFWV9ET1dOKQogICAgcm90YXRlX3gtPTU7CmVsc2UgaWYoa2V5PT1HTFVUX0tFWV9QQUdFX1VQKQogICAgcm90YXRlX3orPTU7CmVsc2UgaWYoa2V5PT1HTFVUX0tFWV9QQUdFX0RPV04pCiAgICByb3RhdGVfei09NTsKZ2x1dFBvc3RSZWRpc3BsYXkoKTsKfQoKdm9pZCBkaXNwbGF5KCkKewpnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQgfCBHTF9ERVBUSF9CVUZGRVJfQklUKTsKZ2xMb2FkSWRlbnRpdHkoKTsKZ2xSb3RhdGVmKHJvdGF0ZV94LDEuMCwwLjAsMC4wKTsKZ2xSb3RhdGVmKHJvdGF0ZV95LDAuMCwxLjAsMC4wKTsKZ2xSb3RhdGVmKHJvdGF0ZV96LDAuMCwwLjAsMS4wKTsKCmdsQmVnaW4oR0xfUE9MWUdPTik7CmdsQ29sb3IzZiggMS4wLCAwLjAsIDAuMCApOwpnbFZlcnRleDNmKDAuNSwgMC41LCAtMC41KTsgICAgICAgCmdsVmVydGV4M2YoMC4wLDAuMCwwLjApOyAgICAgICAKZ2xWZXJ0ZXgzZigtMC41LDAuNSwtMC41KTsgICAgICAgCmdsRW5kKCk7CgpnbEJlZ2luKEdMX1BPTFlHT04pOwpnbENvbG9yM2YoICAgMS4wLCAgMC4wLCAwLjAgKTsKZ2xWZXJ0ZXgzZiggIDAuNSwgMC41LCAwLjUgKTsKZ2xWZXJ0ZXgzZiggIDAuMCwgIDAuMCwgMC4wICk7CmdsVmVydGV4M2YoIC0wLjUsICAwLjUsIDAuNSApOwpnbEVuZCgpOwoKZ2xCZWdpbihHTF9QT0xZR09OKTsKZ2xDb2xvcjNmKCAgMS4wLCAgMC4wLCAgMC4wICk7CmdsVmVydGV4M2YoIDAuNSwgMC41LCAwLjUgKTsKZ2xWZXJ0ZXgzZiggMC4wLCAgMC4wLCAwLjApOwpnbFZlcnRleDNmKCAwLjUsICAwLjUsIC0wLjUgKTsKZ2xFbmQoKTsKCgpnbEJlZ2luKEdMX1BPTFlHT04pOwpnbENvbG9yM2YoICAgMS4wLCAgMC4wLCAgMC4wICk7CmdsVmVydGV4M2YoIC0wLjUsIDAuNSwgIDAuNSApOwpnbFZlcnRleDNmKCAwLjAsICAwLjAsICAwLjAgKTsKZ2xWZXJ0ZXgzZiggLTAuNSwgIDAuNSwgLTAuNSApOwpnbEVuZCgpOwoKCmdsQmVnaW4oR0xfUE9MWUdPTik7CmdsQ29sb3IzZiggICAxLjAsICAwLjAsICAwLjAgKTsKZ2xWZXJ0ZXgzZiggIDAuNSwgIDAuNSwgIDAuNSApOwpnbFZlcnRleDNmKCAgMC41LCAgMC41LCAtMC41ICk7CmdsVmVydGV4M2YoIC0wLjUsICAwLjUsIC0wLjUgKTsKZ2xWZXJ0ZXgzZiggLTAuNSwgIDAuNSwgIDAuNSApOwpnbEVuZCgpOwoKZ2xGbHVzaCgpOwpnbHV0U3dhcEJ1ZmZlcnMoKTsKfQoKdm9pZCBpbml0KCkKewpHTGZsb2F0IG1hdF9zcGVjdWxhcltdID0geyAxLjAsIDEuMCwgMS4wLCAxLjAgfTsKR0xmbG9hdCBtYXRfc2hpbmluZXNzW10gPSB7IDUwLjAgfTsKR0xmbG9hdCBsaWdodF9wb3NpdGlvbltdID0geyAxLjAsIDEuMCwgMS4wLCAwLjAgfTsKR0xmbG9hdCB3aGl0ZV9saWdodFtdID0geyAxLjAsIDEuMCwgMS4wLCAxLjAgfTsKR0xmbG9hdCBsbW9kZWxfYW1iaWVudFtdID0geyAwLjEsIDAuMSwgMC4xLCAxLjAgfTsKZ2xDbGVhckNvbG9yKDAuMCwgMC4wLCAwLjAsIDAuMCk7CmdsU2hhZGVNb2RlbChHTF9TTU9PVEgpOwpnbE1hdGVyaWFsZnYoR0xfRlJPTlQsIEdMX1NQRUNVTEFSLCBtYXRfc3BlY3VsYXIpOwpnbE1hdGVyaWFsZnYoR0xfRlJPTlQsIEdMX1NISU5JTkVTUywgbWF0X3NoaW5pbmVzcyk7CmdsTGlnaHRmdihHTF9MSUdIVDAsIEdMX1BPU0lUSU9OLCBsaWdodF9wb3NpdGlvbik7CmdsTGlnaHRmdihHTF9MSUdIVDAsIEdMX0RJRkZVU0UsIHdoaXRlX2xpZ2h0KTsKZ2xMaWdodGZ2KEdMX0xJR0hUMCwgR0xfU1BFQ1VMQVIsIHdoaXRlX2xpZ2h0KTsKZ2xMaWdodE1vZGVsZnYoR0xfTElHSFRfTU9ERUxfQU1CSUVOVCwgbG1vZGVsX2FtYmllbnQpOwpnbEVuYWJsZShHTF9MSUdIVElORyk7CmdsRW5hYmxlKEdMX0xJR0hUMCk7CmdsRW5hYmxlKEdMX0RFUFRIX1RFU1QpOwp9CgppbnQgbWFpbihpbnQgYXJnYyxjaGFyKiogYXJndikKewpnbHV0SW5pdCgmYW1wO2FyZ2MsYXJndik7CmdsdXRJbml0RGlzcGxheU1vZGUoR0xVVF9TSU5HTEUgfCBHTFVUX1JHQiB8IEdMVVRfREVQVEgpOwpnbHV0SW5pdFdpbmRvd1Bvc2l0aW9uKDEwMCwxMDApOwpnbHV0SW5pdFdpbmRvd1NpemUoMzIwLDMyMCk7CmdsdXRDcmVhdGVXaW5kb3coJnF1b3Q7M0QgUHlyYW1pZCEmcXVvdDspOwppbml0KCk7CmdsdXREaXNwbGF5RnVuYyhkaXNwbGF5KTsKZ2x1dFNwZWNpYWxGdW5jKHNwZWNpYWxrZXlzKTsKZ2x1dE1haW5Mb29wKCk7CnJldHVybiAwOwp9
#include<windows.h>
#include<GL/glut.h>
#include<stdlib.h>
double rotate_y=0;
double rotate_x=0;
double rotate_z=0;
void specialkeys(int key, int x, int y)
{
if(key==GLUT_KEY_RIGHT)
rotate_y-=5;
else if(key==GLUT_KEY_LEFT)
rotate_y+=5;
else if(key==GLUT_KEY_UP)
rotate_x+=5;
else if(key==GLUT_KEY_DOWN)
rotate_x-=5;
else if(key==GLUT_KEY_PAGE_UP)
rotate_z+=5;
else if(key==GLUT_KEY_PAGE_DOWN)
rotate_z-=5;
glutPostRedisplay();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glRotatef(rotate_x,1.0,0.0,0.0);
glRotatef(rotate_y,0.0,1.0,0.0);
glRotatef(rotate_z,0.0,0.0,1.0);
glBegin(GL_POLYGON);
glColor3f( 1.0, 0.0, 0.0 );
glVertex3f(0.5, 0.5, -0.5);
glVertex3f(0.0,0.0,0.0);
glVertex3f(-0.5,0.5,-0.5);
glEnd();
glBegin(GL_POLYGON);
glColor3f( 1.0, 0.0, 0.0 );
glVertex3f( 0.5, 0.5, 0.5 );
glVertex3f( 0.0, 0.0, 0.0 );
glVertex3f( -0.5, 0.5, 0.5 );
glEnd();
glBegin(GL_POLYGON);
glColor3f( 1.0, 0.0, 0.0 );
glVertex3f( 0.5, 0.5, 0.5 );
glVertex3f( 0.0, 0.0, 0.0);
glVertex3f( 0.5, 0.5, -0.5 );
glEnd();
glBegin(GL_POLYGON);
glColor3f( 1.0, 0.0, 0.0 );
glVertex3f( -0.5, 0.5, 0.5 );
glVertex3f( 0.0, 0.0, 0.0 );
glVertex3f( -0.5, 0.5, -0.5 );
glEnd();
glBegin(GL_POLYGON);
glColor3f( 1.0, 0.0, 0.0 );
glVertex3f( 0.5, 0.5, 0.5 );
glVertex3f( 0.5, 0.5, -0.5 );
glVertex3f( -0.5, 0.5, -0.5 );
glVertex3f( -0.5, 0.5, 0.5 );
glEnd();
glFlush();
glutSwapBuffers();
}
void init()
{
GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat mat_shininess[] = { 50.0 };
GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };
GLfloat white_light[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat lmodel_ambient[] = { 0.1, 0.1, 0.1, 1.0 };
glClearColor(0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_SMOOTH);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightfv(GL_LIGHT0, GL_DIFFUSE, white_light);
glLightfv(GL_LIGHT0, GL_SPECULAR, white_light);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow("3D Pyramid!");
init();
glutDisplayFunc(display);
glutSpecialFunc(specialkeys);
glutMainLoop();
return 0;
}