OpenGL 画圆球

来源:互联网 发布:淘宝花呗分期手续费 编辑:程序博客网 时间:2024/04/20 19:57

OpenGL 画圆球

只需要两个点,然后使用GL_TRIANGLE_STRIP(按顺序依次组成三角形)方式画三角形就可以了
从上至下,一圈一圈往下计算
球面点计算公式

//    x=x0+r sinθcosφ//    y=y0+r sinθsinφ//    z=z0+r cosθ

θ为yz平面

GLfloat * calculateBallVertex(GLfloat r){//    x=x0+r sinθcosφ//    y=y0+r sinθsinφ//    z=z0+r cosθGLfloat radius = 0.8 * r;// GLfloat delta = 2 * M_PI / 100;GLfloat *dest = (GLfloat *) malloc(sizeof(GLfloat) * 2 * kRow * kCol * 3);GLfloat k = kHeight * 1.0 / kWidth;float step_z = M_PI / kRow ;  //z方向每次步进的角度(上下,纬度)float step_xy = 2*M_PI/ kCol;  //x,y平面每次步进的角度(经度)float x[2],y[2],z[2];  //用来存坐标float angle_z = 0; //起始角度float angle_xy = 0;int i=0, j=0;// 90 -->  -90for(i = 0; i < kRow; i++){angle_z = i * step_z;  //每次步进step_zfor(j = 0; j < kCol ; j++){// j++;angle_xy = j * step_xy;  //每次步进step_xy//整个的过程可以想象3D打印机,一层一层的画出来x[0] = k * radius * sin(angle_z) * cos(angle_xy);  //第一个小平面的第一个顶点坐标y[0] = radius * sin(angle_z) * sin(angle_xy);z[0] = radius * cos(angle_z);x[1] = k * radius * sin(angle_z + step_z) * cos(angle_xy);  //第一个小平面的第二个顶点坐标,下面类似y[1] = radius * sin(angle_z + step_z) * sin(angle_xy);z[1] = radius * cos(angle_z + step_z);//整个的过程可以想象3D打印机,一层一层的画出来//            x[0] = k * radius * cos(angle_z) * sin(angle_xy);  //第一个小平面的第一个顶点坐标//            y[0] = radius * sin(angle_z);//            z[0] = radius * cos(angle_z) * cos(angle_xy);//            //            x[1] = k * radius * cos(angle_z + step_z) * sin(angle_xy);  //第一个小平面的第一个顶点坐标//            y[1] = radius * sin(angle_z + step_z);//            z[1] = radius * cos(angle_z + step_z) * cos(angle_xy);//至此得到一个平面的3个顶点for(int k=0; k<2; k++){    dest[i * kCol * 2 * 3 + j * 2 * 3 +  k*3+0] = x[k];    dest[i * kCol * 2 * 3 + j * 2 * 3 +  k*3+1] = y[k];    dest[i * kCol * 2 * 3 + j * 2 * 3 +  k*3+2] = z[k];}} //循环画出这一层的平面,组成一个环}  //z轴++,画出剩余层return dest;}

旋转的球

原创粉丝点击