gpt4 book ai didi

c++ - 3D模型的均匀采样

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:59:00 27 4
gpt4 key购买 nike

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

最佳答案

我的工作:我的模型由许多不同的图元组成(三角形、四边形、圆盘、圆柱体……)。对于每个基元,我可以实现一个随机选择方法(例如 http://mathworld.wolfram.com/TrianglePointPicking.html )。每个基元都可以计算其表面积。图元的面积越大,其生成随机点的概率就越高。在我的模型中,我构建了一个这样的累积列表

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));
}

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

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();
}

关于c++ - 3D模型的均匀采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5323644/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com