我有一组要绘制为三角形的点。在将它们放置在屏幕上之前,我正在使用一个函数来转换它们的位置。但是,在数组上调用转换函数会导致出现上述错误。
float positions[6] = {
-0.5f, -0.5f,
0.0f, 0.5f,
0.5f, -0.5f
};
//Basic Translate function
void basicTranslate(float Tx, float Ty){
for(int i=0; i<sizeof(positions); i++){
if(i % 2 == 0)
positions[i] += Tx;
else
positions[i] += Ty;
}
}
在处理缓冲区和顶点数组之前翻译函数时会发生错误
basicTranslate(2, 1);
unsigned int buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(float), positions, GL_STATIC_DRAW);
GLuint vao = 0;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0);
答案 0 :(得分:2)
sizeof(positions)
给出数据类型float[6]
的大小(以字节为单位),即4*6=24
。
参见sizeof
operator
更改循环中的条件以解决问题:
for(int i=0; i<6; i++)
在C ++中,我建议使用std::vector
或std::array
,它们都提供一个size()
方法,该方法返回容器中元素的数量:
#include <vector>
std::vector<float> positions = {
-0.5f, -0.5f,
0.0f, 0.5f,
0.5f, -0.5f
};
void basicTranslate(float Tx, float Ty)
{
for(size_t i=0; i<positions.size(); i++)
positions[i] += (i % 2 == 0) ? Tx : Ty;
}