Ogre::Vector3作为数组使用时变量表现异常问题求助
问题排查与修复方案
writeData参数类型错误
Ogre中HardwareVertexBuffer::writeData的第二个参数为需要写入的总字节数,而非顶点元素个数。若Real为float类型,单个Vector3占用12字节,你直接传入vertex_count作为参数的话,72字节仅能写入6个Vector3;如果vertex_count被误赋值为3,刚好仅写入1个三角形的顶点数据,完全匹配你遇到的现象。
修正后的调用写法:vbuf->writeData(0, vertex_data->vertexCount * sizeof(Ogre::Vector3), vertices, true);- 变量名不一致导致长度错误
你申请数组时使用的长度参数是vertex_data->vertexCount(取值72),但调用writeData时传入的长度变量是vertex_count,需确认两个变量值是否一致,避免vertex_count被误赋值为过小的数值。 - 内存对齐不匹配
Ogre的Vector<3, Real>如果开启了SIMD优化,会强制16字节对齐,单个Vector3实际占用16字节而非12字节,和顶点缓冲要求的连续3个浮点分量布局不匹配。这种情况你需要改用float数组存储顶点数据,或者关闭Vector的对齐优化。 - 顶点缓冲格式不匹配
确认你创建顶点缓冲时设置的顶点格式仅包含位置分量,如果顶点缓冲还绑定了法线、UV等其他顶点属性,直接写入连续Vector3数组会导致数据错位,渲染异常。 - 数组下标越界
确认current_offset + j的最大值不超过数组长度vertex_data->vertexCount,避免越界写入导致有效顶点数据丢失。
内容的提问来源于stack exchange,提问作者Moustachio
相关产品推荐
相关产品推荐

