Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用三角形列表细分BSpline面片(OpenGL)_C++_Opengl_Bezier_Bspline - Fatal编程技术网

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

C++ 使用三角形列表细分BSpline面片(OpenGL),c++,opengl,bezier,bspline,C++,Opengl,Bezier,Bspline,正如标题所述,我正在尝试使用三角形列表细分BSpline面片 这是我前面补丁的一张图片,它看起来正是应该的样子 我的问题是补丁的后部,它产生了以下效果: 如您所见,前一行三角形连接到正在绘制的新行。我尝试了各种方法来避免这种情况,例如在索引值到达行的末尾时将其增加1。我能找到的唯一快速修复方法是将每一行放在一个单独的循环中(循环范围取决于该行的大小),这一点都不直观 以下是我的补丁的绘图代码: void drawBSplinePatch1(std::vector<int>&

正如标题所述,我正在尝试使用三角形列表细分BSpline面片

这是我前面补丁的一张图片,它看起来正是应该的样子

我的问题是补丁的后部,它产生了以下效果:

如您所见,前一行三角形连接到正在绘制的新行。我尝试了各种方法来避免这种情况,例如在索引值到达行的末尾时将其增加1。我能找到的唯一快速修复方法是将每一行放在一个单独的循环中(循环范围取决于该行的大小),这一点都不直观

以下是我的补丁的绘图代码:

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);
    }
}
void drawBSplinePatch1(标准::向量和样本元素,常量int样本)
{

对于(int i=0;i每行跳过一个四元组,例如,如下所示

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

for(int i=0;i)为什么对行和列使用单独的循环不直观?听起来很简单…?您可能应该发布循环如果你想让人们理解你的问题…这不仅仅是因为它不直观,我最终会得到超过100个循环,这最终会超过一个文件中允许的循环的限制。所以你没有嵌套循环?我希望这正好是两个嵌套循环。可能也会发布工作版本的一部分--这可能会允许p人们将展示如何以更紧凑的形式编写此内容。使用当前代码,很难猜出用于拆分行的正确索引。很抱歉,是的,循环是嵌套的,但我现在已使用下面发布的解决方案修复了它。这是我的第一篇文章,我将确保下次更具格式性。感谢您的帮助:)非常感谢!现在我已经绞尽脑汁了。NP。如果这对你来说很好,请考虑正确的回答。