الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ممكن احد يشرح هالكود

مغلق
بدأه CoMPuTeR-SCIeNCe في 21 نوفمبر 2005 · 2 رد · 1,374 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام

ممكن احد يشرح الاكواد الي موجوده بالبرنامج وشكرا

#include <glut.h>
#include <stdio.h>
#include <math.h>

GLfloat rtex ,i;

GLfloat light0_ambient[] =
{0.2, 0.2, 0.2, 1.0};
GLfloat light0_diffuse[] =
{0.0, 0.0, 0.0, 1.0};
GLfloat light1_diffuse[] =
{1.0, 1.0, 1.0, 1.0};
GLfloat light1_position[] =
{1.0, 1.0, 1.0, 0.0};
GLfloat light2_diffuse[] =
{0.0, 0.88, 0.45, 1.0};
GLfloat light2_position[] =
{-1.0, -1.0, 1.0, 0.0};


float s = 0.0,tick;
GLfloat angle1 = 0.0, angle2 = 0.0,angle=0.0;

void output(GLfloat x, GLfloat y, char *text)
{
  char *p;

  glPushMatrix();
  glTranslatef(x, y, 0);
  for(p = text; *p; p++)
  glutStrokeCharacter(GLUT_STROKE_ROMAN, *p);
  glPopMatrix();
}

