سورس حوضچه آب با OpenGL به زبان C++

۱۳۹۷-۰۹-۲۷
سورس حوضچه آب با OpenGL به زبان C++ در این بخش سورس حوضچه آب با OpenGL را برای شما آماده کرده ایم که با استفاده از زبان برنامه نویسی C++ نوشته شده است. سورس کد این پروژه برای یاد گیری نحوه حرکت دادن دوربین، حرکت دادن اشیاء و همچنین رسم اشکال مختلف در OpenGL مناسب است. در ادامه می توانید توضیحات ...

pond simulator in openglusing cpp 5116 سورس حوضچه آب با OpenGL به زبان C++

سورس حوضچه آب با OpenGL به زبان C++

در این بخش سورس حوضچه آب با OpenGL را برای شما آماده کرده ایم که با استفاده از زبان برنامه نویسی C++ نوشته شده است. سورس کد این پروژه برای یاد گیری نحوه حرکت دادن دوربین، حرکت دادن اشیاء و همچنین رسم اشکال مختلف در OpenGL مناسب است. در ادامه می توانید توضیحات بیشتر و همچنین تصاویر مربوط به این برنامه را مشاهده کنید.

توضیحات پروژه

در این پروژه با استفاده از دستورات OpenGL یک حوضچه آبی طراحی می شود که در وسط آن یک فواره قرار دارد. این فواره به صورت متحرک طراحی شده است و می تواند آب را به طرف بالا پرتاب کند. کاربر هنگام اجرای شدن برنامه می تواند با استفاده از گزینه هایی که در منوی کلیک راست قرار دارد، رنگ آبی که از فواره بیرون می آید را تغییر دهد. همچنین امکان حرکت دادن دروبین در زوایای مختلف نیز وجود دارد.

برخی از توابع موجود در سورس کد این پروژه:

  • تابع NormalKey: برای مدیریت کلید های فشرده شده توسط کاربر استفاده می شود.
  • تابع DrawTextXY: برای درج متن مورد نظر در موقعیت مشخص شده استفاده می شود.
  • تابع Display: برای نمایش اشیاء موجود در صفحه استفاده می شود.
  • تابع CreateList: برای رسم حوضچه و آب موجود در آن استفاده می شود.
  • تابع InitFountain: برای مقدار دهی اولیه برنامه استفاده می شود.
  • تابع Randcolor: برای تنظیم رنگ تصادفی برای آب استفاده می شود.

pond simulator in openglusing cpp 5116 1 سورس حوضچه آب با OpenGL به زبان C++

قسمت های سورس پروژه:

#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++ اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.