程序代写代做代考 关键是这句话:

关键是这句话:

也就是你除了实例代码外,不需要看任何的关于openGL的相关资料。你的任务就是利用多态实现各种图形的绘制,这些图形的定义是用.txt(文本文件)定义的。你需要读取这些文本文件,生成相应的四类对象(多边形,圆,变换,缩放)。
你还要过载操作符,比如<<,图形定义文件的读写 下面我给出程序的整体框架: · 类的定义 class Shape //此为抽象类 { public: Shape(void) {} virtual void draw(void) = 0; virtual bool ReadShape(ifstream& in) = 0; //参数是你打开的图形定义的文件流,请看看 }; class Translator : public Shape { private: float position[3]; //变换的坐标值 public: Translator()::Shape() {} //参数为空,因为需要从文件中读取 virtual void draw(void) { glTranslatef(position[0], position[1], position[2]); } virtual bool ReadShape(ifstream& in) { //从文件中读取该图形的参数 //具体的代码请自己写 } }; class Scalor : public Shape { private: float scale[3]; //变换的坐标值 public: Scalor()::Shape() {} //参数为空,因为需要从文件中读取 virtual void draw(void) { glScalef(scale[0], scale[1], scale[2]); } virtual bool ReadShape(ifstream& in) { //从文件中读取该图形的参数 //具体的代码请自己写 } }; class Polygon : public Shape { private: int colour[3]; int num_vert; float* vertex[3];//这个数组(注意,是二维数组)根据动态生成,存放多边形的各个定点坐标 virtual void draw(void) { glColor3f(colour[0], colour[1], colour[2]); glBegin(GL_LINE_LOOP); for(int i = 0; i < num_vert; i++) { glVertex3f(vertex[i][0], vertex[i][1], vertex[i][2]); } glEnd(); } }; class Circle : public Polygon { private: int colour[3]; float radius; int num_segments; float* vertex[3];//这个数组(注意,是二维数组)根据动态生成,存放多边形的各个定点坐标 virtual void draw(void) { glColor3f(colour[0], colour[1], colour[2]); glBegin(GL_LINE_LOOP); //画圆:可能是根据定义的分段数,计算出每个分段的坐标,然后画线 for(int i = 0; i < num_segments; i++) { //计算起点终点坐标 //画线 //算法请自己编写 } glEnd(); } }; · 改写main函数,实现从文件中读取图形的配置,生成一个图形对象列表(请考虑使用单链表实现) //公共变量,存放文件中定义的图形列表 vectorshpaes;
int main(int argc, char** argv) // Create Main Function For Bringing It All Together
{
//从参数中的到要打开的文件名
//读取文件内容,生成以上定义的各种图形,保存在一个集合shpaes中
window w(argc, argv);
return 0;
}

· 定义了以上类结构后,改写原来给出的draw函数:
void draw(void)
{
//遍历shapes集合,绘制图形
//注:此处我使用foreach,只是为了好写,c++不支持foreach,你理解后修改
foreach(Shape* pShape in shapes)
{
pShapge->draw();
}
}

· 从文件中读取图形数据,题目要求你要使用overloaded operators,请查阅相关书籍实现,我实在没有时间去详细写了
注:以上是作业制作的思路,所用的语法等并不完全符合C++,请斟酌使用