#include <GL/glut.h>
#include <math.h>
const float PI = 22.0 / 7;
float xroot = 0, yroot = 0;
void SetupRC() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, 1, 1, 5000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(00, 00, 600,
0, 0, 0,
0, 1, 0);
}
void book() {
// الوجه الأمامي
glColor3f(1, 0, 1);
glBegin(GL_QUADS);
glVertex3f(200, 100, 10);
glVertex3f(-200, 100, 10);
glVertex3f(-200, -100, 10);
glVertex3f(200, -100, 10);
glEnd();
// الوجه الخلفي
glColor3f(.6, 0, 1);
glBegin(GL_QUADS);
glVertex3f(200, 100, -10);
glVertex3f(-200, 100, -10);
glVertex3f(-200, -100, -10);
glVertex3f(200, -100, -10);
glEnd();
// الجانب الأيمن
glColor3f(.6, 0, .7);
glBegin(GL_QUADS);
glVertex3f(200, 100, -10);
glVertex3f(200, 100, 10);
glVertex3f(200, -100, 10);
glVertex3f(200, -100, -10);
glEnd();
// الجانب الأيسر
glColor3f(.6, 0, .7);
glBegin(GL_QUADS);
glVertex3f(-200, 100, -10);
glVertex3f(-200, 100, 10);
glVertex3f(-200, -100, 10);
glVertex3f(-200, -100, -10);
glEnd();
// الوجه العلوي
glColor3f(.6, .3, .7);
glBegin(GL_QUADS);
glVertex3f(200, 100, -10);
glVertex3f(-200, 100, -10);
glVertex3f(-200, 100, 10);
glVertex3f(200, 100, 10);
glEnd();
// الوجه السفلي
glColor3f(1, .3, .7);
glBegin(GL_QUADS);
glVertex3f(200, -100, -10);
glVertex3f(-200, -100, -10);
glVertex3f(-200, -100, 10);
glVertex3f(200, -100, 10);
glEnd();
}
void cylinder() {
glColor3f(0, 1, 0); // لون الأسطوانة أخضر
// جسم الأسطوانة
glBegin(GL_QUAD_STRIP);
for (float i = 0; i <= 2 * PI; i += 2 * PI / 200)
{
float x = 15 * cos(i);
float z = 15 * sin(i);
glVertex3f(x, 101, z); // الارتفاع العلوي (أطول قليلاً من الكتاب)
glVertex3f(x, -101, z); // الارتفاع السفلي
}
glEnd();
// الغطاء العلوي للأسطوانة
glBegin(GL_TRIANGLE_FAN);
glVertex3f(0, 101, 0);
for (float i = 0; i <= 2 * PI; i += 2 * PI / 200)
{
float x = 15 * cos(i);
float z = 15 * sin(i);
glVertex3f(x, 100, z);
}
glEnd();
// الغطاء السفلي للأسطوانة
glBegin(GL_TRIANGLE_FAN);
glVertex3f(0, -101, 0);
for (float i = 0; i <= 2 * PI; i += 2 * PI / 200)
{
float x = 15 * cos(i);
float z = 15 * sin(i);
glVertex3f(x, -100, z);
}
glEnd();
}
void Render() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glPushMatrix();
// التحكم بالدوران
glRotatef(xroot, 1, 0, 0);
glRotatef(yroot, 0, 1, 0);
// استدعاء الدوال المطلوبة فقط
book();
cylinder();
glPopMatrix();
glFlush();
}
void specialkey(int key, int x, int y) {
if (key == GLUT_KEY_UP) {
xroot -= 5;
}
if (key == GLUT_KEY_DOWN) {
xroot += 5;
}
if (key == GLUT_KEY_LEFT) {
yroot -= 5;
}
if (key == GLUT_KEY_RIGHT) {
yroot += 5;
}
glutPostRedisplay();
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(800, 800);
glutCreateWindow("Book & Cylinder");
SetupRC();
glutDisplayFunc(Render);
glutSpecialFunc(specialkey);
glutMainLoop();
}
Comments