Also Like

📁 last Posts

رسم الكتاب والأسطوانة (كودي)

#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