资源简介
计算机图形学消隐实验源代码,详细、完整的实验代码
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#define pi 3.1415926
double angle1angle2;//定义全局变量,用于角度的输入
//按照顶点的编号存储顶点三个坐标
double X[8]={-300300300-300-300300300-300};
double Y[8]={-300-300-300-300300300300300};
double Z[8]={-300-300300300300300-300-300};
int fp[6][4]= //各个面的顶点(按照逆时针方向) 共6个面 8个顶点
{0761 //下
1652 //前
2543 //上
3470 //后
4567 //右
0123}; //左
float colors[6][3] = //定义颜色值
{0.00.00.0
1.00.00.0
1.01.00.0
0.01.00.0
0.00.01.0
1.00.01.0};
void x_Rotation(double angle)//将立方体绕x轴旋转angle度 x不变
{
int i;
double ab;
for(i=0;i<8;i++)
{
a=Y[i]*cos(angle)-Z[i]*sin(angle);
b=Y[i]*sin(angle)+Z[i]*cos(angle);
Y[i]=a;
Z[i]=b;
}
}
void y_Rotation(double angle)//将立方体绕y轴旋转angle度
{
int i;
double ab;
for(i=0;i<8;i++)
{a=X[i]*cos(angle)+Z[i]*sin(angle);
b=-X[i]*sin(angle)+Z[i]*cos(angle);
X[i]=a;
Z[i]=b;
}
}
void drawpixel(int t)//画可见面的中点
{
int ab;
double midXmidYmidZ;
glPointSize(15);
glColor3f (colors[t][0]colors[t][1]colors[t][2]); //t面的中间点的颜色
a=fp[t][0]; //选取对角线的两个点
b=fp[t][2];
midX=(X[a]+X[b])/2;
midY=(Y[a]+Y[b])/2;
midZ=(Z[a]+Z[b])/2;
glBegin(GL_POINTS);
glVertex3f(midXmidYmidZ); //画点
glEnd();
glFlush ( );
}
void drawline(double x1double y1double z1double x2double y2double z2)//画可见面的每条边
{
// glClearColor(1110); //为颜色缓冲区指定确定的值(redbluegreenalpha),默认都为0,当颜色缓冲区清空时使用
glColor3f (0.0 0.0 1.0);
glBegin(GL_LINES);
glVertex3f(x1 y1 z1); glVertex3f(x2 y2 z2); //指定线段的起点和终点
glEnd();
glFlush ( );
}
void func() //消影函数
{
int f[6]={012345};
int ia1a2a3abN3k;
x_Rotation(angle1); //先转一个初始角度
y_Rotation(angle2);
for(i=0;i<6;i++) //6个面
{
a1=fp[i]
- 上一篇:C语言实现表达式求值
- 下一篇:用Opengl实现日地月模型
评论
共有 条评论