【问题标题】:glDrawElementsInstanced fps drop on first primitiveglDrawElementsInstanced fps 在第一个基元上下降
【发布时间】:2015-05-27 05:51:41
【问题描述】:

我正在尝试沿 x 和 z 轴渲染多个立方体。由于有很多立方体,它们只是位置不同,我想我会使用 glDrawElementsInstanced。它工作得很好,但是当引擎渲染第一个立方体(在原点)时,我的 fps 下降了。 我认为它在彼此之上绘制多个立方体,这可能导致在同一位置多次绘制相同的三角形,我试图不使用 gl_InstanceID == 0 渲染第一个块,但它仍然在绘制它。

这是我的问题的插图: 这里我有 21 FPS:当我靠近第一个立方体时。

在这里,因为我很远,所以我有 60 fps(当我离原来的距离像 5 个立方体时,我得到 60 fps):

这是我的顶点着色器:

layout (location = 0) in vec3 position; 
layout (location = 1) in vec3 offset; 

void main(void){
    vec4 pos = u_transform * vec4(position, 1); 
    pos += vec4(offset.x, 0, offset.z, 0); 
    gl_Position = u_projectionMatrix * u_viewMatrix * pos;  
}

我通常用索引绘制立方体,如果你愿意,我可以把代码放在这里。 谢谢。

我有解决办法,我稍后再贴出来

【问题讨论】:

    标签: opengl 3d


    【解决方案1】:

    正如你自己所说,他似乎多次渲染立方体。表示您的实例化数据设置可能有问题。

    尝试渲染更少的立方体或尝试跳过实例(请参阅下面的链接)以锁定问题。您也可以尝试手动输入一些实例数据以查看导致问题的原因。

    跳过某些实例的渲染实例:glDrawElementsInstancedBaseVertexBaseInstance

    【讨论】:

    • 我使用了 glDrawElementsInstancedBaseVertexBaseInstance 并跳过了第一个,没有任何改变。然后我尝试跳过前五个基元,它在第一个基元之后跳过了四个基元。跳过索引没有任何改变。我真的认为它是在每个实例的原点绘制立方体。也许我的代码有问题,我编辑了我的帖子以包含它,你能看看吗?顺便谢谢你!
    • @R00t 是的,但我猜一些顶点的偏移数据可能是错误的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多