Opengl Vertex属性步幅

San*_*099 7 c++ rendering pointers opengl-es

嘿.我是OpenGL ES的新手,但我已经拥有了普通OpenGL的经验.我被告知,由于优化避免缓存未命中,使用隔行扫描数组作为顶点缓冲区要快得多.
我开发了一个顶点格式,我将使用它看起来像这样

struct SVertex
{
    float x,y,z;
    float nx,ny,nz;
    float tx,ty,tz;
    float bx,by,bz;
    float tu1,tv1;
    float tu2,tv2;
};

然后我使用了"glVertexAttribPointer(index,3,GL_FLOAT,GL_FALSE,stride,v);" 指向顶点数组.索引是我想要使用的属性之一,除了步幅之外,其他一切都没问题.在我决定将其添加到等式之前,它起作用了.我通过了尺寸(SVertex)和13*4这样的步幅,但它们似乎都没有效果.
如果它有任何重要性,我会画这样的原语

glDrawElements(GL_TRIANGLES,surface->GetIndexCount()/3,GL_UNSIGNED_INT,surface->IndPtr());
在OpenGL规范中写道,步幅应该是从属性末尾(在本例中为z)到同一类型的下一个属性(在本例中为x)的字节大小.所以通过我的计算,这应该是13(nx,ny,nz,tx,ty ...... tuv2,tv2)乘以4(浮点数的大小).
哦,还有一件事是显示器只是空的.
有人可以帮我这个吗?
非常感谢.

Kos*_*Kos 6

如果你有这样的结构,那么stride就是sizeof SVertex,它的每一个属性是相同的.这里没什么复杂的.

如果这不起作用,请在其他地方查找您的错误.

例如这里:

surface->GetIndexCount()/3

这个参数应该是顶点的数量,而不是要发送的基元 - 因此我认为这个除以三是错误的.保留为:

surface->GetIndexCount()