嘿。
我是 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);”指向顶点数组。索引是我想要使用的属性之一,除了步幅之外其他一切都很好。在我决定将其添加到等式之前它就起作用了。我通过了 sizeof(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( float 的大小)。
哦,还有一件事是显示器是空的。
谁能帮我解决这个问题?
非常感谢。
最佳答案
如果您有这样的结构,那么 stride
就是 sizeof SVertex
并且每个属性都相同。这里没有什么复杂的。
如果这不起作用,请在其他地方查找您的错误。
例如这里:
surface->GetIndexCount()/3
此参数应该是要发送的顶点数,而不是基元数 - 因此我会说这个除以三是错误的。保留为:
surface->GetIndexCount()
关于c++ - Opengl 顶点属性跨度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4291271/