当前位置: 首页 > 知识库问答 >
问题:

有没有一种方法可以使用vbo在Opengl中使用单个输入值而不是统一的?

茅桐
2023-03-14

我不确定我的问题是否足够清楚,所以这里有解释:我正在使用opengl开发体素引擎,它工作正常,但我想通过一些优化来改进它。我开始对立方体的顶点使用VBO,我获得了一些fps,所以这很好。但是现在我想用立方体的颜色做同样的事情,我没有找到一个让我满意的答案,因为我需要一些细节:

>

  • 我只使用3个浮点数作为颜色,所以即使它工作glVertex AttribPointer()似乎也不是一个好方法,因为如果我使用它,我需要使用108个浮点数来对抗3个立方体。

    我想画很多立方体,所以使用glUniform3f也不好,因为如果要画很多立方体,每个立方体发送3个浮点值会非常慢。

    因此,在上下文中,我的问题是,有没有一种方法可以将值存储在GPU的内存中(比如VBO),当我绘制立方体时,我只会告诉着色器这些值在哪里?

    感谢阅读,可能会回答:)

  • 共有1个答案

    谭畅
    2023-03-14
    glVertexAttribDivisor(attribute, 1)
    

    告诉OpenGL#属性每个基本体(而不是每个顶点)有一个值。如果将数字从1增加到N,则每N个基本体可以有1个值。用于一次性指定颜色(或其他任何颜色),而不是重复指定。

    此外,glDrawArraysInstanced/GLDrawerElementsInstanced可能有用。这两种方法都会N次绘制一组点/线/三角形,在着色器中,您可以使用gl#u InstanceID作为整数,该整数将计算立方体/任意值#0、#1、…

    希望这能有所帮助

     类似资料:
    • 问题内容: 假设我有以下代码: 这段代码的问题在于,协程内部的循环永远不会完成第一次迭代,而大小会不断增加。 为什么会这样发生,我该怎么解决? 我无法摆脱单独的线程,因为在我的真实代码中,我使用了单独的线程与串行设备进行通信,而且我还没有找到使用的方法。 问题答案: 不是线程安全的,因此您不能直接在多个线程中直接使用它。相反,您可以使用,它是提供线程感知队列的第三方库: 还有(全披露:我写了它),

    • 问题内容: 嗨,我想使用WMI类来查找应用程序和产品信息。但是问题是我想使用Java或任何脚本语言(如python,javascript或perl)。我听说过JWMI,这可能是一个选择。有人可以帮我吗??? 问题答案: JavaScript和Java不是一回事。 JavaScript Windows脚本宿主(WSH)下提供了JavaScript。有了它,访问WMI相当容易: jWMI(Java)

    • 但我对它并不完全满意,主要有两个原因 我“滥用”了函数。在Stream API中,每个函数都有其明确、明确的用途:被认为是计算最大值,被认为是根据条件进行筛选,被认为是生成增量累加的值,等等。 这样做会阻止我使用Streams强大的机制:如果我想将搜索限制在前两个结果上怎么办? 这里我使用了,因为(据我所知)它是唯一一个允许比较两个值的函数,而这些值可以在某种程度上导致类似于“当前值”和“下一个值

    • 我真的想知道是否有一种方法可以只从该方法获得另一个方法的值。因为在main方法中,第一个方法已经被调用,而第二个方法需要第一个方法输入的值。 静态int first_Method(int num){ //第二种方法 静态void second_method(){

    • 问题内容: 我有一个Jcheckbox,但只有勾号显示了它的选中状态,有没有一种方法可以将其更改为十字形或圆形?并且有一种方法可以将灰色背景更改为白色,setBackground似乎没有什么不同? 问题答案: 用户setPressedIcon,setIcon和setDisabledIcon

    • 问题内容: 我正在建立一个带有flask的网站,其中用户具有帐户并能够登录。我正在使用flask-principal作为登录部分和角色管理。有没有办法让用户的会话在5分钟或10分钟后过期?我在flask文档或flask-principal文档中找不到该文件。 我想到了一种手动方法,在登录时在服务器端设置一个带有时间标签的变量,并在用户执行下一个操作时,服务器会验证该时间戳记上的时间增量并删除会话。