資源簡介
計算機圖形學消隱實驗源代碼,詳細、完整的實驗代碼
代碼片段和文件信息
#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實現日地月模型
評論
共有 條評論