Im делает игру, и у меня есть массив поплавков, которые создают 3D-модели, которые я разместил с opengl. То, что я хочу сделать, - это разделить координаты x, y & z и превратить их в многомерный массив. Я хочу сделать это, чтобы я мог отрегулировать позицию y по отношению к местности. Цикл for, который я поместил в мою функцию init, выглядит следующим образом:
for (int x = 0; x < sizeof(desert_scene_plainVerts); x++) {
if (((x + 3)%3) == 0) {
//x coord
terrainxPos[x/3] = desert_scene_plainVerts[x];
}
else if (((x + 1)%3) == 0) {
//z coord
terrainzPos[(x-2)/3] = desert_scene_plainVerts[x];
}
else{
//y coord
terrainzPos[(x-1)/3] = desert_scene_plainVerts[x];
}
}
Я получаю сообщение об ошибке в этой строке:
terrainzPos[(x-1)/3] = desert_scene_plainVerts[x];
Ошибка заключается в следующем:
Thread 1: EXC_BAD_ACCESS (code=2, address= 0x10 etc.)
Кто-нибудь знает, что я делаю неправильно. Благодарю.
Ваша логика выглядит нормально, предполагая, что вы terrainxPos[]
, terrainyPos[]
и terrainzPos[]
. Если это vector
s, то убедитесь, что вы правильно их resize()
.
Тем не менее, ваша петля может быть более понятной и простой в том, чтобы писать так:
for (int x = 0, v = 0; x < sizeof(desert_scene_plainVerts); x += 3, v++) {
terrainxPos[v] = desert_scene_plainVerts[x + 0];
terrainyPos[v] = desert_scene_plainVerts[x + 1];
terrainzPos[v] = desert_scene_plainVerts[x + 2];
}
sizeof
. Я думаю, вы, вероятно, имеете в виду desert_scene_plainVerts.size()
если это vector
, или sizeof(desert_scene_plainVerts) / sizeof(desert_scene_plainVerts[0])
если это массив.
ceil((x-1)/3)
или(x-1)/3 >> 0
y coord
но вы набралиterrainzPos
.