#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 hairbrush() {
glColor3f(0, 0, 1); // لون أزرق
glBegin(GL_QUAD_STRIP);
for (float i = 0; i <= 2 * PI + 1; i += 2 * PI / 100)
{
float x = 7.1 * cos(i);
float z = 7.1 * sin(i);
glVertex3f(x, 72, z);
glVertex3f(x, -72, z);
}
glEnd();
glBegin(GL_TRIANGLE_FAN);
glVertex3f(0, 73, 0);
for (float i = 0; i <= 2 * PI + 1; i += 2 * PI / 100)
{
float x = 7.1 * cos(i);
float z = 7.1 * sin(i);
glVertex3f(x, 73, z);
}
glEnd();
}
// دالة رسم قاعدة الفرشاة (الجسم البيضاوي)
void brush() {
glColor3f(0, 1, 0); // أخضر من الأعلى
glBegin(GL_QUAD_STRIP);
for (float i = 0; i <= 2 * PI + 1; i += 2 * PI / 100)
{
float x = 50 * cos(i);
float z = 50 * sin(i);
glVertex3f(x, 7.2, z);
glVertex3f(x, -7.2, z);
}
glEnd();
glBegin(GL_TRIANGLE_FAN);
glVertex3f(0, 7.2, 0);
for (float i = 0; i <= 2 * PI + 1; i += 2 * PI / 100)
{
float x = 50 * cos(i);
float z = 50 * sin(i);
glVertex3f(x, 7.2, z);
}
glEnd();
glColor3f(0, 1, 1); // سماوي من الأسفل
glBegin(GL_TRIANGLE_FAN);
glVertex3f(0, -7.2, 0);
for (float i = 0; i <= 2 * PI + 1; i += 2 * PI / 100)
{
float x = 50 * cos(i);
float z = 50 * sin(i);
glVertex3f(x, -7.2, z);
}
glEnd();
}
// دالة رسم سِنة واحدة (شعرة)
void snon() {
glColor3f(0, 0, 1); // أزرق
glBegin(GL_QUAD_STRIP);
for (float i = 0; i <= 2 * PI + 1; i += 2 * PI / 100)
{
float x = 3 * cos(i);
float z = 3 * sin(i);
glVertex3f(x, 25, z);
glVertex3f(x, 0, z);
}
glEnd();
glBegin(GL_TRIANGLE_FAN);
glVertex3f(0, 25, 0);
for (float i = 0; i <= 2 * PI + 1; i += 2 * PI / 100)
{
float x = 3 * cos(i);
float z = 3 * sin(i);
glVertex3f(x, 25, 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);
// 1. رسم يد الفرشاة
glPushMatrix();
glTranslated(-140, 0, 0); // إزاحة لليسار
glRotatef(90, 0, 0, 1); // تدوير اليد لتصبح أفقية
hairbrush();
glPopMatrix();
// 2. رسم قاعدة الفرشاة
glPushMatrix();
glScaled(1.5, 1, 1); // تكبير في محور X لعمل الشكل البيضاوي
brush();
glPopMatrix();
// 3. رسم الأسنان (Complex Loop Logic)
// الجزء الأول من الأسنان
int zz = 70;
for (int z = 0; z < 40; z += 10)
{
for (int i = -zz; i <= zz; i += 10)
{
glPushMatrix();
glTranslated(i, 0, z);
snon();
glPopMatrix();
}
zz -= 10; // تقليل العرض كلما اتجهنا للحافة
}
// إعادة تهيئة المتغير للجزء الثاني
zz = 70;
zz -= 10;
// الجزء الثاني من الأسنان (الجهة المقابلة)
for (int z = -10; z > -40; z -= 10)
{
for (int i = -zz; i <= zz; i += 10)
{
glPushMatrix();
glTranslated(i, 0, z);
snon();
glPopMatrix();
}
zz -= 10;
}
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("Hairbrush");
SetupRC();
glutDisplayFunc(Render);
glutSpecialFunc(specialkey);
glutMainLoop();
}
Comments