void display(void)
{

  static GLfloat amb[] =
  {0.4, 0.4, 0.4, 0.0};
  static GLfloat dif[] =
  {1.0, 1.0, 1.0, 0.0};

  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  glEnable(GL_LIGHT1);
  glDisable(GL_LIGHT2);
  amb[3] = dif[3] = cos(s) / 2.0 + 0.5;
  glMaterialfv(GL_FRONT, GL_AMBIENT, amb);
  glMaterialfv(GL_FRONT, GL_DIFFUSE, dif);

  glPushMatrix();
  glTranslatef(-0.3, -0.3, 0.0);
  glRotatef(angle1, 1.0, 5.0, 0.0);
  glCallList(1);        
  glPopMatrix();

  glClear(GL_DEPTH_BUFFER_BIT);
  glEnable(GL_LIGHT2);
  glDisable(GL_LIGHT1);
  amb[3] = dif[3] = 0.5 - cos(s * .95) / 2.0;
  glMaterialfv(GL_FRONT, GL_AMBIENT, amb);
  glMaterialfv(GL_FRONT, GL_DIFFUSE, dif);

  glPushMatrix();
  glTranslatef(0.3, 0.3, 0.0);
  glRotatef(angle2, 1.0, 0.0, 5.0);
  glCallList(1);  
  glPopMatrix();

  glPushAttrib(GL_ENABLE_BIT);
  glDisable(GL_DEPTH_TEST);
  glDisable(GL_LIGHTING);
  glMatrixMode(GL_PROJECTION);
  glPushMatrix();
  glLoadIdentity();
  gluOrtho2D(0.0, 1500.0, 0.0, 1500.0);
  glMatrixMode(GL_MODELVIEW);
  glPushMatrix();
  glLoadIdentity();
  /*draw lift flag*/
  glPushMatrix();
  glTranslatef(1.3, -0.3, 0.0);
  glRotatef((60.0 / (5 * 2)) * tick, 0.0, 1.0, 0.0);
  glBegin(GL_QUADS);
  glColor3f(0.0,0.0,1.0);
  glVertex3f(300.0,1400.0,-1.0);
  glVertex3f(50.0,1400.0,-1.0);
  glVertex3f(50.0,1200.0,-1.0);
  glVertex3f(300.0,1200.0,-1.0);
  glEnd();
  glPopMatrix();

  
  /*coulame flag*/
  glBegin(GL_QUADS);
  glColor3f(1.0,1.0,1.0);
  glVertex3f(100.0,1200.0,-1.0);
  glVertex3f(50.0,1200.0,-1.0);
  glVertex3f(50.0,850.0,-1.0);
  glVertex3f(100.0,850.0,-1.0);
  glEnd();

 /*draw right flag */
  glPushMatrix();
  glTranslatef(1.3, -0.3, 0.0);
  glRotatef((60.0 / (5 * 2)) * tick, 0.0, 1.0, 0.0);
  glBegin(GL_QUADS);
  glColor3f(0.0,0.0,1.0);
  glVertex3f(1450,1400.0,-1.0);
  glVertex3f(1200,1400.0,-1.0);
  glVertex3f(1200,1200.0,-1.0);
  glVertex3f(1450,1200.0,-1.0);
  glEnd();
  glPopMatrix();
  glBegin(GL_LINES);

  /*coulame flag*/
  glBegin(GL_QUADS);
  glColor3f(1.0,1.0,1.0);
  glVertex3f(1450.0,1200.0,-1.0);
  glVertex3f(1400.0,1200.0,-1.0);
  glVertex3f(1400.0,850.0,-1.0);
  glVertex3f(1450.0,850.0,-1.0);
  glEnd();
 /*draw low line */ 
  glBegin(GL_LINES);
  for(i=10.0;i<700.0; i+=150.0)
 {
  glColor3f(0.0,0.80,0.45);
  glVertex3f(0.0,i,1.0);
  glVertex3f(1500,i,1.0);
  }
  glEnd();
  
  glColor3f(1.0,1.0,1.0);
  glRotatef(4,0.0,0.0,0.0);
  output(10, 600," ALL MuSLiMs LoVeS");
  output(10, 450,"  RaMaZaN and The ");
  output(0, 150, "    DoWNLoaD     ");
  output(0, 10,  "   In RaMaZaNNN  ");
  glColor3f(0.0,0.80,0.45);
  glDisable(GL_LINE_SMOOTH);
  glDisable(GL_BLEND);
  output(10, 300,"   HOLY QURAN   ");
  glCallList(1); 
  glPopMatrix();
  glMatrixMode(GL_PROJECTION);
  glPopMatrix();
  glPopAttrib();
  glMatrixMode(GL_MODELVIEW);

  glutSwapBuffers();

  glFlush();
  }

  void idle(void)
  {
  angle1 = (GLfloat) fmod(angle1 + 0.8, 360.0);
  angle2 = (GLfloat) fmod(angle2 + 1.1, 360.0);
 s += 0.01;
  tick+=1;
  if (tick >= 5) {
    tick = 0;
  };
  glutPostRedisplay();
  }

  void visible(int vis)
  {
  if (vis == GLUT_VISIBLE)
    glutIdleFunc(idle);
  else
    glutIdleFunc(NULL);
  }



void reshape(int w, int h)
{
   glViewport (0, 0, (GLsizei) w, (GLsizei) h);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   glOrtho(50.0, 50.0, 50.0, 50.0, 0.0, 0.0);
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
}



void keyboard (unsigned char key, int x, int y)
{
    if (key = 27)
         exit(0);
}



 int main(int argc, char **argv)
 {
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  glutInitWindowSize(640,480);
  glutCreateWindow("RAMAZAN KAREEM");
  glutDisplayFunc(display);
  glutVisibilityFunc(visible);
  glutReshapeFunc(reshape); 
  glutKeyboardFunc(keyboard);

  glNewList(1, GL_COMPILE);  
  glutSolidIcosahedron();
  glEndList();

  glEnable(GL_LIGHTING);
  glEnable(GL_LIGHT0);
  glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient);
  glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);
  glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse);
  glLightfv(GL_LIGHT1, GL_POSITION, light1_position);
  glLightfv(GL_LIGHT2, GL_DIFFUSE, light2_diffuse);
  glLightfv(GL_LIGHT2, GL_POSITION, light2_position);
  glEnable(GL_DEPTH_TEST);
  glEnable(GL_CULL_FACE);
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  glEnable(GL_LINE_SMOOTH);
  glLineWidth(2.0);

  glutMainLoop();
  return 0;             
}
#2

