|
|
void Torus(float MinorRadius, float MajorRadius, float x, float y, float z)
{
int i, j;
glPushMatrix();
glTranslatef(x,y,z);
glRotatef(45, 1.0, 1.0, 1.0);
glTranslatef(0.0f,0.0f,zspeed); // 移入/移出屏幕 z 个单位
glRotatef(xrot,1.0f,0.0f,0.0f); // 绕X轴旋转
glRotatef(yrot,0.0f,1.0f,0.0f); // 绕Y轴旋转
glBegin( GL_QUAD_STRIP );
for (i=0; i<180; i++ )
{
for (j=0; j<361; j++) //把园环360等分
{
float wrapFrac = (j%360)/(float)360; // 把
float phi = PI2*wrapFrac; //计算等分 的 角度
float sinphi = float(sin(phi)); //
float cosphi = float(cos(phi));
float r = MajorRadius + MinorRadius*cosphi; //计算半径
glNormal3f(float(sin(PI2*(i%360+wrapFrac)/(float)360))*cosphi, sinphi, float(cos(PI2*(i%360+wrapFrac)/(float)360))*cosphi);
glVertex3f(float(sin(PI2*(i%360+wrapFrac)/(float)360))*r,MinorRadius*sinphi,float(cos(PI2*(i%360+wrapFrac)/(float)360))*r);
glNormal3f(float(sin(PI2*((i+1)%360+wrapFrac)/(float)360))*cosphi, sinphi, float(cos(PI2*((i+1)%360+wrapFrac)/(float)360))*cosphi);
glVertex3f(float(sin(PI2*((i+1)%360+wrapFrac)/(float)360))*r,MinorRadius*sinphi,float(cos(PI2*((i+1)%360+wrapFrac)/(float)360))*r);
}
}
glEnd();
xrot+=xspeed; // xrot 增加 xspeed 单位
yrot+=yspeed; // yrot 增加 yspeed 单位
glPopMatrix();
}
上面是一个圆环的代码,那位大侠帮我解释以下
主要是float r = MajorRadius + MinorRadius*cosphi; //计算半径
glNormal3f(float(sin(PI2*(i%360+wrapFrac)/(float)360))*cosphi, sinphi, float(cos(PI2*(i%360+wrapFrac)/(float)360))*cosphi);
glNormal3f(float(sin(PI2*((i+1)%360+wrapFrac)/(float)360))*cosphi, sinphi, float(cos(PI2*((i+1)%360+wrapFrac)/(float)360))*cosphi);
我觉得 float r = MajorRadius + MinorRadius*cosphi; //计算半径
计算出来不是等份圆环的半径
两个法向量是如何计算 |
|