如图,为什么WPF绘制的圆柱有缝隙?
------解决方案--------------------------------------------------------
大神在哪里?
------解决方案--------------------------------------------------------
该回复于2012-05-22 09:36:41被版主删除
------解决方案--------------------------------------------------------
该回复于2012-05-22 09:36:54被版主删除
------解决方案--------------------------------------------------------
wpf就是一垃圾。blend就是垃圾中的垃圾。干嘛用这个东东。
------解决方案--------------------------------------------------------
需求需求啊!会的来哦!不会的帮顶下!XX
------解决方案--------------------------------------------------------
为什么这么说?
------解决方案--------------------------------------------------------
帮忙解决问题啊!尽说些么用的,唉、
------解决方案--------------------------------------------------------
没有代码怎么知道。也许人家就是希望有个缝呢。
------解决方案--------------------------------------------------------
废话不说,上代码!
public GeometryModel3D GetGeometry3D(Point3D p1, Point3D p2, double R, Brush color)
{
GeometryModel3D Geomodel = new GeometryModel3D();
Geomodel.BackMaterial = new DiffuseMaterial(color);
Geomodel.Material = new DiffuseMaterial(Brushes.Black);
Geomodel.Geometry = GenerateCylinderMesh(p1, p2, R);//
return Geomodel;
}
public MeshGeometry3D GenerateCylinderMesh(Point3D p1, Point3D p2, double R)
{
//将圆柱体进行三角形剖分
//空间中圆的参数方程:(x,y,z) = r*(A*cosθ+B*sinθ)+(x0,y0,z0) 【0≤θ≤2π】
//其中 a、b 是单位向量,且满足 A⊥B⊥n(圆的法向量)
MeshGeometry3D mesh = new MeshGeometry3D();
mesh.Normals = new Vector3DCollection();//如何得到
Vector3D CircleVector = p2 - p1; //从p1点到p2点的3D向量
Vector3D M = new Vector3D(1, 1, 1);
if (Vector3D.AngleBetween(M, CircleVector) < 1)
{
M = new Vector3D(1, 0, 0);
}
Vector3D A = Vector3D.CrossProduct(CircleVector, M);
Vector3D B = Vector3D.CrossProduct(CircleVector, A);