其他分享
首页 > 其他分享> > CSU计算机图形学关键代码

CSU计算机图形学关键代码

作者:互联网

抛物面的计算(顶点坐标)(不变)(具体原理不理解,背下即可)

#define PI2 2*3.14159
#define DELTA_R 0.5
double surfVertices[36][10][3];
void ComputerParabolicSurface(){
    for(int a = 0; a<36; a++){    //a表示角度,36等分
        // DELTA是单位长度      (DELTA*r)是极坐标里的r
        // PI2/36.0 是单位角度    a*PI2/36.0 角度转化为弧度
        //填空 三行代码
        surfVertices[a][r][0] = (DELTA*r)*cos(a*PI2/36.0);
        surfVertices[a][r][1] = (DELTA*r)*sis(a*PI2/36.0);
        surfVertices[a][r][2] = (DELTA*r)*(DELTA*r);
    }
}

法向量的计算(法向量)

void Normal(double a[3], double b[3], double c[3], double n[3]){
    double p[3],q[3];   //两个矢量
    double len;
    for(int k = 0; k<3; k++){
        // 两个矢量 尾->头
        p[k] = b[k] - a[k];
        q[k] = c[k] - a[k];
    }

    //填空
    //计算法向量n   (算叉积,行列式)
    n[0] = p[1]*q[2] - p[2]*q[1];
    n[1] = p[2]*q[0] - p[0]*q[2];
    n[2] = p[0]*q[1] - p[1]*q[0];

    //单位化法向量n
    double t = n[0]*n[0] + n[1]*n[1] +n[2]*n[2];   //x^2+y^2+k^2
    t = sqrt(t);   //开平方获得单位矢量的长度
    //获得单位法向量
    for(int i = 0; i<3; i++){
        n[i]/=t;
    }
}

注册函数

glutCreatWindow(argv[0]){
    //发出两个消息
    //窗口大小改变,调用reshape:视口变换,做投影,模型视图矩阵变成单位矩阵
    //重绘:调用repaint和display

    //向操作系统注册函数 , 做消息映射(如果有...消息,就调用...)
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutMouseFunc(mouse);
    glutKeyboardFunc(keyboard);
}

法向量的计算

标签:调用,int,double,代码,图形学,reshape,CSU,向量,define
来源: https://www.cnblogs.com/Acapplella/p/14279455.html