//这样写判断实在是太麻烦了 但用不了switch
//NEHE27 判断比较好
for (int i=0;i<11;i++)
{
for (int j=i+1;j<12;j++)
{
if (
(VertexEqu(ver[3*i],ver[3*j])&&VertexEqu(ver[3*i+1],ver[3*j+1]))||
(VertexEqu(ver[3*i+1],ver[3*j])&&VertexEqu(ver[3*i],ver[3*j+1]))||
(VertexEqu(ver[3*i],ver[3*j])&&VertexEqu(ver[3*i+1],ver[3*j+2]))||
(VertexEqu(ver[3*i+1],ver[3*j])&&VertexEqu(ver[3*i],ver[3*j+2]))||
(VertexEqu(ver[3*i],ver[3*j+1])&&VertexEqu(ver[3*i+1],ver[3*j+2]))||
(VertexEqu(ver[3*i+1],ver[3*j+1])&&VertexEqu(ver[3*i],ver[3*j+2]))||
(VertexEqu(ver[3*i],ver[3*j])&&VertexEqu(ver[3*i+2],ver[3*j+1]))||
(VertexEqu(ver[3*i+2],ver[3*j])&&VertexEqu(ver[3*i],ver[3*j+1]))||
(VertexEqu(ver[3*i],ver[3*j])&&VertexEqu(ver[3*i+2],ver[3*j+2]))||
(VertexEqu(ver[3*i+2],ver[3*j])&&VertexEqu(ver[3*i],ver[3*j+2]))||
(VertexEqu(ver[3*i],ver[3*j+1])&&VertexEqu(ver[3*i+2],ver[3*j+2]))||
(VertexEqu(ver[3*i+2],ver[3*j+1])&&VertexEqu(ver[3*i],ver[3*j+2]))||
(VertexEqu(ver[3*i+1],ver[3*j])&&VertexEqu(ver[3*i+2],ver[3*j+1]))||
(VertexEqu(ver[3*i+2],ver[3*j])&&VertexEqu(ver[3*i+1],ver[3*j+1]))|| ///明明是与第五个三角形匹配的,
(VertexEqu(ver[3*i+1],ver[3*j])&&VertexEqu(ver[3*i+2],ver[3*j+2]))||
(VertexEqu(ver[3*i+2],ver[3*j])&&VertexEqu(ver[3*i+1],ver[3*j+2]))||
(VertexEqu(ver[3*i+1],ver[3*j+1])&&VertexEqu(ver[3*i+2],ver[3*j+2]))||
(VertexEqu(ver[3*i+2],ver[3*j+1])&&VertexEqu(ver[3*i+1],ver[3*j+2]))
)
{
if (!plan_Index[i]._a)
{
plan_Index[i]._a=j+1;
if (plan_Index[j]._a==0)
{
plan_Index[j]._a=i+1;
}
else if (plan_Index[j]._b==0)
{
plan_Index[j]._b=i+1;
}
else if(plan_Index[j]._c==0)
{
plan_Index[j]._c=i+1;
}
}
else if (!plan_Index[i]._b)
{
plan_Index[i]._b=j+1;
if (plan_Index[j]._a==0)
{
plan_Index[j]._a=i+1;
}
else if (plan_Index[j]._b==0)
{
plan_Index[j]._b=i+1;
}
else if(plan_Index[j]._c==0)
{
plan_Index[j]._c=i+1;
}
}
else if(!plan_Index[i]._c)
{
plan_Index[i]._c=j+1;
if (plan_Index[j]._a==0)
{
plan_Index[j]._a=i+1;
}
else if (plan_Index[j]._b==0)
{
plan_Index[j]._b=i+1;
}
else if(plan_Index[j]._c==0)
{
plan_Index[j]._c=i+1;
}
}
}
// }
}
}
CString str,str1,str2,str3;
// for (int i=0;i<3;++i)
// {
str1.Format("%d",plan_Index[0]._a);
str2.Format("%d",plan_Index[0]._b);
str3.Format("%d",plan_Index[0]._c);
str=str1+str2+str3;
::MessageBox(0, str, 0, 0);
//
// }
}
关键的是 求出每个三角形三边的临边三角形(的索引),这样 再用 灯光的位置连线 求出乘积小于0的点即是边缘点,
详细可参考 NEHE27课,
求临边三角形的话, 笨方法就是 两for循环,从头开始读,有点像冒泡。
不过自己在 判断边是否相等时候,用了 太多判断,例程上的判断好些