#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