求助 关于向量问题

msgrev 2007-04-25 01:20:35
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; //计算半径
计算出来不是等份圆环的半径

两个法向量是如何计算
...全文
221 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
msgrev 2007-04-26
  • 打赏
  • 举报
回复
还是不明白是那两个向量的叉积

我分析了半天

觉得 r = MajorRadius + MinorRadius*cosphi不是园环边上的那个园桶的半径

那位大侠说详细点

谢谢楼上的计算法向量的方法.
syy64 2007-04-25
  • 打赏
  • 举报
回复
// ¼ÆËã·¨ÏßÏòÁ¿¡£ 2003.1.3.
void WINAPI CalNormal(CPoint3D &pt3D1, CPoint3D &pt3D2, CPoint3D &pt3D3,CPoint3D &pTemp)
{
CPoint3D pt1,pt2;
pt1 = pt3D2 - pt3D1;
pt2 = pt3D3 - pt3D1;
pTemp.x = pt1.y * pt2.z - pt1.z * pt2.y;
pTemp.y = pt1.z * pt2.x - pt1.x * pt2.z;
pTemp.z = pt1.x * pt2.y - pt1.y * pt2.x;

double fNormalLenght = sqrt( pTemp.x * pTemp.x + pTemp.y * pTemp.y + pTemp.z * pTemp.z);
if( fNormalLenght != 0)
pTemp *= 1/fNormalLenght;
else
{
pTemp.x = 0.0;
pTemp.y = 0.0;
pTemp.z = 1.0;
}
return;
}
msgrev 2007-04-25
  • 打赏
  • 举报
回复
法向量就是两个向量的叉积???

是那两个向量的叉积?

一般情况下法向量是怎么计算的?
syy64 2007-04-25
  • 打赏
  • 举报
回复
float r = MajorRadius + MinorRadius*cosphi感觉是园环边上的那个园桶的半径;
法向量就是两个向量的叉积。

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