Я пытаюсь реализовать карту высот в моем коде, но используемый массив кажется неправильным, и вершинная функция opengl не может его распознать, может ли кто-нибудь помочь мне с этим?
float* Createheightmap(int sizex, int sizez) {
float map[][] = new float[sizex][sizez];
for (int i = 0; i < sizex; i++) {
for (int j = 0; j < sizez; j++) {
map[i][j] = float(0.0);
}
}
return map;
}
void drawterrian(void) {
float* map=Createheightmap(sizex,sizez);
for (int i = 0; i < sizex; i++) {
for (int j = 0; j < sizez; j++) {
glBegin(GL_POLYGON);
glVertex3f(float(i),map[i][j],float(j));
glVertex3f(float(i+1),map[i+1][j],float(j));
glVertex3f(float(i+1),map[i+1][j+1],float(j+1));
glVertex3f(float(i),map[i][j+1],float(j+1));
glEnd();
}
}
}
Размер массива объявлен в более ранних функциях
Я нашел аналогичная проблема к твоему. Вы назначаете нормаль к многоугольнику с glNormal в любом месте?
Еще одна вещь, которая будет проблемой, заключается в том, что вы выходите за пределы массива map
с i+1
а также j+1
индексы в drawterrian
, Изменить границы на вашем for
петли, чтобы убедиться, что этого не произойдет.
Как упоминалось в комментариях, будьте осторожны при создании переменных с new
, Убедись в delete
их потом. Возможно, вам придется настроить ваш Createheightmap
функционировать по-другому, чтобы сделать это.
Других решений пока нет …