gpt4 book ai didi

c++ - 具有每个面颜色的 glDrawElements

转载 作者:行者123 更新时间:2023-11-30 02:20:43 29 4
gpt4 key购买 nike

我正在使用 glDrawElements 绘制索引网格:

voi

d init()
{
//allocate vbo, copy actual data (m_indices,m_vertices).
//m_indices is a vector of mx3 indices of the facet.
//m_vertices is nx6 xyzrgb vertex points
m_vBuff.create();
m_iBuff.create();

m_vBuff.setUsagePattern(QOpenGLBuffer::StaticDraw);
m_iBuff.setUsagePattern(QOpenGLBuffer::StaticDraw);

m_vBuff.bind();
m_vBuff.allocate(m_vertices.data(), int(m_vertices.size() * sizeof(VertData)));
m_vBuff.release();

m_iBuff.bind();
m_iBuff.allocate(m_indices.data(), int(m_indices.size() * sizeof(uint32_t)));
m_iBuff.release();
}

和用法:

    ...
m_vBuff.bind();
m_iBuff.bind();
//define attribute which can be used in the shader
int vp = shader->attributeLocation("a_xyz");
shader->enableAttributeArray(vp);
shader->setAttributeBuffer(vp, GL_FLOAT, 0, 3, sizeof(VertData));


int vc = shader->attributeLocation("a_rgb");
shader->enableAttributeArray(vc);
shader->setAttributeBuffer(vc, GL_FLOAT, 3 * sizeof(float), 3, sizeof(VertData));


glDrawElements(GL_TRIANGLES, m_iBuff.size() / sizeof(uint32_t), GL_UNSIGNED_INT, NULL);

m_vBuff.release();
m_iBuff.release();

m_vBuff 中的数据是按 s.t. 组织的。我可以在着色器中有一个属性per vertex。如何添加每面的颜色数据?

最佳答案

the data in m_vBuff is organuzed s.t. I can have an attribute in the shader per vertex. How can I add color data which is per facet?

可以考虑三种不同的策略:

  1. 正确复制顶点数据。

  2. flat 插值限定符和激发顶点的使用:如果您将 varyings 限定为 flat,则数据将不会插值到图元中,但来自单个顶点的数据将用于整个图元。从中获取数据的顶点称为 激发顶点,您可以通过 glProvokingVertex() 在不同的约定之间进行选择。 .如果您有顶点 A、B、C、D 和 E 以及三角形 ABC、BCD 和 CDE,并将逐顶点颜色作为 flat 转发给片段着色器,并使用例如使用GL_FIRST_VERTEX 约定,则第一个三角形将获得 A 的颜色,第二个三角形将使用 B 的颜色,依此类推。此策略仅在一定程度上有效,不适用于任意网格,因为单个顶点可能连接到三个以上的三角形。该策略仍可用于减少选项 1 中出现的重复量。

  3. 将每个面的数据放入其他存储并使用 gl_PrimitiveID片段着色器输入作为该存储的索引。根据您需要的存储量(以及您的目标 GL 版本),Uniform Buffer Object , Texture Buffer ObjectShader Storage Buffer Object似乎最合适。

关于c++ - 具有每个面颜色的 glDrawElements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49391820/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com