和模板阴影有关的边缘检测

来源:互联网 发布:最新通达信软件 编辑:程序博客网 时间:2024/05/16 01:31
//这样写判断实在是太麻烦了 但用不了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循环,从头开始读,有点像冒泡。

 

不过自己在 判断边是否相等时候,用了 太多判断,例程上的判断好些

 

 

 

 

原创粉丝点击