#c
#c
Вопрос:
Я в основном генерирую массив для плоской плоскости в своей игре, используя этот алгоритм, но я не смог заставить его работать, поскольку при запуске программы возникает исключение. (GLuint — это просто unsigned int в opengl)
const GLuint planeDimension = 30.0f;
const GLuint half = planeDimension / 2;
const GLuint verticesCount = planeDimension * planeDimension;
int counter = 0;
GLfloat planeVertices[verticesCount];
for (GLuint length = 0; length < planeDimension; length ) {
for (GLuint width = 0; width < planeDimension; width ) {
planeVertices[counter ] = length - half;
planeVertices[counter ] = 0.0f;
planeVertices[counter ] = width - half;
}
}
Комментарии:
1. Чаще всего вы вызываете увеличение счетчика в 3 раза. Это 2 слишком много. Ваш массив всего в 3 раза меньше для этого.
Ответ №1:
Вы обращаетесь к внешнему массиву в своем цикле. Ваш цикл имеет как одну итерацию для каждого элемента в planeVertices
. Но вы увеличиваете counter
3 раза каждый раз в цикле. Таким образом, примерно 1/3 пути через все циклы counter
дойдет до конца массива, после чего вы начнете писать вне массива, что вызывает неопределенное поведение.
Я не уверен, что вы пытаетесь сделать. Почему вы записываете 3 разных элемента массива каждый раз через цикл? Так что не ясно, как это исправить. Вы могли бы просто объявить его в 3 раза больше:
GLfloat planeVertices[verticesCount * 3];
Или вы можете объявить его как 2-мерный массив:
GLfloat planeVertices[verticesCount][3];
Тогда ваш цикл будет выполнять:
planeVertices[counter][0] = length - half;
planeVertices[counter][1] = 0.0f;
planeVertices[counter][2] = width - half;
counter ;