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

[ تمت الإجابة ]كود لرسم دوران الارض حول الشمس OpenGL

بدأه The.Eagle في 13 أبريل 2013 · 1 رد · 880 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم 

 

أريد أن أجعل الشمس ثابته وأحرك الارض 

 

لم أستطع تحريك الارض ... وإذا غيرت الزاوية في متغيرات الدوران تبدأ الشمس بالحركة ..
ولكن أريد تثبيتها وتحريك الارض على محور دورانها سواءًا كان X أو Y 

وأريد تحريكها حول الشمس ...  :(  :(

 

هذه محولاتي : 

 

#include <glut.h>
static int year = 0, day = 0;
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_FLAT);
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glRotatef(0.001,0,.001,0);
glRotatef(0.002,0,1,0);
glPushMatrix();

glutWireSphere(1.0, 20, 16); // The Sun
glTranslatef (2.0, 0.0, 0.0);

glutWireSphere(0.2, 10, 8); // The planet
glPopMatrix();
glutSwapBuffers();
day += 10;
year += 1;
glutPostRedisplay();
}
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}

 

وشكرا لكم 

2
#2

السلام عليكم

جرب هذا الكود:

 

 

#include <stdlib.h>
#include <GL/glut.h>


float time;
int Xrotate=0,Yrotate=0,Zmove=0,Xmove=0,Ymove=0,Xprec=0,Yprec=0;
static GLfloat sun_col[4]={1,.5,.2,1};
static GLfloat moon_col[4]={1,1,1,1};
static GLfloat p_col[4]={.2,.2,1,1};
void init(void)
{
 glEnable(GL_DEPTH_TEST);
 static GLfloat lightpos0[4]={0.0,3.0,3.0,0.0};
 static GLfloat lightpos1[4]={0.0,-3.0,3.0,0.0};
 static GLfloat lightamb1[4]={0.2,0.2,0.2,0.0};
 static GLfloat lightdif1[4]={1.0,1.0,1.0,1.0};
 static GLfloat lightape1[4]={1.0,1.0,1.0,1.0};
 glLightfv(GL_LIGHT0,GL_POSITION,lightpos0);
 glLightfv(GL_LIGHT1,GL_POSITION,lightpos1);
 glLightfv(GL_LIGHT1,GL_AMBIENT,lightamb1);
 glLightfv(GL_LIGHT1,GL_DIFFUSE,lightdif1);
 glLightfv(GL_LIGHT1,GL_SPECULAR,lightape1);
 glEnable(GL_LIGHTING);
 glEnable(GL_LIGHT0);
}
GLdouble get_secs()
{
 return glutGet(GLUT_ELAPSED_TIME)/500.0;
}
void display(void)
{
time=(GLfloat) get_secs();
glClear (GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
                    /*camera position and rotating*/
glTranslatef(Xmove,Ymove-1.0,Zmove-12.0);
glRotatef(Yrotate+10,1,0,0);
glRotatef(Xrotate+60,0,1,0);
                    /* draw sun */
glTranslatef (10.0, 0.0, 0.0);
glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,sun_col);
glutSolidSphere(1.2, 50, 50); 
GLfloat lightpos1[4]={10.0,0.0,0.0,0.0};
glLightfv(GL_LIGHT1,GL_POSITION,lightpos1);
glEnable(GL_LIGHT1);
                    /* draw the planets and their moons */
glPushMatrix();/* planet */
glRotatef (time*9+100, 0.0, 1.0, 0.0); 
glTranslatef (5.0, 0.0, 0.0);
glRotatef (time*500, 0.0, 1.0, 0.0);
glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,p_col);
glutSolidSphere(0.35, 50, 50);


glRotatef (time*250, 0.0, 1.0, 0.0);/*moon*/
glTranslatef (0.45, 0.0, 0.0);
glRotatef (time*200, 1.0, 1.0, 0.0);
glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,moon_col);
glutSolidSphere(0.05,50, 50); 
glPopMatrix();
glutSwapBuffers();
}
void keyboard (unsigned char key, int x, int y)
{
switch (key) 
{
 case 27:exit(1);break;
}
}


void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 100.0);
gluLookAt(0,0,4,0,0,0,0,1,0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}


void motion(int x,int y)
{
  Xrotate-=(x-Xprec)/2;Yrotate-=(y-Yprec)/2;
  Xprec=x;Yprec=y;
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 50);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutIdleFunc(display);
glutReshapeFunc(reshape);
glutMotionFunc(motion);
glutKeyboardFunc(keyboard);
glutFullScreen();
glutMainLoop();
return 0;
}

 

252203Sanstitre.png

تم تعديل هذه المشاركة بواسطة khatibe_30 في 14 أبريل 2013 في 14:21

[سبحان الله و بحمده, سبحان الله العظيم]

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…