我目前正在渲染一条很长的路径:
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]。
一直在努力解决这个问题,但没有成功。有什么建议么?
最佳答案
要跳过对象的渲染,您有几种方法:
A) 不要将它们放在 VBO 缓冲区中。
B) 将唯一的 glDrawArrays
调用拆分为多个调用,每个调用从缓冲区中的不同位置开始(glDrawArrays
的第二个参数)。
C) 为该图元设置特殊颜色(或其他属性)。如果着色器满足此颜色,丢弃片段(在片段着色器中)或不在几何着色器中发射顶点。
D) 正如@Rabbid76 建议的那样,使用索引绘图和原语重启。
关于c++ - OpenGL:跳过 GL_TRIANGLE_STRIP 中的每 n 个四边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49518802/