بسم الله الرحمن الرحيم

صدقني يا أخي

هادي أول مرة بشوف فيها كود

Opengl

بس عندي خلفية بسيطة جداً جداً .... بإمكانك تحكي من هون لبكرة ... جداً جداً ..

عن الـ DirectX

وعلى كلن حسب علمي وهو ليس أكيد

فأن تفسير الكود سيكون كالتالي

وأرجوا من الأخوة تصحيحي إذا أخطأت

أعتقد أنوا كلوا خطاً :D

#include <glut.h> // مسؤول عن الرسم
#include <stdio.h>//مسؤول عن الإدخال والإخراج
#include <math.h>// مسؤول عن العمليات الحسابية


GLfloat rtex ,i;

//هنا أدخلنا ثلاثة أنواع من الأضواء


//الأول
//الضوء في محيط داخل الشكل
GLfloat light0_ambient[] =
//الاحدائيات
{0.2, 0.2, 0.2, 1.0};
//الضوء المنتشر خارج الشكل
GLfloat light0_diffuse[] =
//الاحدائيات
{0.0, 0.0, 0.0, 1.0};

//الثاني
//الضوء المنتشر خارج الشكل
GLfloat light1_diffuse[] =
//الاحدائيات
{1.0, 1.0, 1.0, 1.0};
//تحديد مكان إنتشار الضوء
GLfloat light1_position[] =
//الاحدائيات
{1.0, 1.0, 1.0, 0.0};

//الثالث
//الضوء المنتشر خارج الشكل
GLfloat light2_diffuse[] =
//الاحدائيات
{0.0, 0.88, 0.45, 1.0};
//تحديد مكان إنتشار الضوء
GLfloat light2_position[] =
//الاحدائيات
{-1.0, -1.0, 1.0, 0.0};

//تعريف المتغيرات
float s = 0.0,tick;
GLfloat angle1 = 0.0, angle2 = 0.0,angle=0.0;


void output(GLfloat x, GLfloat y, char *text)
{
 char *p;

 glPushMatrix();
 glTranslatef(x, y, 0);
 for(p = text; *p; p++)
 glutStrokeCharacter(GLUT_STROKE_ROMAN, *p);
 glPopMatrix();
}

