首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用三角形列表(OpenGL)细分BSpline面片

使用三角形列表(OpenGL)细分BSpline面片
EN

Stack Overflow用户
提问于 2013-07-08 00:19:21
回答 1查看 321关注 0票数 0

正如标题所描述的,我正在尝试使用三角形列表来镶嵌一个BSpline补丁。

这是我的补丁从前面的图像,看起来就像它应该的样子。

我的问题是补丁的后部,它提供了这样的效果:

正如您所看到的,前一行三角形正在连接到正在绘制的新行。我尝试了各种方法来避免这种情况,比如当索引值到达行尾时,将索引值增加1。我能找到的唯一快速解决方法是将每一行放在一个单独的循环中(使用循环范围,因为该行的大小),这根本不直观。

下面是绘制我的补丁的代码:

代码语言:javascript
复制
void drawBSplinePatch1(std::vector<int>& sample_elements_out, const int samples)
{
    for(int i = 0; i <= 379; i++)
    {
        // first triangle
        sample_elements_out.push_back(i);
        sample_elements_out.push_back(i + 1);
        sample_elements_out.push_back(i + samples);

        // second triangle
        sample_elements_out.push_back(i  + samples);
        sample_elements_out.push_back(i + 1);
        sample_elements_out.push_back(i + samples + 1);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-08 03:18:55

跳过每一行的一个四边形,例如这样。

代码语言:javascript
复制
for(int i = 0; i <= 379; i++)
{
    if (i % ROW_LENGTH != ROW_LENGTH - 1) {
      // first triangle
      sample_elements_out.push_back(i);
      sample_elements_out.push_back(i + 1);
      sample_elements_out.push_back(i + samples);

      // second triangle
      sample_elements_out.push_back(i  + samples);
      sample_elements_out.push_back(i + 1);
      sample_elements_out.push_back(i + samples + 1);
    }
}

不过,两个嵌套循环可能更具可读性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17513882

复制
相关文章

相似问题

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