السلام عليكم
يا اخوان ساعدوني وهذه هي مشكلتي
انا طالب ادرس في امريكا وعندي مادة كمبيوتر جرافكس ، المهم استاذ المادة اعطانا برنامج على الفيجوال سي ++6 وطلب منا اضافة بعض التعديلات، وهي كالتالي:
يقوم البرنامج اصلا بتوليد اجسام صغيره "جزيئات" من اعلى الشاشة الى اسفل ،
طلب الاستاذ ان نقوم باضافة رسم شكل "مثال مربع دائرة الخ..." اسفل الشاشة بحيث تسقط الاجسام الصغيرة عليه ومن ثم تنعكس بانحراف يمينا او يسارا ،،،،
هل ممكن تساعدوني علما ان خبرتي هي جافا ولا اعرف شي في السي
مرفق مع هذا الملف الكود الخاص بالبرنامج ، واذا اردت تنفيذه يجب ان يكون لديك مكتبة ملفات Open Gl
وهي موجودة عندي وهي
glut.h /glut32.dll/glut.dll/glut32.lib/glut.lib
احمد ahmed996@yahoo.com
هذا هو كود البرنامج
#include
#include
#include
const ParticleTotal = 250;
int ActiveParticles=0;
int NewOnes=5;
int Front=0;
struct Particle
{ int age;
double x,y,z; //location
double dx,dy,dz; // movement vector
};
Particle PSys[ParticleTotal];
void InitParticle (int X, int Y, int Z, int Age, int MaxAngle, int Radius,
int Speed, int Tilt, Particle &P)
{ int AgeMin = Age/2;
P.age=Age/2+rand()%AgeMin; // age--->.5*age to age
double R = 1.0-((rand()%200)*.01);
P.x= R* Radius + X;
P.y = 1.0*Y;
double Alpha = R*MaxAngle *0.0175; // times pi/180 --->radians
double Beta = Tilt *0.0175;
double CosB = cos(Beta);
P.dy = (CosB*Speed*-1)/10;
P.dx = -(tan(Alpha)*P.dy);}
void ProcessParticle (double Grav, Particle &P) //.003 works
{ P.age--;
P.x = P.x + P.dx;
P.y = P.y + P.dy;
P.dy = P.dy + Grav;}
void Retire (int Loc)
{ for (int i= Loc; i< ActiveParticles;i++)
PSys = PSys[i+1];
--ActiveParticles;}
void DoParticles ()
{ int A;
int Spot = ActiveParticles;;
if (ActiveParticles+NewOnes
{ for (int j=0; j
{ InitParticle(150,60,0,100,45,5,5,0,PSys[spot]);
// x y z age angle rad speed tilt
++ActiveParticles;
++Spot;}}
if (ActiveParticles>0)
{ for (int i=0; i< ActiveParticles;i++)
{ A=PSys.age;
if (A<1)
Retire;
else
{ ProcessParticle(0.1,PSys); //gravity
}}}
/// just to slow things down ******************
for (int i=0; i<32000;i++)
{ for (int j=0; j<200;j++){ }}
///********************************************
glutPostRedisplay();}
void display()
{ glClear (GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
int Spot= Front;
for (int i=0;i
{ glBegin(GL_POINTS);
glColor3f(1.0,0.0,0.0);
glVertex2f(PSys.x,PSys.y);
glEnd();
if (Spot=ParticleTotal)
Spot= 0;
else
++Spot;
}
glutSwapBuffers();}
void init()
{ gluOrtho2D(0.0,300,300,0.0); //1-r-b-t
glPointSize(1);}
void main (int argc, char**argv)
{ glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(300,300);
glutInitWindowPosition(100,100);
glutCreateWindow("Particle System");
init();
glutIdleFunc(DoParticles);
glutDisplayFunc(display);
glutMainLoop();}