当前位置:文档之家› 广东财经大学实习报告格式

广东财经大学实习报告格式

实习报告
学院:信息学院
专业:计算机科学与技术
班级:计算机2班
姓名:马梓亮
指导教师:沈永骆
提交日期:2016年10月31日广东财经大学教务处制
姓名马梓亮实习报告成绩
评语:
指导教师(签名)
年月日说明:指导教师评分后,实习报告交院(系)办公室保存。

OpenVG自编测试动态程序实现
目录
一、概述 (1)
1.1项目背景 (1)
1.2研究方案 (1)
1.3环境配置 (1)
二、实施方案 (1)
2.1方案架构 (1)
2.2功能模块 (2)
2.2.1主函数 (2)
2.2.2直线函数 (2)
2.2.3圆弧函数 (2)
2.2.4贝赛尔曲线函数 (2)
2.2.5标识点函数 (2)
2.2.6转动函数 (2)
三、实施内容 (2)
3.1原算法概述 (2)
3.1.1渲染背景颜色 (2)
3.1.2作出直线 (2)
3.1.3作出圆弧 (3)
3.1.4作出贝赛尔曲线 (3)
3.2修改算法概述 (4)
3.2.1循环嵌套 (4)
3.3关键实施步骤 (6)
3.3.1循环嵌套作出动态效果 (7)
3.3.2调用函数修改标识点位置作出旋转效果 (7)
四、实验结果 (7)
五、总结 (8)
参考文献 (9)
一、概述
1.1项目背景
OpenVG环境开发测试,以实现画面动态显示效果。

1.2研究方案
通过利用开源openVG及其API开发出可运行的动态视图程序。

[1] 1.3环境配置
Windows7、Visual studio、AlexVG。

二、实施方案
2.1方案架构
2.2功能模块
2.2.1主函数
int AppDisplay(void)
作用:渲染背景颜色,调用作图函数,返回显示图像。

2.2.2直线函数
void drawLine(void)
作用:作出一段或多段连续线段。

2.2.3圆弧函数
void drawQuad(void)
作用:作出一段圆弧。

2.2.4贝赛尔曲线函数
void drawCurve(void)
作用:做出一段贝赛尔曲线。

2.2.5标识点函数
vgTranslate(,);
作用:标识图像的起始点。

2.2.6转动函数
vgRotate(x*x)
作用:使辖域内图像绕标识点旋转。

三、实施内容
3.1原算法概述
3.1.1渲染背景颜色
VGfloat color[4]={0.7f,0.6f,0.8f,0.8f};
vgSetfv(VG_CLEAR_COLOR,4,color);
3.1.2作出直线
void drawLine(void)
{
VGPath path;
VGubyte segments[]={VG_MOVE_TO_ABS,VG_HLINE_TO_REL, VG_LINE_TO_REL};
VGfloat coords[]={10.0f,10.0f,0.0f,0.0f,-20.0f};
path=vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F,1.0f,0.0f,0,0,VG_PATH_CAPABILITY_ALL);
vgAppendPathData(path,3,segments,coords);
vgDrawPath(path,VG_STROKE_PATH);
vgDestroyPath(path);
}
3.1.3作出圆弧
void drawQuad(void)
{
VGPath path;
VGubyte segments[]={VG_MOVE_TO_ABS,VG_QUAD_TO_REL};
VGfloat coords[]={0.0f,0.0f,10.0f,20.0f,20.0f,0.0f};
path=vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F,1.0f,0.0f,0,0,VG_PATH_CAPABILITY_ALL);
vgAppendPathData(path,2,segments,coords);
vgDrawPath(path,VG_STROKE_PATH);
vgDestroyPath(path);
}
3.1.4作出贝赛尔曲线
void drawCurve(void)
{
VGPath path;
VGubyte segments[]={VG_MOVE_TO_ABS, VG_CUBIC_TO_REL,VG_CUBIC_TO_REL,VG_CUBIC_TO_REL,};
VGfloat coords[]={0.0f,0.0f,5.0f,10.0f,10.0f,10.0f,15.0f,0.0f, 5.0f,-10.0f,10.0f,-10.0f,15.0f,0.0f};
path=vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F,5.0f,0.0f,0,0,VG_PATH_CAPABILITY_ALL);
vgAppendPathData(path,3,segments,coords);
vgDrawPath(path,VG_STROKE_PATH);
vgDestroyPath(path);
}
3.2修改算法概述
3.2.1循环嵌套
sum=1000;
x=30.0f;
y=1.5f;
while(sum>0)
{
sum=sum-1;
x=x+0.05f;
y=y*1.001;
vgClear(0,0,SCREEN_WIDTH,SCREEN_HEIGHT);
vgLoadIdentity();
vgSeti(VG_STROKE_CAP_STYLE,VG_CAP_ROUND);
vgSetf(VG_STROKE_LINE_WIDTH,5.0f);
vgTranslate(300.0f,300.0f);
drawCurve();
vgRotate(x*x);//转动、转速
#if TRIANGLE
vgTranslate(50.0f,0.0f);
drawTriangle();
#elif RECTANGLE
vgTranslate(50.0f,0.0f);
drawRectangle();
#elif ROUND_RECTANGLE
vgTranslate(50.0f,0.0f);
drawRoundRectangle();
#elif QUAD
vgTranslate(50.0f,0.0f);
drawQuad();
#elif CURVE
vgTranslate(50.0f,0.0f);
drawCurve();
#elif ARC
vgTranslate(50.0f,0.0f);
drawArc();
#elif ELLIPSE
vgTranslate(50.0f,0.0f);
drawEllipse();
#elif PIE
vgTranslate(50.0f,0.0f);
drawPie();
#elif STAR
vgTranslate(30.0f,-10.0f);
drawQuad();
drawLine();
vgTranslate(70.0f,0.0f);
drawQuad();
drawLine();
#endif
if(vgGetError()==VG_NO_ERROR) eglSwapBuffers(display,surface);
}
return1;
}
3.3关键实施步骤
3.3.1循环嵌套作出动态效果
while(sum>0)
{
sum=sum-1;
x=x+0.05f;
y=y*1.001;
vgClear(0,0,SCREEN_WIDTH,SCREEN_HEIGHT);
vgLoadIdentity();
vgSeti(VG_STROKE_CAP_STYLE,VG_CAP_ROUND);
vgSetf(VG_STROKE_LINE_WIDTH,5.0f);
vgTranslate(300.0f,300.0f);
drawCurve();
…….
}
3.3.2调用函数修改标识点位置作出旋转效果
vgRotate(x*x);
四、实验结果
最终作出两个顶着圆弧的直线旋转穿过贝塞尔曲线的动态效果。

五、总结
通过本次实习实践,我初步了解了有关OpenVG及其API的基本函数功能,以及直线、圆弧、贝赛尔曲线等图像的构造原理。

能够制作出简单的动态图像程序,基本完成了本次实习任务目标。

但是,对于贝塞尔曲线中动态
顶点算法以及渲染过程中反锯齿效果优化的研究仍有很大的进步空间,需要日后更加深入的探究学习。

参考文献
[1]HUONE.How to program OpenVG[M].beijing:HUONE,2006.4。

相关主题