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(浮点数的大小).
如果你有这样的结构,那么stride就是sizeof SVertex,它的每一个属性是相同的.这里没什么复杂的.
如果这不起作用,请在其他地方查找您的错误.
例如这里:
surface->GetIndexCount()/3
这个参数应该是顶点的数量,而不是要发送的基元 - 因此我认为这个除以三是错误的.保留为:
surface->GetIndexCount()
| 归档时间: |
|
| 查看次数: |
6904 次 |
| 最近记录: |