我目前正在用以下方法绘制一条很长的路:
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));
}
}
以下面的图片为例。我现有的代码成功地将所有四边形绘制在一起形成一条路径。但是我想要实现的是绘制一个四边形,然后按顺序跳过一个四边形。即绘制三角形[v0,v1,v2]和[v2,v1,v3]。跳过[v2,v3,v4]和[v4,v3,v5]。
一直在破解这一点,但没有成功。有什么建议么?
最佳答案
要跳过对象的呈现,您有几种方法:
A)不要将它们放在VBO缓冲区中。
B)将唯一的glDrawArrays
调用拆分为多个调用,每个调用都从缓冲区中的不同位置开始(glDrawArrays
的第二个参数)。
C)为该图元设置特殊的颜色(或其他属性)。如果着色器满足此颜色,则丢弃片段(在片段着色器中)或不在几何体着色器中发射顶点。
D)如@ Rabbid76建议的那样,使用索引图和原始重启。
关于c++ - OpenGL:跳过GL_TRIANGLE_STRIP中的每n个四边形,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49518802/