计算机图形学上机报告
- 格式:doc
- 大小:142.00 KB
- 文档页数:8
计算机图形学上机实验报告—
计算机科学与技术学院
】
【
班级:
学号:
姓名:
指导教师:
完成日期:
|
实验一:基本图元绘制
一. 实验目的
1. 了解如何利用OpenGL库绘制图形
:
2. 理解glut程序框架
3. 理解窗口到视区的变换
4. 理解OpenGL实现动画的原理
二. 实验内容
,
1. 实现中点Bresenham算法画直线
2. 实现改进Bresenham算法画直线
3. 实现圆的绘制
三. 实验结果
¥
算法画直线
2. 中点Bresenham算法画直线
>
3. 改进Bresenham算法画直线
4. Bresenham算法画圆
|
四. 源程序
#include <>
&
#include <gl/>
#include ""
int m_PointNumber = 0; 实验目的1. 理解OpenGL中的变换过程
|
2. 理解透视投影与平行投影的不同
3. 了解深度测试
二. 实验内容
1. 通过变换调整观察的位置与方向]
2. 实现太阳、地球和月亮的运动模型
三. 实验结果
太阳、地球和月亮的运动模型
图1.
$
|
/
图2. ~
图3.
:
四. 源程序
#include <>
#include <gl/>
#include <gl/>
…
#include <gl/>
void Initial()
{
glEnable(GL_DEPTH_TEST); // 启用深度测试
(
glFrontFace(GL_CCW); // 指定逆时针绕法表示多边形正面
glClearColor, , , ); //背景为白色
}
{
void ChangeSize(int w, int h)
{
if(h == 0) h = 1;
// 设置视区尺寸
;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
…
// 设置修剪空间
GLfloat fAspect;
fAspect = (float)w/(float)h;
gluPerspective, fAspect, , ;
/*
}
if (w <= h)
glOrtho (-nRange, nRange, nRange*h/w, -nRange*h/w, -nRange*, nRange*;
else
glOrtho (-nRange*w/h, nRange*w/h, nRange, -nRange, -nRange*, nRange*; */
》
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
)
void RenderScene(void)
{
// 绕原子核旋转的角度
static float fElect1 = ;
static float f2=;
…
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// 重置模型视图矩阵
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
$
//将图形沿z轴负向移动
glTranslatef, , ;
// 绘制红色的原子核
*
glColor3f, , ;
glutSolidSphere, 15, 15);
// 当前绘制颜色变为黄色
glColor3f, , ;
<
//绘制第一个电子
//保存当前的模型视图矩阵
glRotatef(fElect1, , , ;//绕y轴旋转一定的角度
"
glTranslatef, , ;//平移一段距离
glutSolidSphere, 15, 15);//画出电子
// 恢复矩阵
!
// 第二个电子
glPushMatrix();
glRotatef, , , ;
glRotatef(f2, , , ;
'
glTranslatef, , ;
glutSolidSphere, 15, 15);
glPopMatrix();
/* // 第三个电子
glPushMatrix();
!
glRotatef,, , ;
glRotatef(fElect1, , , ;
glTranslatef, , ;
glutSolidSphere, 15, 15);
glPopMatrix();
*/
// 增加旋转步长
fElect1 += ;
f2=fElect1*6;
if(fElect1 > {
fElect1 = ;
}
glutSwapBuffers();
}
void TimerFunc(int value)
{
glutPostRedisplay();
glutTimerFunc(100, TimerFunc, 1);
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutCreateWindow("日地月模型");
glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScene);
glutTimerFunc(500, TimerFunc, 1);
Initial();
glutMainLoop();
return 0;
}。