gpt4 book ai didi

java - OpenGL Interleaved VBO 跨步和偏移

转载 作者:行者123 更新时间:2023-11-29 07:08:23 25 4
gpt4 key购买 nike

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

这就是我存储顶点和颜色数据的方式:

渲染四边形:

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

现在如您所见,我的目标是使用交错的 VBO,但我不知道步幅和偏移量。

这是我在渲染时的调用:

(注意我使用的是映射的 vbos,这就是没有实际数据绑定(bind)的原因):

        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());

我无法获得正确的偏移量和步幅,所以当我渲染时我看到了这个奇怪的人工制品..

最佳答案

步幅是两个元组之间的距离,偏移量是从 0 到第一个元组的第一次出现之间的距离

例如,对于每个位置有 3 个 float 的三角形,然后正常有 3 个 float 的三角形,它看起来像这样

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(假设你的顶点颜色直接在顶点位置之后)

对于颜色指针,偏移量将是 (GLvoid*) (sizeof(float)*3) 作为第一个颜色三元组之前的三个 GLfloats

这一切都假设你的交错数组是这样构建的

VVVCCCVVVCCCVVVCCC 等等

对于使用仅具有顶点和法线信息以及面的模型的 C++ 中非常简单的示例,您可以查看以下代码:http://www.incentivelabs.de/Sourcecode/OpenGL10.zip

关于java - OpenGL Interleaved VBO 跨步和偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17000110/

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