c++ - OpenGL:跳过 GL_TRIANGLE_STRIP 中的每 n 个四边形

标签 c++ opengl

我目前正在渲染一条很长的路径:

glDrawArrays(GL_TRIANGLE_STRIP, 0, 2000);

我将控制点传递给这样的 vbo:

for (unsigned int i = 0; i < lPoints.size() && i < rPoints.size(); ++i)
{
    if (i % 2 != 0)
    {
        vbo.AddData(&rPoints[i], sizeof(glm::vec3));
        vbo.AddData(&m_textCoords[i], sizeof(glm::vec2));
        vbo.AddData(&normal, sizeof(glm::vec3));
    }
    else
    {
        vbo.AddData(&lPoints[i], sizeof(glm::vec3));
        vbo.AddData(&m_textCoords[i], sizeof(glm::vec2));
        vbo.AddData(&normal, sizeof(glm::vec3));
    }
}

以下图为例。我现有的代码成功地将所有四边形绘制在一起形成一条路径。但我想要实现的是绘制一个四边形并按顺序跳过一个。 IE。绘制三角形 [v0, v1, v2] 和 [v2, v1, v3]。跳过 [v2、v3、v4] 和 [v4、v3、v5]。

Triangle Strip

一直在努力解决这个问题,但没有成功。有什么建议么?

最佳答案

要跳过对象的渲染,您有几种方法:

A) 不要将它们放在 VBO 缓冲区中。

B) 将唯一的 glDrawArrays 调用拆分为多个调用,每个调用从缓冲区中的不同位置开始(glDrawArrays 的第二个参数)。

C) 为该图元设置特殊颜色(或其他属性)。如果着色器满足此颜色,丢弃片段(在片段着色器中)或不在几何着色器中发射顶点。

D) 正如@Rabbid76 建议的那样,使用索引绘图和原语重启。

关于c++ - OpenGL:跳过 GL_TRIANGLE_STRIP 中的每 n 个四边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49518802/

相关文章:

c++ - 剔除点云中的受阻点

OpenGL 2.0 与 GL_ARB_vertex_program

c++ - 在 C++ 中声明常量时使用字符串值作为宽字符串

c++ - 对已定义函数的 undefined reference

c++ - 从函数应用创建 std::vector

opengl - nvEncRegisterResource() 失败并显示 -23

c - OpenGL - 顶点结构对齐到 32 字节?

c++ - 字母加密程序

C++11 多线程在神经网络中的性能非常低

c++ - OpenGL glfwGetVideoMode 导致段错误