سورس حوضچه آب با OpenGL به زبان C++
در این بخش سورس حوضچه آب با OpenGL را برای شما آماده کرده ایم که با استفاده از زبان برنامه نویسی C++ نوشته شده است. سورس کد این پروژه برای یاد گیری نحوه حرکت دادن دوربین، حرکت دادن اشیاء و همچنین رسم اشکال مختلف در OpenGL مناسب است. در ادامه می توانید توضیحات بیشتر و همچنین تصاویر مربوط به این برنامه را مشاهده کنید.
توضیحات پروژه
در این پروژه با استفاده از دستورات OpenGL یک حوضچه آبی طراحی می شود که در وسط آن یک فواره قرار دارد. این فواره به صورت متحرک طراحی شده است و می تواند آب را به طرف بالا پرتاب کند. کاربر هنگام اجرای شدن برنامه می تواند با استفاده از گزینه هایی که در منوی کلیک راست قرار دارد، رنگ آبی که از فواره بیرون می آید را تغییر دهد. همچنین امکان حرکت دادن دروبین در زوایای مختلف نیز وجود دارد.
برخی از توابع موجود در سورس کد این پروژه:
- تابع NormalKey: برای مدیریت کلید های فشرده شده توسط کاربر استفاده می شود.
- تابع DrawTextXY: برای درج متن مورد نظر در موقعیت مشخص شده استفاده می شود.
- تابع Display: برای نمایش اشیاء موجود در صفحه استفاده می شود.
- تابع CreateList: برای رسم حوضچه و آب موجود در آن استفاده می شود.
- تابع InitFountain: برای مقدار دهی اولیه برنامه استفاده می شود.
- تابع Randcolor: برای تنظیم رنگ تصادفی برای آب استفاده می شود.
قسمت های سورس پروژه:
#include <stdlib.h> //random function #include <gl\glut.h> //includes gl.h and glu.h #include <math.h> //sine and cosine functions #include <stdio.h> #include <string.h> #include <iostream> #define PI 3.14152653597689786 #define RandomFactor 2.0 #define ESCAPE 27 #define TEXTID 3 unsigned int i; int flag = 0, f = 2; int vflag = 0; GLfloat xt = 0.0, yt = 0.0, zt = 0.0; GLfloat xangle = 0.0, yangle = 0.0, zangle = 0.0; GLfloat X[3]; GLint ListNum; //The number of the diplay list GLfloat OuterRadius = 2.4; //reservoir GLfloat InnerRadius = 2.0; GLint NumOfVerticesStone = 6; // reservoir shape GLfloat StoneHeight = 0.5; GLfloat WaterHeight = 0.45; struct SVertex { GLfloat x, y, z; }; /////fountain/////////// class CDrop { private: GLfloat time; SVertex ConstantSpeed; GLfloat AccFactor; public: void SetConstantSpeed(SVertex NewSpeed); void SetAccFactor(GLfloat NewAccFactor); void SetTime(GLfloat NewTime); void GetNewPosition(SVertex * PositionVertex); //increments time, gets the new position }; void CDrop::SetConstantSpeed(SVertex NewSpeed) { ConstantSpeed = NewSpeed; } void CDrop::SetAccFactor(GLfloat NewAccFactor) { AccFactor = NewAccFactor; } void CDrop::SetTime(GLfloat NewTime) { time = NewTime; } void CDrop::GetNewPosition(SVertex * PositionVertex) { SVertex Position; time += 0.15; Position.x = ConstantSpeed.x * time; Position.y = ConstantSpeed.y * time - AccFactor * time * time; Position.z = ConstantSpeed.z * time; PositionVertex->x = Position.x; PositionVertex->y = Position.y + WaterHeight; PositionVertex->z = Position.z; if (Position.y < 0.0) { time = time - int(time); if (time > 0.0) time -= 1.0; } } void cover() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glClearColor(0, 0, 0, 0.0); glTranslatef(0.0, 0.0, -6.0); glTranslatef(0.0, -1.3, 0.0); glColor3f(1.00, 0.20, 0.10); glLoadName(TEXTID); DrawTextXY(-1.7, 3.5, 0.0, 0.001, " GRAPHICAL IMPLEMENTATION OF "); glColor3f(0.6, 0.8, 0.7); DrawTextXY(-1.75, 3, 0.0, 0.0014, " FLOWING FOUNTAIN "); DrawTextXY(-1, -1, 0.0, 0.0008, " Press any key... "); glFlush(); //Finish rendering glutSwapBuffers(); } void Dis() { if (f == 0) menu1(); else if (f == 1) menu2(); else if (f == 2) cover(); else Display(); } void Reshape(int x, int y) { if (y == 0 || x == 0) return; //Nothing is visible then, so return glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(50.0, (GLdouble)x / (GLdouble)y, 0.10, 20.0); glMatrixMode(GL_MODELVIEW); glViewport(0, 0, x, y); //Use the whole window for rendering glPointSize(GLfloat(x) / 600.0); }
نکات
- این پروژه در نرم افزار Visual Studio نسخه ۲۰۱۵ تست شده است و به خوبی کار می کند.
- به منظور اجرای پروژه های OpenGL باید آن را بر روی IDE خود نصب کنید.
- در صورت نا مفهوم بودن بخشی از کد، می توانید در قسمت نظرات مطرح کنید تا برای شما توضیح داده شود.
نوشته سورس حوضچه آب با OpenGL به زبان C++ اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.