首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >3D模型的均匀采样

3D模型的均匀采样
EN

Stack Overflow用户
提问于 2011-03-16 18:01:15
回答 1查看 1.9K关注 0票数 2

我正在寻找一种在C++中对3D模型的表面进行均匀采样的方法/算法。我已经找到了对单位球体进行均匀采样的方法,如thisthis,但我需要一些同样适用于更复杂的3D模型的方法,这些模型也可能是凹面的。提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-16 18:22:22

我做什么:我的模型由许多不同的图元组成(三角形,四边形,圆盘,柱面...)。对于每个原语,我可以实现一个随机挑选方法(例如http://mathworld.wolfram.com/TrianglePointPicking.html)。每个primitve都可以计算它的表面积。基元的面积越大,其生成随机点的概率就越高。在我的模型中,我构建了一个累积列表,如下所示

代码语言:javascript
复制
class Model{
  // ...
  vector<pair<double, Primitive*> > primitives_;
}

void Model::AddPrimitive(Primitive* p)
{
  double area = p->Area();
  if (!primitves_.empty())
    area += primitives_.back().first;
  primitives_.push_back(make_pair(area, p));
}

当我在模型上生成一个随机点时,我首先选择一个随机基元,然后在这个基元上选择一个随机点。

代码语言:javascript
复制
Point Model::RandomPoint()
{
  double maxArea = primitives_.back().first;
  double rnd = maxArea * Uniform01();  // random in [0; maxArea] 
  Iterator it = std::lower_bound(
        primitives_.begin(), primitives_.end(), rnd, FirstLess()); 
  return it->second->RandomPoint();    
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5323644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档