void display(void)
{

//مواصفات الشكلين من أبعاد وألوان ودوران

 static GLfloat amb[] =
 {0.4, 0.4, 0.4, 0.0};
 static GLfloat dif[] =
 {1.0, 1.0, 1.0, 0.0};

 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


 glEnable(GL_LIGHT1);
 glDisable(GL_LIGHT2);
 amb[3] = dif[3] = cos(s) / 2.0 + 0.5;
 glMaterialfv(GL_FRONT, GL_AMBIENT, amb);
 glMaterialfv(GL_FRONT, GL_DIFFUSE, dif);

 glPushMatrix();
 glTranslatef(-0.3, -0.3, 0.0);
 glRotatef(angle1, 1.0, 5.0, 0.0);
 glCallList(1);        
 glPopMatrix();

 glClear(GL_DEPTH_BUFFER_BIT);
 glEnable(GL_LIGHT2);
 glDisable(GL_LIGHT1);
 amb[3] = dif[3] = 0.5 - cos(s * .95) / 2.0;
 glMaterialfv(GL_FRONT, GL_AMBIENT, amb);
 glMaterialfv(GL_FRONT, GL_DIFFUSE, dif);

 glPushMatrix();
 glTranslatef(0.3, 0.3, 0.0);
 glRotatef(angle2, 1.0, 0.0, 5.0);
 glCallList(1);  
 glPopMatrix();

 glPushAttrib(GL_ENABLE_BIT);
 glDisable(GL_DEPTH_TEST);
 glDisable(GL_LIGHTING);
 glMatrixMode(GL_PROJECTION);
 glPushMatrix();
 glLoadIdentity();
 gluOrtho2D(0.0, 1500.0, 0.0, 1500.0);
 glMatrixMode(GL_MODELVIEW);
 glPushMatrix();
 glLoadIdentity();

//تحديد أبعاد ولون الشكل المراد رسمه من الجهه اليسري
 glPushMatrix();
 glTranslatef(1.3, -0.3, 0.0);
 glRotatef((60.0 / (5 * 2)) * tick, 0.0, 1.0, 0.0);
 glBegin(GL_QUADS);
 glColor3f(0.0,0.0,1.0);
 glVertex3f(300.0,1400.0,-1.0);
 glVertex3f(50.0,1400.0,-1.0);
 glVertex3f(50.0,1200.0,-1.0);
 glVertex3f(300.0,1200.0,-1.0);
 glEnd();
 glPopMatrix();


 //تحديد أبعاد ولون الشكل المراد رسمه من الأعمدة
 glBegin(GL_QUADS);
 glColor3f(1.0,1.0,1.0);
 glVertex3f(100.0,1200.0,-1.0);
 glVertex3f(50.0,1200.0,-1.0);
 glVertex3f(50.0,850.0,-1.0);
 glVertex3f(100.0,850.0,-1.0);
 glEnd();

//تحديد أبعاد ولون الشكل المراد رسمه من الجهه اليمنى
 glPushMatrix();
 glTranslatef(1.3, -0.3, 0.0);
 glRotatef((60.0 / (5 * 2)) * tick, 0.0, 1.0, 0.0);
 glBegin(GL_QUADS);
 glColor3f(0.0,0.0,1.0);
 glVertex3f(1450,1400.0,-1.0);
 glVertex3f(1200,1400.0,-1.0);
 glVertex3f(1200,1200.0,-1.0);
 glVertex3f(1450,1200.0,-1.0);
 glEnd();
 glPopMatrix();
 glBegin(GL_LINES);

 //تحديد أبعاد ولون الشكل المراد رسمه من الأعمدة
 glBegin(GL_QUADS);
 glColor3f(1.0,1.0,1.0);
 glVertex3f(1450.0,1200.0,-1.0);
 glVertex3f(1400.0,1200.0,-1.0);
 glVertex3f(1400.0,850.0,-1.0);
 glVertex3f(1450.0,850.0,-1.0);
 glEnd();

// تجديد أبعاد ولون الخطوط
 glBegin(GL_LINES);
 for(i=10.0;i<700.0; i+=150.0)
{
 glColor3f(0.0,0.80,0.45);
 glVertex3f(0.0,i,1.0);
 glVertex3f(1500,i,1.0);
 }
 glEnd();

 glColor3f(1.0,1.0,1.0);
 glRotatef(4,0.0,0.0,0.0);

 //الكتابة وتحديد المكان واللون
 output(10, 600," ALL MuSLiMs LoVeS");
 output(10, 450,"  RaMaZaN and The ");
 output(0, 150, "    DoWNLoaD     ");
 output(0, 10,  "   In RaMaZaNNN  ");
 glColor3f(0.0,0.80,0.45);
 glDisable(GL_LINE_SMOOTH);
 glDisable(GL_BLEND);
 output(10, 300,"   HOLY QURAN   ");
 glCallList(1); 
 glPopMatrix();
 glMatrixMode(GL_PROJECTION);
 glPopMatrix();
 glPopAttrib();
 glMatrixMode(GL_MODELVIEW);

//طريقة تنزيل الملف في كرت الشاشة
 glutSwapBuffers();

//تنظيف الذاكرة
 glFlush();
 }

 void idle(void)
 {
  //تحديد زوايا الدوران
 angle1 = (GLfloat) fmod(angle1 + 0.8, 360.0);
 angle2 = (GLfloat) fmod(angle2 + 1.1, 360.0);
s += 0.01;
 tick+=1;
 if (tick >= 5) {
   tick = 0;
 };
 glutPostRedisplay();
 }

 void visible(int vis)
 {
 if (vis == GLUT_VISIBLE)
   glutIdleFunc(idle);
 else
   glutIdleFunc(NULL);
 }


