Расщепление массива в C ++

0

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.)

Кто-нибудь знает, что я делаю неправильно. Благодарю.

  • 0
    Я думаю, что возможно (x-1) / 3 дает число с плавающей запятой вместо целого числа. Попробуйте использовать ceil((x-1)/3) или (x-1)/3 >> 0
  • 2
    Опечатка? Вы говорите y coord но вы набрали terrainzPos .
Показать ещё 2 комментария
Теги:
arrays

1 ответ

1
Лучший ответ

Ваша логика выглядит нормально, предполагая, что вы 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];
}
  • 0
    что вы подразумеваете под resize () их «правильно»?
  • 0
    @DavidGraovac: измените их размеры, чтобы они были достаточно большими, чтобы вместить все обычные элементы. Кстати, я только что заметил, что, вероятно, настоящая проблема: sizeof . Я думаю, вы, вероятно, имеете в виду desert_scene_plainVerts.size() если это vector , или sizeof(desert_scene_plainVerts) / sizeof(desert_scene_plainVerts[0]) если это массив.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню