计算机图形学曲线曲面
北方工业大学
计算机图形学课程实验报告
题 目:实验五 曲线曲面学 院:计算机学院专 业:数字媒体技术指导教师:蔡兴泉学生班级:学生学号:学生姓名:教师评定:
实验报告5 曲线曲面
一.实验目的
1.熟悉OpenGL图形库;
2.掌握曲线曲面实现算法。
二.实验环境
1.软件环境:
操作系统:WinXp
应用软件:VC6.0,OpenGL
2.硬件环境(查看自己的机子)
CPU: Intel PIV 2.80GHz
内存RAM: 1GB
显卡:NVIDIA GeForce7650,256M显存
三.实验内容
1. 写程序实现Bezier曲线
2. 写程序实现绘制3个半径不同、颜色不同的小球
3. 写程序实现一个场景,绘制1个立方体、1个圆锥、1个圆柱、1个茶壶
四.程序及结果
1. Bezier曲线实现关键程序及注释
void RenderScene(void)
{
int i;
glClear(GL_COLOR_BUFFER_BIT) //设置贝塞尔曲线
glMap1f(GL_MAP1_VERTEX_3, //生成的数据类型
0.0f,//u值的下界
100.0f,/ //u值的上界
3,//顶点在数据中的间隔,x,y,z所以间隔是3 nNumPoints,//u方向上的阶,即控制点的个数
&ctrlPoints[0][0]);//指向控制点数据的指针
glEnable(GL_MAP1_VERTEX_3);// //必须在绘制顶点之前开启
glBegin(GL_LINE_STRIP); //使用画线的方式来连接点
for(i = 0; i <= 100; i++)
{
glEvalCoord1f((GLfloat) i); //求的点坐标
}
glEnd();
DrawPoints();//画点
glutSwapBuffers();/ /交换两个缓冲区指针
}
2. 小球绘制实现关键程序及注释
void RenderScene(void)
{
GLUquadricObj *pObj;// 定义Quadric Object
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清屏
glPushMatrix();//矩阵状态
glTranslatef(0.0f, -1.0f, -5.0f);
glRotatef(xRot, 1.0f, 0.0f, 0.0f);//
glRotatef(yRot, 0.0f, 1.0f, 0.0f);
pObj = gluNewQuadric();//创建一个新的二次曲面状态对象
gluQuadricNormals(pObj, GLU_SMOOTH);//
glPushMatrix();
glColor3f(1.0f, 1.0f, 1.0f); //定义颜色为白
glTranslatef(0.0f, 1.0f, 0.0f);//圆心坐标
gluSphere(pObj, .3f, 26, 13); // 绘制小球半径为0.3
glPopMatrix();
glPushMatrix();
glColor3f(1.0f, 0.0f, 0.0f);//定义颜色为红
glTranslatef(0.0f, 0.0f, 0.0f); // 圆心坐标
gluSphere(pObj, .5f, 26, 13);//绘制小球半径为0.5
glPopMatrix();//
glPushMatrix();//
glColor3f(0.0f, 0.0f, 0.0f);// 定义颜色为黑
glTranslatef(0.0f, 2.0f, 0.0f); // 圆心坐标
gluSphere(pObj, 0.2f, 26, 13);// 绘制小球半径为0.2
glPopMatrix();
glPopMatrix();//恢复矩阵状