//تحديد مجال الرؤية
void reshape(int w, int h)
{
  glViewport (0, 0, (GLsizei) w, (GLsizei) h);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glOrtho(0, 0, 0, 0.0, 0.0, 0.0);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
}


//عند الضغط على شيفرة المفتاح  27 سوف يخرج
void keyboard (unsigned char key, int x, int y)
{
   if (key = 27)
        exit(0);
}



int main(int argc, char **argv)
{
	//مواصفات شاشة العرض
 glutInit(&argc, argv);
 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
 glutInitWindowSize(640,480);
 glutCreateWindow("RAMAZAN KAREEM");
 glutDisplayFunc(display);
 glutVisibilityFunc(visible);
 glutReshapeFunc(reshape); 
 glutKeyboardFunc(keyboard);

 glNewList(1, GL_COMPILE);  
 glutSolidIcosahedron();
 glEndList();

//مواصفات الإضائة
 glEnable(GL_LIGHTING);
 glEnable(GL_LIGHT0);
 glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient);
 glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);
 glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse);
 glLightfv(GL_LIGHT1, GL_POSITION, light1_position);
 glLightfv(GL_LIGHT2, GL_DIFFUSE, light2_diffuse);
 glLightfv(GL_LIGHT2, GL_POSITION, light2_position);
 glEnable(GL_DEPTH_TEST);
 glEnable(GL_CULL_FACE);
 glEnable(GL_BLEND);
 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 glEnable(GL_LINE_SMOOTH);
 glLineWidth(2.0);


 glutMainLoop();
 return 0;             
}

في إنتظار تصحيح الأخوة المشرفيييييين :D

#3

مشكور اخوي رااد على تجاوبك وياي

حمدالله شرحك ممتاز

بس ممكن احد يشرحني اكثر بلي يعرفه عن هالاوامر وشكرا

static GLfloat amb[] =

{0.4, 0.4, 0.4, 0.0};

static GLfloat dif[] =

{1.0, 1.0, 1.0, 0.0};

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glEnable(GL_LIGHT1);

glDisable(GL_LIGHT2);

amb[3] = dif[3] = cos(s) / 2.0 + 0.5;

glMaterialfv(GL_FRONT, GL_AMBIENT, amb);

glMaterialfv(GL_FRONT, GL_DIFFUSE, dif);

glPushMatrix();

glTranslatef(-0.3, -0.3, 0.0);

glRotatef(angle1, 1.0, 5.0, 0.0);

glCallList(1);

glPopMatrix();

glClear(GL_DEPTH_BUFFER_BIT);

glEnable(GL_LIGHT2);

glDisable(GL_LIGHT1);

amb[3] = dif[3] = 0.5 - cos(s * .95) / 2.0;

glMaterialfv(GL_FRONT, GL_AMBIENT, amb);

glMaterialfv(GL_FRONT, GL_DIFFUSE, dif);

glPushMatrix();

glTranslatef(0.3, 0.3, 0.0);

glRotatef(angle2, 1.0, 0.0, 5.0);

glCallList(1);

glPopMatrix();

glPushAttrib(GL_ENABLE_BIT);

glDisable(GL_DEPTH_TEST);

glDisable(GL_LIGHTING);

glMatrixMode(GL_PROJECTION);

glPushMatrix();

glLoadIdentity();

gluOrtho2D(0.0, 1500.0, 0.0, 1500.0);

glMatrixMode(GL_MODELVIEW);

glPushMatrix();

glLoadIdentity();

هذا الموضوع مغلق.

مواضيع مشابهة