如何解决行进立方体 - 网格中的孔
我正在从事计算图形的大学项目,我已经按照 http://paulbourke.net/geometry/polygonise/ 的指导方针实现了行进立方体算法。 当我在没有线性插值的情况下测试算法时,我得到一个没有孔的等值面,当我对边缘使用插值时,我在等值面上有一些孔,例如:
这里是线性插值的代码
public PVector LinearInterp(PVector p1,PVector p2,int valp1,int valp2)
{
double mu;
PVector p= new PVector();
if(compare(p2,p1))
{
PVector temp;
temp=p1;
p1=p2;
p2=temp;
}
if(abs(valp1-valp2)>0.00001)
{
p.x=p1.x+((p2.x-p1.x)/(valp2-valp1)*(isovalue-valp1));
p.y=p1.y+((p2.y-p1.y)/(valp2-valp1)*(isovalue-valp1));
p.z=p1.z+((p2.z-p1.z)/(valp2-valp1)*(isovalue-valp1));
}
else
p=p1;
return p;
}
public boolean compare(PVector p1,PVector p2)
{ // p1 < p
if(p1.x<p2.x)
return true;
else if(p1.x > p2.x)
return false;
if(p1.y<p2.y)
return true;
else if(p1.y > p2.y)
return false;
if(p1.x<p2.x)
return true;
else if(p1.z > p2.z)
return false;
return false;
}
public PVector LinearInterp(PVector p1,int valp2)
{
PVector p= new PVector();
p.x = p1.x;
p.y = p1.y;
p.z = p1.z;
float val=0;
if(p1.x != p2.x)
{
val = p2.x + (p1.x - p2.x) * (isovalue-valp2)/(valp1-valp2);
p.x=val;
}else if(p1.y!=p2.y)
{
val = p2.y + (p1.y-p2.y)*(isovalue-valp2)/(valp1-valp2);
p.y=val;
}
else
{
val=p2.z+(p1.z-p2.z)*(isovalue-valp2)/(valp1-valp2);
p.z=val;
}
return p;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。