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

OpenGL交织VBOs步长和偏移

曹焱
2023-03-14

我正在制作这个程序,需要渲染彩色四分形。我正在使用VBOs为此。

这就是我如何存储顶点和颜色的数据:

 buff.put(3 floats color)
 render the quad (3 floats per vertex * 4 per face * 6 per quad) 

以下是我在渲染时的调用:

(注意im使用映射的vbos,这就是为什么没有实际的数据绑定):

        glBindBufferARB(GL_ARRAY_BUFFER_ARB, etn.getVboHandel());
        glBufferDataARB(GL_ARRAY_BUFFER_ARB, etn.getVboData().capacity() << 2, GL_STATIC_DRAW_ARB);

        glColorPointer(3, GL_FLOAT, /* stride **/6 << 2, /* offset **/0); 
        glVertexPointer(3, GL_FLOAT, /* stride **/6 << 2, /* offset **/0);

        glDrawArrays(GL_QUADS, 0,  etn.getVboData().capacity());    

我不能得到偏移和步幅是正确的,所以当我渲染时,我看到这个奇怪的工件…

共有1个答案

东方权
2023-03-14

步幅是两个元组之间的空间,偏移量是0和第一个元组第一次出现之间的空间

例如,三角形每个位置有3个浮动,然后法线有3个浮动,看起来像这样

glVertexAttribPointer(0,3, GL_FLOAT, GL_FALSE, 24, 0);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1,3, GL_FLOAT, GL_FALSE, 24, (GLvoid*) (sizeof(float)*3));
glEnableVertexAttribArray(1);

因此,您的顶点指针的偏移量为0(假设前三个条目是位置),步幅为24(假设您的顶点颜色直接位于顶点正负之后)

对于一个非常简单的C++示例,您可以查看以下代码:http://www.incentivelabs.de/sourcecode/opengl10.zip

 类似资料:
  • 我有一个Kafka消费者,我从它消费数据从一个特定的主题,我看到下面的例外。我使用的是Kafka版本。 我添加了这两个额外的消费者属性,但仍然没有帮助: 那个错误意味着什么?我该如何解决它?我需要添加一些其他消费者属性吗?

  • 有人能解释一下这里出了什么问题吗。我猜这是有偏移和步幅的东西,但是... 顶点包含位置结构和2个浮点,颜色结构和4个GLubyte和Tex结构和2个浮点。 如果我用这段代码替换它,它工作得很好。

  • 我有一个关于Kafka自动提交机制的问题。我正在使用启用自动提交的Spring-Kafka。作为一个实验,我在系统空闲(主题中没有新消息,没有正在处理的消息)的情况下,将我的消费者与Kafka的连接断开了30秒。重新连接后,我收到了如下几条消息: 第一,我不明白有什么好犯的?系统空闲(所有以前的消息都已提交)。第二,断开时间为30秒,比max.poll.interval.ms的5分钟(300000

  • 我目前正在从具有特定偏移量的主题中获取消息。我正在使用寻求()来实现它。但是当我将enable.auto.commit设置为true或使用手动同步(委托同步()/委托同步())时,Seek()不起作用,因为它没有轮询来自特定偏移量的消息,而是从最后提交的偏移量中选择。 因此,在使用Seek()时,是否必须将偏移量存储在外部DB中,而不提交给Kafka?Seek和Commit不能并行工作吗? 客户端

  • 我目前的方法是用所有粒子填充一个数组(称为vertexData),这样数组的结构将是:[particle,particle,particle,...],其中每个粒子都有上面给出的布局。 我的计划是简单地将初始信息提供给顶点着色器,然后让它根据初始信息计算位置偏移量和颜色。我希望大多数的计算是在GPU上完成的。 我想通过将所有数据放在一个缓冲区对象中来传递数据到着色器,然后使用偏移量来获取正确的值来

  • 问题内容: 我在理解同步关键字功能时遇到了一些麻烦。根据Java文档和其他教程,可以说,当使用synced关键字时,在两个线程之间不可能在该方法的语句之间进行交织。 但是,请参见下面的代码。 据我了解,程序输出应始终以线程0和线程1不应交错的方式进行。但是多次执行这段代码后,我得到了交错输出。 请帮助我理解问题。 提前致谢.. 问题答案: 的关键字防止两个线程运行的是在同一对象上同步代码。 您的每