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 nail_base() {
    glColor3f(0.9, .7, 0.2); // لون ذهبي/نحاسي للقاعدة

    // جسم القاعدة
    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, 10, z);
        glVertex3f(x, -10, z);
    }
    glEnd();

    // الغطاء العلوي للقاعدة
    glBegin(GL_TRIANGLE_FAN);
    glVertex3f(0, 11, 0);
    for (float i = 0; i <= 2 * PI; i += 2 * PI / 200)
    {
        float x = 15 * cos(i);
        float z = 15 * sin(i);
        glVertex3f(x, 11, z);
    }
    glEnd();

    // الغطاء السفلي للقاعدة
    glBegin(GL_TRIANGLE_FAN);
    glVertex3f(0, -11, 0);
    for (float i = 0; i <= 2 * PI; i += 2 * PI / 200)
    {
        float x = 15 * cos(i);
        float z = 15 * sin(i);
        glVertex3f(x, -11, z);
    }
    glEnd();
}

void nail_pen() {
    glColor3f(0.9, .7, 0.9); 

    // جسم القلم/العنق
    glBegin(GL_QUAD_STRIP);
    for (float i = 0; i <= 2 * PI; i += 2 * PI / 200)
    {
        float x = 10 * cos(i);
        float z = 10 * sin(i);
        glVertex3f(x, 50, z);
        glVertex3f(x, -50, z);
    }
    glEnd();

    // الغطاء العلوي
    glBegin(GL_TRIANGLE_FAN);
    glVertex3f(0, 51, 0);
    for (float i = 0; i <= 2 * PI; i += 2 * PI / 200)
    {
        float x = 10 * cos(i);
        float z = 10 * sin(i);
        glVertex3f(x, 51, z);
    }
    glEnd();

    // الغطاء السفلي
    glBegin(GL_TRIANGLE_FAN);
    glVertex3f(0, -51, 0);
    for (float i = 0; i <= 2 * PI; i += 2 * PI / 200)
    {
        float x = 10 * cos(i);
        float z = 10 * sin(i);
        glVertex3f(x, -51, z);
    }
    glEnd();
}

void nail_pyramid() {
    glColor3f(.7, .7, .7); // لون رمادي للغطاء الهرمي
    glBegin(GL_TRIANGLES);

    // الوجه الأول
    glVertex3f(0, 30, 0);    // قمة الهرم
    glVertex3f(-12, 0, 12);
    glVertex3f(12, 0, 12);

    // الوجه الثاني
    glVertex3f(0, 30, 0);    // قمة الهرم
    glVertex3f(-12, 0, -12);
    glVertex3f(12, 0, -12);

    // الوجه الثالث
    glVertex3f(0, 30, 0);    // قمة الهرم
    glVertex3f(-12, 0, 12);
    glVertex3f(-12, 0, -12);

    // الوجه الرابع
    glVertex3f(0, 30, 0);    // قمة الهرم
    glVertex3f(12, 0, 12);
    glVertex3f(12, 0, -12);

    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);

    // 1. رسم القاعدة (في الأسفل)
    glPushMatrix();
    glTranslated(0, -50, 0); // تحريك لأسفل محور Y
    nail_base();
    glPopMatrix();

    // 2. رسم الجسم الأوسط (القلم) - في المنتصف
    nail_pen();

    // 3. رسم الغطاء الهرمي (في الأعلى)
    glPushMatrix();
    glTranslated(0, 50, 0); // تحريك لأعلى محور Y ليجلس فوق القلم
    nail_pyramid();
    glPopMatrix();

    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("Nail Bottle"); // تغيير اسم النافذة
    SetupRC();
    glutDisplayFunc(Render);
    glutSpecialFunc(specialkey);
    glutMainLoop();
}
Comments