【问题标题】:Multiple base vertex per instanced draw每个实例绘制多个基础顶点
【发布时间】:2013-06-14 23:09:06
【问题描述】:

我正在寻找一种方法来执行 glDrawElementsInstancedBaseVertex,但每个实例使用不同的基础顶点。

基本上我必须渲染很多具有不同模型空间坐标的立方体(边界框)。 每个立方体都有自己的 modelToCamera 矩阵,该矩阵通过实例化数组属性传递给顶点着色器。

问题是我有一个要渲染的 16 个索引的列表,每个立方体都相同,除了它们的 baseVertex 部分,我想在一次绘制调用中渲染每个立方体,而不需要 16 * numberOfCube 索引.

那么有没有办法改变每个实例的 baseVertex 呢?

【问题讨论】:

    标签: opengl


    【解决方案1】:

    不,你不能那样做。此外,在您的情况下也没有理由想要这样做。如果每个立方体都有自己的“模型空间坐标”并且它自己的“modelToCamera 矩阵”......那么你就有了冗余信息。

    所有立方体都彼此相似。一个立方体和另一个立方体之间的唯一区别在于它的变换:缩放、旋转、平移。您可以获取一个单位立方体并对其应用变换以将其变成任何其他立方体。

    由于您对每个立方体应用不同的变换,因此所有立方体可能只是一遍又一遍重复的相同初始顶点。

    但是,不要指望这会给您带来很大的性能提升;对像立方体这样的微小对象进行实例化通常没有多大帮助。

    【讨论】:

    • 问题是我不对立方体做任何变换,它们是直接用其他网格的边界框创建的。但我想我可以创建一个矩阵,将单位立方体转换为边界框大小,所以我不需要进行实例绘图。谢谢。
    • @user2039813: "我不对立方体做任何变换" 那你为什么要给它们传递一个矩阵呢?
    • 我的意思是我不做任何从通用立方体网格到模型空间位置的转换。它们是用这些位置直接创建的,一劳永逸。然后我需要每帧应用从模型到相机空间的转换。这个矩阵每个立方体都是唯一的,因为它们都有自己的分层场景图的转换。但是感谢您的建议,我现在创建了从单位立方体到边界框大小的转换,然后将其与 modelToCamera 矩阵组合,并发送到实例化绘图调用。所以它现在有效。你帮了我很多:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 2020-09-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多