实验一 opengl高级图形图像实验报告文档格式.docx
- 文档编号:17700795
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:22
- 大小:464.36KB
实验一 opengl高级图形图像实验报告文档格式.docx
《实验一 opengl高级图形图像实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《实验一 opengl高级图形图像实验报告文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
5.分形
在完成前面工作的基础上,引入分形的递归算法,通过绘制小的三角形动作,生成Sierpinski镂垫。
二、实验步骤解析
1.首先用vc6.0新建一个支持MFC的工程,把附件所给的空窗口的源代码拷贝到工程里,运行,显示一个空窗。
如图1。
2.将附件2提供的源码代替上一步骤中的Drawsence()函数,运行窗口中显示出一个三角形和一个正方形,如图2。
3.修改上述程序,实现画两个点,线段,矩形,如图3。
4.改变上一个步骤中的线宽,画出不同宽度的线段。
如图4。
5.将附件3提供的源代码代替上一步骤中的Drawsence()函数,运行窗口中显示缩放,平移,旋转的三角形和正方形。
如图5。
6.修改上述程序,用矩阵方法实现平移,缩放和旋转。
如图6。
7.修改上述程序,用参数方法实现平移、旋转和缩放,并添加颜色。
如图7,图8。
8.将附件viewport.cpp代替上述程序中的Drawsence()函数,实现同一窗口中的视口变换和多视口显示。
如图9。
9.修改上述程序,实现同一窗口中的视口变换和多视口显示。
如图10。
10.在完成前面工作的基础上,引入分形的递归算法,通过绘制小的三角形动作,生成Sierpinski镂垫。
如图11。
3、编程思路及实现
1.空窗程序
这个程序运行后给出一个黑色背景的空窗,在DrawGLScene函数中,不写任何图形绘制的代码,仅仅进行初始设置。
设置F1键的功能为跳出全屏窗口。
intDrawGLScene(GLvoid)//从这里开始进行所有的绘制
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
//清除屏幕和深度缓存
glLoadIdentity();
//重置当前的模型观察矩阵
returnTRUE;
//一切OK
}
2.画三角形和正方形
画三角形调用glBegin(GL_TRIANGLES)函数,函数中只要指定三个点即可。
接着在三角形右侧3个单位距离处画正方形,用glBegin(GL_QUADS),需要四个点。
intDrawGLScene(GLvoid)//
//清除屏幕及深度缓存
//重置当前的模型观察矩阵
glTranslatef(-1.5f,0.0f,-6.0f);
//左移1.5单位,并移入屏幕6.0
glBegin(GL_TRIANGLES);
//绘制三角形
glVertex3f(0.0f,1.0f,0.0f);
//上顶点
glVertex3f(-1.0f,-1.0f,0.0f);
//左下
glVertex3f(1.0f,-1.0f,0.0f);
//右下
glEnd();
//三角形绘制结束
glTranslatef(3.0f,0.0f,0.0f);
//右移3单位
glBegin(GL_QUADS);
//绘制正方形
glVertex3f(-1.0f,1.0f,0.0f);
//左上
glVertex3f(1.0f,1.0f,0.0f);
//右上
//正方形绘制结束
//继续运行
3.画点,线段,矩形
画点是最基础的绘制,使用glBegin(GL_POINTS)函数。
由于单独一个点非常小,我们渲染成原来的5倍大小,用函数glPointSize(5.0f)。
画线段用glBegin(GL_LINES),线段加粗用函数glLineWidth(5.0f)。
画长方形与画正方形一样,只是用函数glBegin(GL_POLYGON)。
//画点,线,矩型
intDrawGLScene(GLvoid)//Here'
sWhereWeDoAllTheDrawing
glPointSize(5.0f);
//画两个点
glBegin(GL_POINTS);
glVertex2f(0.0f,0.0f);
glVertex2f(1.0f,0.0f);
glLineWidth(5.0f);
glBegin(GL_LINES);
//画线段
glVertex2f(2.0f,0.0f);
glVertex2f(3.0f,0.0f);
glBegin(GL_POLYGON);
//按顺时针绘制一个长方形,在右上方
glVertex2f(0.0f,1.0f);
glVertex2f(0.0f,1.5f);
glVertex2f(1.0f,1.5f);
glVertex2f(1.0f,1.0f);
//继续运行
4.改变线段的宽度
根据上个步骤,画出几条粗细不同的线段,互为对比。
//改变宽度
glVertex2f(2.0f,1.0f);
glEnd();
glLineWidth(8.0f);
glLineWidth(12.0f);
glVertex2f(0.0f,-1.0f);
glVertex2f(2.0f,-1.0f);
5.平移,缩放,旋转
平移使用函数glTranslatef(3.0f,1.0f,0.0f),把当前矩阵和一个表示移动物体的矩阵相乘。
三个参数分别是向x,y,z方向平移的距离。
这个函数要用在绘制函数之前。
缩放使用函数glScalef(1.5f,0.5f,0.0f),把当前矩阵和一个表示缩放物体的矩阵相乘。
三个参数分别是x,y,z方向上的缩放倍数。
旋转用函数glRotatef(rtri,0.0f,1.0f,0.0f),把当前矩阵和一个表示旋转物体的矩阵相乘。
物体将绕着(0,0,0)到(x,y,z)的直线以逆时针旋转,参数rtri表示旋转的角度。
//平移,缩放和旋转
GLfloatrtri;
//用于三角形的角度
GLfloatrquad;
//用于四边形的角度
//重置模型观察矩阵
//左移1.5单位,并移入屏幕6.0
//绘制三角形
glColor3f(1.0f,0.0f,0.0f);
//设置当前色为红色
//上顶点
//glColor3f(0.0f,1.0f,0.0f);
//设置当前色为绿色
//左下
//glColor3f(0.0f,0.0f,1.0f);
//设置当前色为蓝色
//右下
//三角形绘制结束
glScalef(1.5f,0.5f,0.0f);
//三角形缩放
glTranslatef(2.0f,1.0f,0.0f);
//三角形向x方向移动1个单位
glRotatef(rquad,1.0f,0.0f,0.0f);
//绕X轴旋转四边形
//绘制正方形
//左上
//右上
//正方形绘制结束
rtri+=0.2f;
//增加三角形的旋转变量
rquad-=0.15f;
//减少四边形的旋转变量
//继续运行
6.矩阵方法实现平移,缩放和旋转
{
GLfloatmoveMatrix[]=
{
1.0f,0.0f,0.0f,0.0f,
0.0f,1.0f,0.0f,0.0f,
0.0f,0.0f,1.0f,0.0f,
-1.5f,0.0f,-6.0f,1.0f
};
GLfloatrotateYMatrix[]=
{
cos(rtri),0.0f,-sin(rtri),0.0f,
0.0f,1.0f,0.0f,0.0f,
sin(rtri),0.0f,cos(rtri),0.0f,
0.0f,0.0f,0.0f,1.0f
GLfloatmoveMatrix1[]=
1.5f,0.0f,-6.0f,1.0f
GLfloatrotateXMatrix1[]=
1.0f,0.0f,0.0f,0.0f,
0.0f,cos(rquad),-sin(rquad),0.0f,
0.0f,sin(rquad),cos(rquad),0.0f,
0.0f,0.0f,0.0f,1.0f
glMatrixMode(GL_MODELVIEW);
glMultMatrixf(moveMatrix);
//左移1.5单位,并移入屏幕6.0
glMultMatrixf(rotateYMatrix);
//glColor3f(1.0f,0.0f,0.0f);
glMultMatrixf(moveMatrix1);
//右移1.5单位,并移入屏幕6.0
glMultMatrixf(rotateXMatrix1);
//绕X轴旋转四边形
//glColor3f(0.5f,0.5f,1.0f);
//一次性将当前色设置为蓝色
rtri+=0.005f;
rquad-=0.005f;
7.用参数方法平移、缩放和旋转三角形
//用参数方法平移、缩放和旋转三角形
//用于三角形旋转的角度,需设为全局变量
//用于四边形旋转的角度,需设为全局变量
//左下
glRotatef(rtri,3.0f,0.0f,0.0f);
//绕x轴旋转三角形
glColor3f(0.0f,0.0f,1.0f);
glVertex3f(3.0f,1.0f,0.0f);
glVertex3f(1.5f,0.0f,0.0f);
glVertex3f(4.5f,0.0f,0.0f);
8.视口变换和多视口显示
voidrenderGL2()
//视口一左下角
glEnable(GL_SCISSOR_TEST);
glScissor(0,0,window_width/2-1,window_height/2-1);
glDisable(GL_SCISSOR_TEST);
glViewport(0,0,window_width/2-1,window_height/2-1);
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0f,(GLfloat)window_width/(GLfloat)window_height,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);
//绘制部分
glTranslatef(0.0f,0.0f,-5.0f);
glRotatef(rtri,0.0f,1.0f,0.0f);
//绘制一个三角锥
glBegin(GL_TRIANGLE_STRIP);
glColor3f(1.0,0.0,0.0);
glVertex3f(0.0,1.0,0.0);
glColor3f(0.0,1.0,0.0);
glVertex3f(-1.0,-1.0,1.0);
glColor3f(0.0,0.0,1.0);
glVertex3f(1.0,-1.0,1.0);
glVertex3f(1.0,-1.0,-1.0);
//视口二左上角
glScissor(0,window_height/2+1,window_width/2-1,window_height/2-1);
glViewport(0,window_height/2+1,window_width/2-1,window_height/2-1);
//绘制部分
glColor3f(1.0f,0.0f,1.0f);
glTranslatef(0.0f,0.0f,-9.0f);
glRotatef(rtri,1.0,1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验一 opengl高级图形图像实验报告 实验 opengl 高级 图形图像 报告