计算机图形学第二次上机实验 课程实验报告
目录
一、实验目的
- 掌握配置glut库的步骤
- 测试运行示例代码
- 掌握并编写中点线算法和中点圆算法
二、实验环境
1.codeblocks-17.12
2.Windows10 SDK 10.0.17134.0
三、实验内容
- 绘制曲线
1. 证明如下的两条三次曲线段具有C1连续性,但没有G1连续性,并画出两条曲线段。
证明:
P11=[2t-2,3t2-4t=1],P21=[2t,3t2]
所以 P11|t=1=[0,0] , P21|t=0=[0,0]
所以P1,P2有C1连续,
因为[0,0]的方向不定,所以没有G1连续
实验结果
2. 假定一条三次Hermite曲线的两个端点P1=<0,1>,P4=<3,0>,端点处切向量R1=<0,1>,R4=<-3,0>,请写出Hermite多项式形式,并绘出最后曲线,改变切向量,观察曲线形状变化。
Hermite多项式形式为:
实验结果为
3. 已知4点P1(0,0,0)、P2(1,1,1)、 P3(2,-1,-1)、P4(3,0,0),用其作为特征多边形分别构造一条Bezier曲线、一条B样条曲线,并绘制出曲线。
Bezier曲线多项式:
结果为
B样条曲线多项式:
结果为
- 其它
- 编写程序,使一物体沿着一条直线匀速移动。
为实现显示中的视觉效果
需要添加gluPerspective和gluLookAt函数
具体代码如下:
gluPerspective(60,ratio,start,depth);//透视矩阵压入堆栈,进行透视变换,四个参数依次为,眼睛睁开角度、宽高比、前透视面距离、后透视面距离(填正值,但其实该透视体处于z负轴)
glEnable(GL_DEPTH_TEST);//开启更新深度缓冲区功能
gluLookAt(20,10,40,0,0,0,0,1,0);//相机从(0,10,40)看向(0,0,0,),(0,1,0)为正方向
glMatrixMode(GL_MODELVIEW);//投影变换完了进入绘图模式
- 编写程序,使一物体围绕屏幕上一点匀速旋转。
思想与第一问类似,结果如下
四,源代码
1.
#include "windows.h"
#include<glut.h>
typedef struct{
float x,y,z;
}Point;
//Point ctrlpoints[4]= { {-4.0,-4.0,0.0},{-2.0,4.0,0.0},{2.0,-4.0,0.0},{4.0,4.0,0.0}};
void init()
{
glClearColor(1.0,1.0,1.0,1.0);
}
void DrawCurve(int n)
{
Point p;
double t,deltat,t2,t3,et,et2,et3;
int i;
deltat = 1.0/(n-1);
glBegin(GL_LINE_STRIP);
for(i=0;i<100;i++)
{
t = i*deltat;
et = 1-t;
t2 = t*t;
et2 = et*et;
t3 = t*t2;
et3 = et*et2;
p.x=et2;
p.y=t3-2*t2+t;
p.z=0;
glVertex3f(p.x,p.y,p.z);
}
glEnd();
//glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0,1,0);
glBegin(GL_LINE_STRIP);
for(i=0;i<100;i++)
{
t=i*deltat