OpenGL:线程 1:EXC_BAD_ACCESS(代码=EXC_I386_GPFLT)
OpenGL: Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
我有一个要绘制为三角形的点数组。在将它们放在屏幕上之前,我使用了一个函数来平移它们的位置。但是,在数组上调用翻译函数会导致出现上述错误。
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);
sizeof(positions)
给出数据类型float[6]
的字节大小,即4*6=24
.
参见 sizeof
operator
更改循环中的条件以解决问题:
for(int i=0; i<6; i++)
在C++中我推荐使用std::vector
or std::array
,两者都提供了size()
方法,其中returns容器中元素的数量:
#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;
}
我有一个要绘制为三角形的点数组。在将它们放在屏幕上之前,我使用了一个函数来平移它们的位置。但是,在数组上调用翻译函数会导致出现上述错误。
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);
sizeof(positions)
给出数据类型float[6]
的字节大小,即4*6=24
.
参见 sizeof
operator
更改循环中的条件以解决问题:
for(int i=0; i<6; i++)
在C++中我推荐使用std::vector
or std::array
,两者都提供了size()
方法,其中returns容器中元素的数量:
#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;
}